• 一百八十二、大数据离线数仓完整流程——步骤一、用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、工作流需要定时,不过需要注意不同工作流的定时时间,保留工作流之间充足的定时区间

    剩余数仓部分,待续!

  • 相关阅读:
    华为新品Mate50将搭载北三短报文通信功能?这项技术是何方神圣
    Redis五大基本数据类型
    MybatisPlus(4)
    React动画实现方案之 Framer Motion,让你的页面“自己”动起来
    计算机设计大赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python
    Numpy计算中的@、*、mutiply、dot的区分(含Python代码)
    免费开源线上社交交友婚恋系统平台 可打包小程序 支持二开 源码交付!
    vue-router的编程式导航有哪些方法?
    深入探索Apache Flink:流处理的艺术与实践
    【python】通过gitlab v4版本api接口获取所有项目代码示例
  • 原文地址:https://blog.csdn.net/tiantang2renjian/article/details/133163765