0


一百八十二、大数据离线数仓完整流程——步骤一、用Kettle从Kafka、MySQL等数据源采集数据然后写入HDFS

一、目的

经过6个月的奋斗,项目的离线数仓部分终于可以上线了,因此整理一下离线数仓的整个流程,既是大家提供一个案例经验,也是对自己近半年的工作进行一个总结。

二、项目背景

项目行业属于交通行业,因此数据具有很多交通行业的特征,比如转向比数据就是统计车辆左转、右转、直行、掉头的车流量等等。

三、业务需求

(一)预估数据规模

(二)指标查询频率

指标的实时查询由Flink实时数仓计算,离线数仓这边提供指标的T+1的历史数据查询

四、数仓技术架构

(一)简而言之,数仓模块的数据源是Kafka,终点是ClickHouse数据库

第一步,用kettle采集Kafka的数据写入到HDFS中;

第二步,在Hive中建数仓,ODS层、DWD层和DWS层

第三步,把Hive的DWS层处理好的结果数据用kettle同步到ClickHouse数据库中

(二)注意点

1、ETL工具统一使用kettle

2、调度工具是海豚调度器

五、数仓环境部署

(一)部署原则:易部署、易维护

(二)部署工具及其版本

1、jdk1.8.0

2、MySQL8.0.31

3、Kafka_2.13-3.0.0(Kafka自带ZooKeeper)

4、ClickHouse21.9.5.16

5、Hadoop3.1.3

6、Hive3.1.2(不要用Spark作为计算引擎,默认的mr即可)

7、DolphinScheduler2.0.5

8、Kettle9.2

(三)部署脚本以及部署文档

由于一开始的数据规模不大以及服务器资源有限问题,所以目前使用的单机版部署,没有部署集群

六、数仓实施步骤(搭建好数仓环境后)

(一)步骤一、用Kettle从Kafka、MySQL等数据源采集数据然后写入HDFS

1、Kettle转换任务配置

(1)样例一:维度表数据——从MySQL导入数据到HDFS

(2)样例二:事实表数据——从Kafka采集数据到HDFS

2、Kettle转换任务配置注意点

(1)维度表数据——从MySQL导入数据到HDFS
2.1.1、由于维度表数据量少,因此直接overwrite写入HDFS中,每次都是覆盖的全量导入
2.1.2、为了减少磁盘资源使用,在Hadoop file output控件中加了gzip压缩方式

(2)事实表数据——从Kafka采集数据到HDFS
2.2.1、由于Kafka的数据在不停发送,所以Kettle任务就需要一直运行。
2.2.2、由于HDFS的特性是以packet为单位写入,一个packet是64KB,所以不能根据日期每天自动生成一个HDFS文件,那样的话每天都会丢失一部分数据。

因为只要每天最后剩余的数据不满64KB,那这部分数据就不会写入。kettle任务直接生成第二天的数据文件、写入第二天的数据,即使这天的数据文件的状态还在写入。

所以就直接生成一个HDFS文件,一直在这个文件里写入数据即可。后面先get到Linux本地,然后再overwrite写入HDFS的ODS层表中,这样不会每天丢数据。

2.2.3、由于kettle任务需要一直运行,所以Hadoop file output控件不能添加数据压缩方式。

否则虽然显示HDFS文件有数据,但只要任务不停止文件就不会压缩,这样HDFS文件实际上没有数据,所以HDFS文输出控件不能添加压缩

3、海豚调度器调度kettle转换任务

(1)首先,为了便于团队开发,kettle需要配置共享资源库,把kettle任务统一放在资源库中运行。

用海豚调度kettle任务不需要开启carte服务,如果是用xxl-job调度,那可以开启carte服务

(2)对于事实表数据——从Kafka采集数据到HDFS
3.2.1、脚本不要加日志文件,因为数据量太大。

#!/bin/bash
source /etc/profile

/usr/local/hurys/dc_env/kettle/data-integration/pan.sh -rep=hurys_linux_kettle_repository -user=admin -pass=admin -dir=/kafka_to_hdfs/ -trans=02_Kafka_to_HDFS_evaluation

3.2.2、工作流不需要定时,直接启动,一直跑任务即可

(3)对于维度表数据——从MySQL导入数据到HDFS
3.3.1、脚本可以添加日志文件

#!/bin/bash
source /etc/profile

/usr/local/hurys/dc_env/kettle/data-integration/pan.sh -rep=hurys_linux_kettle_repository -user=admin -pass=admin -dir=/mysql_to_hdfs/ -trans=04_MySQL_to_HDFS_t_team level=Basic >>/home/log/kettle/04_MySQL_to_HDFS_t_team_date +%Y%m%d.log

3.3.2、工作流需要定时,不过需要注意不同工作流的定时时间,保留工作流之间充足的定时区间

剩余数仓部分,待续!

标签: 大数据 kafka kettle

本文转载自: https://blog.csdn.net/tiantang2renjian/article/details/133163765
版权归原作者 天地风雷水火山泽 所有, 如有侵权,请联系我们删除。

“一百八十二、大数据离线数仓完整流程——步骤一、用Kettle从Kafka、MySQL等数据源采集数据然后写入HDFS”的评论:

还没有评论