此次实践缘由
hive自去年学习后,就一直放着少有使用了,前几天接到面试,说hive这块,让再多学习学习。
所以有了这次实践,复习一把。
主要是想做些优化,以及尝试模拟出数据倾斜并解决倾斜的问题
关于实验
实验的前半部分大部分参考的林子雨实验室的案例
林博士团队的案例,确实讲得很详细,
关于这一部分,我在走一遍流程的前提下,提炼下要素,并对原案例进行一些更深入的观察。这些内容大都使用黄色背景高亮
我的重心是,hive做mapreduce工作这一块的优化,以及尝试模拟出数据倾斜并解决倾斜的问题。
hive、hbase、mysql数据传输
这部分,大都来自林子雨实验室
关于集群:Cloudera CDH5.13.2,搭建过程可参考此文
数据集下载:https://pan.baidu.com/s/1nuOSo7B
【说句题外话,用了一年多的破解版网盘,我欠百度网盘一个会员。。。等秋招顺利拿了offer】
数据集预览
mkdir -p /home/guest/bigdatacase/dataset
scp ~/elk/user.zip user@your_remote_ipaddress:/home/guest/bigdatacase/dataset
unzip /home/guest/bigdatacase/dataset/user.zip
有两个文件:raw_user.csv和small_user.csv。
head /usr/local/bigdatacase/dataset
每行记录都包含5个字段,数据集中的字段及其含义如下:
user_id
(用户id)
item_id(商品id)
behaviour_type(包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4)
user_geohash(用户地理位置哈希值,有些记录中没有这个字段值,后面用脚本做数据预处理时把这个字段全部删除)
item_category(商品分类)
time(该记录产生时间)
删除csv表头:如果是更复杂的,hive自定义UDF处理可参考以前这篇文章
sed -i '1d' small_user.csv
数据预处理
为每行记录增加一个id字段(让记录具有唯一性)、增加一个省份字段(用来后续进行可视化分析),并且丢弃user_geohash字段(后面分析不需要这个字段)
脚本如下
下面的代码的基本形式是: awk -F “,” ‘处理逻辑’ $infile > $outfile |
#!/bin/bash
infile=$1
outfile=$2
#最后的$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()*