大数据课程最后任务-hive处理数据

2023-11-13

好的这是第五次也就是不加额外挑战任务的最后任务
基本过程来自于厦门大学的hive教程,主要是hive处理20w的数据
两部分,一部分是安装,来自http://dblab.xmu.edu.cn/blog/959/
,一步分是运行http://dblab.xmu.edu.cn/blog/1005/

运行没bug,一路顺风,我觉得就没有写教程的必要,复制粘贴就行,省点脑细胞背背单词打打游戏多快乐
所以我写的是第一部分的教程,原教材只要hive1左右版本貌似,就性能来说比较强,代价是稳定性,部分命令不能用,我也懒得修了,能用就行,就是要做好连着调整一堆bug的准备,但是长痛不如短痛,之后就感觉想便秘一年拉稀全部出来了一样畅快(粗鄙)
好的那么开始

一、下载解压要被处理的数据

1.到百度下载资源,已经打包成了zip
http://pan.baidu.com/s/1nuOSo7B
2.新终端进入下载文件夹,检查下载情况

cd 下载

3.在另开一个终端,进入hadoop文件夹,创建新文件夹,存储这次数据文件

sudo mkdir bigdatacase
sudo chown -R hadoop:hadoop ./bigdatacase/
cd bigdatacase/
mkdir dataset

注意这里bigdata文件夹和dataset
4.回到之前那个下载文件夹的终端,解压文件到dataset文件夹

unzip user.zip -d /usr/local/hadoop/bigdatacase/dataset/

5.到dataset文件夹验证一下解压情况,应该有两个csv文件

ls					//应该返回两个csv
head -5 raw_user.csv//这个反馈前五行数据,有5个字段---userid,itemid,behaviortype,usergeohash,itemcategory,time

二、数据集的预处理

1、删除第一行字段名称,第一行不是数据

sed -i '1d' raw_user.csv 
sed -i '1d' small_user.csv 

2、查看删除情况

head -5 raw_user.csv
head -5 small_user.csv

3、创建pre_deal.sh文件批处理

vim pre_deal.sh
#!/bin/bash
#输入文件
infile=$1
#输出文件
outfile=$2
#下面代码形式为awk -F "," '处理逻辑' $infile > $outfile
#第一个大括号是初始化常量,第二个是awk逐句运行的内容-》记录个数,随机省份,时间>,substr(...)表示第六列,1-10个元素
#srand()表示取随机数种子
#id自增,保证每条记录唯一性
#使用awk可以逐行读取输入文件,并对逐行进行相应操作。其中,-F参数用于指出每行记录
的不同字段之间用什么字符进行分割,这里是用逗号进行分割。
#注意!!最后的$infile > $outfile必须跟在}’这两个字符的后面
awk -F "," 'BEGIN{
        srand();
        id=0;
        Province[0]="山东";Province[1]="山西";Province[2]="河南";Province[3]="河
北";Province[4]="陕西";Province[5]="内蒙古";Province[6]="上海市";
        Province[7]="北京市";Province[8]="重庆市";Province[9]="天津市";Province[10]="福建";Province[11]="广东";Province[12]="广西";Province[13]="云南"; 
        Province[14]="浙江";Province[15]="贵州";Province[16]="新疆";Province[17]="西藏";Province[18]="江西";Province[19]="湖南";Province[20]="湖北";
        Province[21]="黑龙江";Province[22]="吉林";Province[23]="辽宁"; Province[24]="江苏";Province[25]="甘肃";Province[26]="青海";Province[27]="四川";
        Province[28]="安徽"; Province[29]="宁夏";Province[30]="海南";Province[31]="香港";Province[32]="澳门";Province[33]="台湾";
    }
    {
        id=id+1;
        value=int(rand()*34);       
        print id"\t"$1"\t"$2"\t"$3"\t"$5"\t"substr($6,1,10)"\t"Province[value]
    }' $infile > $outfile

4.运行脚本,先samll_user.csv输入试试

bash ./pre_deal.sh small_user.csv user_table.txt

5.启动hadoop,将已近预处理的small_user.csv 的结果上传hdfs

start-dfs.sh
hadoop fs -mkdir /bigdatacase/dataset //hdfs创建目标文件夹
hadoop fs -put /usr/local/hadoop/bigdatacase/dataset/user_table.txt /bigdatacase/dataset		//上传文件
hadoop fs -cat  /bigdatacase/dataset/user_table.txt | head -10	//检查

三、hive安装

1.官方下载地址:http://www.apache.org/dyn/closer.cgi/hive/
下面教程配套的hive选择版本 apache-hive-3.1.2-bin.tar.gz
下面教程配套的hive选择版本 apache-hive-3.1.2-bin.tar.gz
下面教程配套的hive选择版本 apache-hive-3.1.2-bin.tar.gz
下面教程配套的hive选择版本 apache-hive-3.1.2-bin.tar.gz
下面教程配套的hive选择版本 apache-hive-3.1.2-bin.tar.gz
2.解压缩包

sudo tar -zxvf ./apache-hive-3.1.2-bin.tar.gz -C /usr/local/
cd /usr/local
sudo mv apache-hive-3.1.2-bin/ hive
sudo chown -R hadoop:hadoop hive

3.设置路径

vim ~/.bashrc

4.加入路径

export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/usr/local/hadoop

5.出来刷新路劲文件

source ~/.bashrc

6.设置hive配置
先基础设置
解放default配置文件

    cd /usr/local/hive/conf
    mv hive-default.xml.template hive-default.xml

然后新建一个配置文件

cd /usr/local/hive/conf
vim hive-site.xml

在其中加入下方内容

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
    <description>password to use against metastore database</description>
  </property>
</configuration>

四、安装配置mysql

然后hive和本地的mysql链接,我的mysql是两年前做项目留下的,所以没有实验安装,这里贴个教程(这个教程应该可靠吧。。。没用过,但是相信能用,说不定还能避开我的部分bug)
1.
Ubuntu下mysql安装教程:http://dblab.xmu.edu.cn/blog/install-mysql/
mysql jdbc包:http://www.mysql.com/downloads/connector/j/

    tar -zxvf mysql-connector-java-5.1.40.tar.gz   #解压
    cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar  /usr/local/hive/lib #将mysql-connector-java-5.1.40-bin.jar拷贝到/usr/local/hive/lib目录下

2.启动并登陆mysql shell

     service mysql start #启动mysql服务
     mysql -u root -p  #登陆shell界面

3.新建hive数据库。

mysql> create database hive;    #这个hive数据库与hive-site.xml中localhost:3306/hive的hive对应,用来保存hive元数据

4.配置mysql允许hive接入:

mysql> grant all on *.* to hive@localhost identified by 'hive';   #将所有数据库的所有表的所有权限赋给hive用户,后面的hive是配置hive-site.xml中配置的连接密码
mysql> flush privileges; 

5.启动hadoop,接着启动hive
我们已经设置过了hive的路径,所以可以直接输hive

    start-all.sh #启动hadoop
    hive  #启动hive

好了,接下来的部分就是我为什么投自制而不是转载了
真的是一步一坑
如果你好运没有出现下面我亲自见过的bug,那可以跳过看你有没有出现下一个bug,等这些bug都调试结束了,基本这个任务就只剩下到厦门大学教程复制粘贴命令了,3min完成(指任务2)
好的

第一坑
hive启动时报错Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/Hive

解答:hadoop3以上之前只设置.bashrc文件,但是之前手贱试着改了一下etc/hadoop-env.sh文件,这个bug告诉我很可能hive还是跑去env文件调用路径,那么如果我们更改env的路径或者撤销路径让他去bashrc读取应该就可以解决了。

cd /usr/local/hadoop/etc/hadoop/
vim hadoop-env.sh

在export HADOOP_CLASSPATH前面加一个“#”以注销此文件中的路径,毕竟不知道啥时候可能会用,注销就行
注:你说你hadoop是2版本就是要改env文件?
。。。
。。。
那我只能祝你不出现这个bug了

第二坑 之前确实改变了路径,但是启动hive报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
这里给个链接:http://www.bubuko.com/infodetail-3286965.html?cf_chl_jschl_tk=163d46a2fca028fe62866b772e7b60ff7da4d193-1588479155-0-AcaYRARuf2AqSUtrOOK6kXOc6MOYCDAI_Rjv8e429tRaDs_zgSDrK5Qpi4fd5A987psCaGnu67GVNu5PZnSpWVojT47tCAj3LIlSYLTuYcbnOMxbMXB1ldJt3S1MhvDnCez4hmXPuHKZlOopaCFSIq7qP3POTrHgKRdlnlu20Y0UH47snolx82rOiNrGBobyFcKrcXNgpH7DFV4A4ulz83o5noGaHHdIz4CHfpzqDPRLMBOWEfjhSY7My2tzLRmgxCNPjP49K43GSUTxSVqUYum2m0ufLeTSfu7xNgeTtfeP8CGG2tzmJcG_vQwNp5oakg

简单的解释就是hive有一个包guava,hadoop也有一个,系统不知道用哪一个,于是卡死报错
所以我们吧hive的guava.jar删除,吧hadoop的已到hive下就行了
ubuntu画面操作简单,centos用mv命令和rm就行
hadoop的路径是{HADOOP_PATH}\share\hadoop\common\lib,hive的路径是{hive}/lib
然后再终端输入
hive
应该是和mysql类似的页面hive> 这样
exit;以退出,加上“;”
然后实验一下能不能跑实际的句子,然后创建的时候就发现出现第三个bug

第三坑 FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.me
但是没有关系,离开hive的终端, 在新开一个终端运行下面一行就行

schematool -dbType mysql -initSchema

然后发现紧接着报错初始化失败,就出现第四个bug

第四坑 SLF4J: Class path contains multiple SLF4J bindings.
可以看到下面两行分别是hice下jar路劲和hadoop路径,到其中一个路径下删除一个对应的jar就行,要是稳妥点可以选择剪切出文件夹备份

然后是第五个bug
第五坑org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
意思是缺少一个驱动jdbc的jar
这里我用了不止一个教程,把我觉得可能有用的教程给出来
https://www.maiyewang.com/archives/2667
https://dev.mysql.com/downloads/connector/j/
https://blog.csdn.net/weixin_41440282/article/details/78926146?utm_source=blogxgwz9

我觉得最有用的其实是在第二个网址下载一个jar,放到usr/local/hive/lib路径里面,解压都不要,然后运行就行
这里测试貌似已经可以了,但是给我找了这么多麻烦下午都没打lol,我要血偿(指无bug提示开启hive)
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
那么这算是第六个bug
然后这个bug可以在hive/lib搜pom文件夹配置吧jar的依赖项加上,但是主要造成原因是hive3版本没有这两个包,替代了另一个包,反正没太大影响可以无视,实在忍不住可以叫好兄弟帮忙从2版本考一下jar,复制进自己的lib文件夹
什么你说我不要血偿了?
修bug哪有峡谷好玩,年轻人何必打打杀杀对不对:)



hive创建一个实验用数据库和表单,这次任务算完成一半

    hive>  create database dblab;
    hive>  use dblab;
    hive>  CREATE EXTERNAL TABLE dblab.bigdata_user(id INT,uid STRING,item_id STRING,behavior_type INT,item_category STRING,visit_date DATE,province STRING) COMMENT 'Welcome to xmu dblab!' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/bigdatacase/dataset';
        hive>  select * from bigdata_user limit 10;
    hive>  select behavior_type from bigdata_user limit 10;

好了这时候基本上hive就可以五bug运行实验需要的命令了,有人说我命令还报bug啊,那我再给你仙人指路,下面只需要学习(copy)这个链接里的命令就行了
http://dblab.xmu.edu.cn/blog/1005/

May the flame guide thee

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据课程最后任务-hive处理数据 的相关文章

  • 无法使用 beeline 连接到 hive,用户 root 无法冒充匿名

    我正在尝试使用 beeline 连接到配置单元 connect jdbc hive2 localhost 10000我被要求提供用户名和密码 Connecting to jdbc hive2 localhost 10000 Enter us
  • 更改配置单元中的列类型

    我昨天刚开始学习 hive 我一直致力于更改 hive 中列的类型 我想问列类型的更改是否对它们有某种限制 因为我只能进行特定类型的更改 例如我可以将 int 转换为 double string 转换为 double double 转换为
  • Hive 命令行 如果不是在后台执行 MapReduce 作业,则选择查询所花费的时间不正确

    我正在运行配置单元查询 如下所示 Select count group name from table name group by group name 状态 正在运行 在应用程序 ID XXXX 的 YARN 集群上执行 VERTICES
  • 如何跳过 Hive 外部表中的 CSV 标头?

    我正在使用 Cloudera 的 Hive 版本 并尝试通过 csv 文件创建外部表 其中包含第一列中的列名称 这是我用来执行此操作的代码 CREATE EXTERNAL TABLE Test RecordId int FirstName
  • Hive 函数替换列值中的逗号

    我有一个配置单元表 其中字符串列的值为 12 345 有没有什么方法可以在插入此配置单元表期间删除逗号的配置单元函数 您可以使用regexp replace string INITIAL STRING string PATTERN stri
  • 根据列删除配置单元中的重复行

    我有一个包含 10 列的 HIVE 表 其中前 9 列将有重复的行 而第 10 列则不会 因为 CREATE DATE 将具有创建日期 例子 如果我今天在表中插入 10 行 它将具有 CREATE DATE 作为今天的日期 如果我明天再次插
  • 在 hive 中创建外部表时,我可以将位置指向目录中的特定文件吗?

    我这样定义了一个表 create external table PageViews Userid string Page View string partitioned by ds string row format as delimite
  • 如何从 Hive 中的 json 字符串中提取选定的值

    我在 Hive 中运行一个简单的查询 生成以下输出 以及一些其他附加列 col1 col2 A variable1 123 variable2 456 variable3 789
  • 从hive中的子查询中获取值

    我试图参数化配置单元中的值 而不是在查询中对其进行硬编码 下面是查询 select from employee where sal gt 30000 但我不需要使用硬编码的 30000 值 而是需要来自相同的查询 如下所示 但我遇到了问题
  • 将 Hive 表导出到 hdfs 中的 csv

    我知道在 Hive 中将表保存到 csv 或其他文本文件 时 分隔符存在一个已知问题 所以我想知道你们是否可以帮助我解决这个问题 我有一个现有的表 表 A 我想将其以 csv 格式保存到 hdfs 通过阅读其他回复 我相信我必须首先创建一个
  • 如何在 Hive 中将字符串转换为毫秒时间戳

    我有一个字符串 20141014123456789 它代表一个毫秒时间戳 我需要将其转换为 Hive 中的时间戳 0 13 0 而不丢失毫秒 我尝试了这个 但 unix timestamp 返回一个整数 所以我丢失了毫秒 from unix
  • Hive - 通过聚合跨组的值来创建映射列类型

    我有一个看起来像这样的表 customer category room date 1 A aa d1 1 A bb d2 1 B cc d3 1 C aa d1 1 C bb d2 2 A aa d3 2 A bb d4 2 C bb d4
  • Hive如何存储数据,什么是SerDe?

    当查询表时 SerDe 将将文件中的字节中的一行数据反序列化为 Hive 内部使用的对象来操作该行数据 执行 INSERT 或 CTAS 时 请参阅第 441 页上的 导入数据 表的 SerDe 将将 Hive 的一行数据的内部表示序列化为
  • Hive 中字符串数据类型是否有最大大小?

    谷歌了很多 但没有在任何地方找到它 或者这是否意味着只要允许集群 Hive 就可以支持任意大字符串数据类型 如果是这样 我在哪里可以找到我的集群可以支持的最大字符串数据类型大小 提前致谢 Hive 列表的当前文档STRING作为有效的数据类
  • Hive 中 Sortby 和 orderby 查询的区别

    Hive sort by and order by命令用于按排序顺序获取数据 例如 Sort by hive gt SELECT E EMP ID FROM Employee E SORT BY E empid Order by hive
  • 连接到 Hive 时使用 Spark 进行 Kinit

    我正在尝试从独立的 Spark 连接到 Hive hadoop 集群具有 kerberos 身份验证 有人可以让我知道如何在 Spark 程序中执行 kinit 我可以连接到配置单元吗 更新 我的 Spark 与 Hadoop 位于不同的集
  • 如何将Hive数据表迁移到MySql?

    我想知道如何将日期从 Hive 转移到 MySQL 我看过有关如何将 Hive 数据移动到 Amazon DynamoDB 的示例 但没有看到有关如何将 Hive 数据移动到 MySQL 等 RDBMS 的示例 这是我在 DynamoDB
  • 如何通过Python访问Hive?

    https cwiki apache org confluence display Hive HiveClient HiveClient Python https cwiki apache org confluence display Hi
  • 为 Presto 和 AWS S3 设置独立 Hive Metastore 服务

    我工作的环境中使用 S3 服务作为数据湖 但没有 AWS Athena 我正在尝试设置 Presto 以便能够查询 S3 中的数据 并且我知道我需要通过 Hive Metastore 服务将数据结构定义为 Hive 表 我正在 Docker
  • 计算 pyspark df 列中子字符串列表的出现次数

    我想计算子字符串列表的出现次数 并根据 pyspark df 中包含长字符串的列创建一个列 Input ID History 1 USA UK IND DEN MAL SWE AUS 2 USA UK PAK NOR 3 NOR NZE 4

随机推荐

  • 分布式日志系统的设计和实践

    什么是日志 日志是一种按照时间顺序存储记录的数据 它记录了什么时间发生了什么事情 提供精确的系统记录 根据日志信息可以定位到错误详情和根源 按照APM概念的定义 日志的特点是描述一些离散的 不连续的 事件 日志是按照错误级别分级的 常见的错
  • matlab 逆否,逆否命题与反证法

    在原命题 逆命题 否命题与逆否命题中 原命题与逆否命题等价 同真同假 所以证明一个命题成立可以去证明它的逆否命题成立 即先否定结论 在这个否定的结论下 去推出原来的条件的否定成立 例题一 1 判断命题 如果 x y neq 3 那么 x n
  • Python使用xlwt和xlrd读写excel文件

    Python使用xlwt和xlrd读写excel文件 xlwt和xlrd是两个相互配套的模块 在Python中 用于将数据写入Excel文件和读取Excel文件的数据 从字面即可看出xlwt是对xls格式的文件进行write xlrd是对x
  • nvidia-docker踩坑记录

    docker nvidia docker配置镜像创建容器 众所周知 想要在容器中使用nvidia的显卡 需要使用nvidia docker命令创建容器 环境说明 服务器端为Ubuntu18 04离线 nvidia smi正常使用 CUDA版
  • APIPOST入门+认识接口(前后端分离)

    APIPOST入门 认识接口 前后端分离 文章目录 APIPOST入门 认识接口 前后端分离 啥是 API 接口 笑话小案例 编写mock数据 如何解决跨域问题 后续要解决的 实战二维码 驾照题库实战项目 自己写一个接口 2 post和ge
  • 6:sort_values,loc,corr数据筛选,绘图

    一 使用sort values 对某一列 进行从小到大或者从大到小的排序 1 对一列进行操作 import pandas as pd df pd read excel r C Users 73575 Desktop 北京新发地菜价 xlsx
  • 整型的提升和截断详解(看完包会)

    所有常量值 在没有后缀得情况下 默认是4个字节 int型 将一个int型值赋给char型变量时 会发生整形截断 按存储顺序截断 先到先截 一个char截断一个字节即8个bit位 将char类型值按有常量值 在没有后缀得情况下 默认是4个字节
  • linux常用库 对应函数

    1 include
  • Vue在线引入地址

    Vue在线引入地址 vue2 vue3 CodePan在线运行ElementUI时添加的JS及CSS引用地址 Vue https cdn jsdelivr net npm vue 2 dist vue
  • 【Flink系列1】flink与spark的区别

    Flink简介 spark基本架构 flink基本架构 Spark提出的最主要抽象概念是弹性分布式数据集 RDD flink支持增量迭代计算 基于流执行引擎 Flink提供了诸多更高抽象层的API以方便用户编写分布式任务 1 DataSet
  • RabbitMQ镜像集群搭建

    RabbitMQ镜像集群搭建 消息队列 在消息的传输过程中保存消息的容器 MQ角色 Broker 即消息队列服务器实体 Exchange 消息交换机 它指定消息按什么规则 路由到哪个队列 Queue 消息队列载体 每个消息都会被投入到一个或
  • 基于SpringBoot并整合MyBatis和Thymeleaf模板引擎开发的图书管理系统

    先展示下前端页面 登录页面 用户注册页面 一 管理员相关页面以及功能 管理员主页信息以及左侧导航栏 页头可查看当前管理员的信息
  • Unity Application.LoadLevel() 已过时

    解决办法 使用EditorSceneManager方法 https blog csdn net shenqiankk article details 100137502
  • 大数据技术——Scala语言基础

    Scala基础知识 控制结构 if条件表达式 有一点与Java不同的是 Scala中的if表达式的值可以赋值给变量 while循环 for循环 基本语法 其中 变量 lt 表达式 被称为 生成器 generator 守卫 guard 的表达
  • finereport连接oracle_FINEREPORT连接远程ORACLE数据库

    有如下错误提示 SEVERE CannotcreatePoolableConnectionFactory Listenerrefusedtheconnectionwiththefollowingerror ORA 12505 TNS lis
  • python小技巧大应用--基础实用漂亮界面(无边框,圆角,可拖拽)

    这回要实现一个漂亮的基础界面 要具有如下特色 无边框 圆角 漂亮的背景 可拖拽移动 具有最小化 关闭按钮 界面与代码分离 支持qss 先展示一下最后的效果 那就开始工作吧 1 通过Qt Designer实现界面设计 将设计好的界面保存为di
  • 【数据结构】设计循环队列详解

    我的个人主页 我们登上并非我们所选择的舞台 演出并非我们所选择的剧本 Enchiridion 设计循环队列 前言 1 什么是循环队列 2 循环队列的设计 2 1 MyCircularQueue k 实现 2 2 isEmpty 和 isFu
  • usb 命名乱的一批,怎么破

    USB 的命名真是乱的一批 命名里 一股浓浓的 印度风扑面而来 我想给 iso 文件加个驱动直接跪了 被绕进去了 幸运的是速度没乱 以下用速度整理该文档 USB2 0 时代 12 mbps usb1 0 480 mbps usb2 0 US
  • 什么是Restful?

    REST 简介 REST 是英文 Representational State Transfer 的缩写 有中文翻译为 具象状态传输 REST 这个术语是由 Roy Fielding 在他的博士论文 Architectural Styles
  • 大数据课程最后任务-hive处理数据

    好的这是第五次也就是不加额外挑战任务的最后任务 基本过程来自于厦门大学的hive教程 主要是hive处理20w的数据 两部分 一部分是安装 来自http dblab xmu edu cn blog 959 一步分是运行http dblab