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

好的这是第五次也就是不加额外挑战任务的最后任务
基本过程来自于厦门大学的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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值