文章目录
- 一、实训课题
- 二、实训目的
- 三、操作环境
- 四、 实训过程(实训内容及主要模块)
- 五、实训中用到的课程知识点
- 六、实训中遇到的问题及解决方法
- 七、课程实训体会与心得
- 八、程序清单
一、实训课题
大数据项目之电商数据仓库系统
二、实训目的
完成一个电商数仓项目:
1、完成dadoop、kafka、flume、mysql以及zookeeper等相关环境的搭建。
2、安装与spark兼容的hive数据仓库环境,并使用 MySQL 存储Metastore,实现与其他客户端共享数据。
3、模拟在Kafka生产消息方输入的信息,可在Kafka消费消息方正常接收,启用kafka监控。
4、在hive数据仓库中创建一个gmall数据库,利用sqoop工具将mysql数据库数据先导入hadoop集群的HDFS中,再从HDFS导进到hive数据仓库的gmall数据库中,最后在gmall数据库中依次逐层从ODS层到ADS层导入数据。
三、操作环境
1. Linux系统:Centos 7.5
2. Hive on spark版本:apache-hive-3.1.2
3. Java版本:1.8.0_212
4. Kafka版本:kafka_2.11-2.4.1
5. Flume版本:apache-flume-1.9.0
6. Sqoop版本:sqoop-1.4.6
7. ZooKeeper版本:apache-zookeeper-3.5.7
8. MySQL版本:mysql-5.7.28
9. Spark版本:spark-3.0.0
相关技术 | 描述 |
---|---|
Hive | 基于Hadoop的数据仓库工具,将结构化的数据文件映射为数据库表,将SQL语句转换为MapReduce任务进行运行,快速实现简单MapReduce统计。 |
Kafka | 一种高吞吐量的分布式发布订阅消息系统; |
Flume | 分布式的海量日志采集、聚合和传输的系统,支持在日志系统中定制各类数据发送方,用于收集数据; |
Sqoop | 用于Hadoop、Hive与MySQL间数据的传递,可将MySQL中的数据导进Hadoop的HDFS中,也可将HDFS的数据导进到hive数据库中。 |
ZooKeeper | 大型分布式系统的可靠协调系统,提供:配置维护、名字服务、分布式同步、组服务等。 |
Spark | 很流行的开源大数据内存计算框架。可基于Hadoop上存储的大数据进行计算。 |
四、 实训过程(实训内容及主要模块)
1. 搭建hadoop集群环境:在大数据实践配置的hadoop集群的基础上快速完成再次搭建。
2. 安装与spark兼容的hive数据仓库环境。
3. 使用 MySQL 存储hive的元数据库Metastore,实现与其他客户端共享数据。
4. 完成kafka、flume以及zookeeper等集群环境的搭建。
5. 利用sqoop将mysql数据库数据先导入HDFS中,再导进到hive的gmall数据库中,最后依次从ODS层逐层导入数据直到ADS层为止。
五、实训中用到的课程知识点
-
数仓搭建时数据采用
LZO压缩
,减少磁盘存储空间。比如100G数据可以压缩到10G以内。 -
数仓搭建时,数据采用
parquet存储方式,是可以支持切片的,不需要再对数据创建索引
。如果单纯的text方式存储数据,需要采用支持切片的,lzop压缩方式并创建索引。 -
数据装载到时间维度表时,dwd_dim_date_info是
列式存储+LZO压缩
。直接将date_info.txt文件导入到目标表,并不会直接转换为列式存储+LZO压缩。需创建一张普通的临时表dwd_dim_date_info_tmp,将date_info.txt加载到该临时表中。最后通过查询临时表数据,把查询到的数据插入到最终的目标表中。 -
使用脚本可以较快启动相关服务进程、导入及导出数据等,其中
nohup表示不挂起
的意思,不挂断地运行命令;/dev/null:是 Linux 文件系统中的一个文件,被称为黑洞,所有写入改文件的内容都会被自动丢弃
;2>&1 : 表示将错误重定向到标准输出上;&: 放在命令结尾,表示后台运行
。 -
使用
“select * from 表名” 不执行MR操作
,默认采用的是ods_log建表语句中指定的DeprecatedLzoTextInputFormat,能够识别 lzo.index为索引文件。 -
使用
“select count(*) from 表名” 执行MR操作
,默认采用的是CombineHiveInputFormat,不能识别lzo.index为索引文件,将索引文件当做普通文件处理。更严重的是,这会导致LZO文件无法切片,修改CombineHiveInputFormat为HiveInputFormat
即可。
六、实训中遇到的问题及解决方法
所遇问题:
1) 再次格式化NameNode导致无法启动datanode进程
解决办法:格式化NameNode,会产生新的集群id,导致 NameNode和DataNode的集群id不一致
,集群找不到已往数据。可删除所有机器的data和logs目录,然后再进行格式化
,或者进入namenode对应的clusterID所在的文件,复制其clusterID到datanode对应的clusterID
即可。
2)xshell连接虚拟机后,输入指令时从数字小键盘输入的数字无效
解决办法:打开xshell,点击“默认属性”
,打开对话框,在类别中选择 “VT模式”
,然后在右侧的选项中,选择:初始数字键盘模式中的“设置为普通”
,最后点击“确定”
即可。
3)配置了多队列导致加载数据时,所用队列没有足够的空间
解决办法:修改hadoop安装目录下的配置文件:capacity-scheduler.xml
,增加该队列的容量
4) 执行MapReduce任务时,虚拟内存超额,导致进程被杀掉
解决办法:适当增大 yarn.nodemanager.vmem-pmem-ratio
的大小,为物理内存增大对应的虚拟内存。
5) Hive版本和Spark版本不兼容,无法上传jar包、导入数据到hadoop HDFS。
解决办法:使用经编译过与Spark版本兼容的hive环境,即hive on spark版本,重新执行任务进行测试,成功状态如下图:
七、课程实训体会与心得
-
通过为期两周的大数据project 5,我学会了
利用三台虚拟机作服务器搭建Hadoop、kafka、flume、mysql以及zookeeper等环境
,利用sqoop工具将mysql数据导入hadoop 集群的HDFS上
,再导进到hive的gmall数据库中
。创建并使用脚本将数据依次从ODS层逐层导入数据直到ADS层为止。 -
正确搭建环境需有以下进程:
Hadoop105虚拟机上:
RunJar、RunJar、QuorumPeerMain、Kafka、NameNode、DataNode、NodeManager、Application、JobHistoryServer;
Hadoop106虚拟机上:
Application、QuorumPeerMain、Kafka、DataNode、ResourceManager、NodeManager;
Hadoop107虚拟机上:
QuorumPeerMain、Kafka、Application、SecondaryNameNode、DataNode 、NodeManager。
其中,除了原hadoop集群所必备的进程外,启动 metastore与启动 hiveserver2各对应一个RunJar进程
;启动 hadoop105及hadoop106 采集flume各对应一个Application进程
,
启动 hadoop107 消费flume也对应一个Application进程
;启动Kafka、zookeeper在三台虚拟机上各对应一个Kafka、QuorumPeerMain进程
。
-
安装与spark兼容的hive环境后,
Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行
。可使用MySQL存储hive的元数据库Metastore,可实现与其他客户端共享数据。 -
数仓搭建时数据
采用LZO压缩,减少磁盘存储空间
。比如100G数据可以压缩到 10G以内。搭建数仓时,数据采用parquet存储方式,是可以支持切片的,不需要再对数据创建索引
。如果单纯的text方式存储数据,需要采用支持切片的,lzop压缩方式并创建索引。 -
对于采用
列式存储+LZO压缩的数据库表
。直接将txt文件导入到目标表,并不会直接转换为列式存储+LZO压缩。需创建一张普通的tmp临时表
,将txt文件加载到该临时表中。最后通过查询临时表数据,把查询到的数据插入到最终的目标表中。
6.一些同学采用了对项目操作过程采用视频录制放入PPT进行演示,也可减少一些对应PPT页数,同时让PPT内容更生动和具备动态效果,也是一种不错的选择。
八、程序清单
结果演示:
1、 cluster.sh启动截图(全屏幕,带多条自己名字)
cluster.sh start
2、 cluster.sh启动后,jpsall截图(全屏幕,带多条自己名字)
jpsall
3、gmall数据仓库建表结果
show tables;
4、ods层订单表数据查询(带着名字缩写5遍)
select * from ods_order_info limit 5;
DataGrip连接hive数据仓库查询:
- DWD层数仓数据查询(带着名字缩写5遍)
7.1 查看地区维度表
select * from dwd_dim_base_province limit 12;
7.2查看时间维度表
select * from dwd_dim_date_info limit 15;
- DWS层数仓数据查询(带着名字缩写5遍)
8.1 查看每日商品行为
select * from dws_sku_action_daycount where dt=‘2020-06-14’ limit 15;
8.2 查看每日地区统计
select * from dws_area_stats_daycount where dt=‘2020-06-15’ limit 15;
- DWT层数仓数据查询(带着名字缩写5遍)
9.1 查看商品主题宽表
select * from dwt_sku_topic limit 15;
9.2查看地区主题宽表
select * from dwt_area_topic limit 15;
- ADS层数仓数据查询(带着名字缩写5遍)
10.1 查看品牌复购率
select * from ads_sale_tm_category1_stat_mn;
10.2 查看地区主题信息
select * from ads_area_topic;
- kafka数据采集
Kafka生产消息
kafka-console-producer.sh --broker-list hadoop105:9092 --topic topic01
Kafka消费消息
kafka-console-consumer.sh --bootstrap-server hadoop105:9092 --from-beginning --topic topic01
Kafka监控
先使用ke.sh启动相关服务,登录http://hadoop105:8048/ke查看相关信息。
12. 查看ods_log日志
应用:使用DataGrip工具连接本地hive数据库,并检测数据库表里数据的一致性