电商数仓学习-DataX的使用

DataX是一个由阿里巴巴开源的离线数据同步工具,支持多种异构数据源间的同步。本文详细介绍了DataX的架构原理、配置使用、案例实践以及优化方法,包括MySQL到HDFS、HDFS到MySQL的数据同步,并对比了DataX与Sqoop的区别。重点讲解了DataX的配置文件格式、参数设置以及速度和内存的调整策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

前面已经说明全量表适用DataX工具进行同步,因此对DataX进行一个简单的学习

一、DataX简介

1.DataX概述

       DataX 是一个离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

2.DataX支持的数据源

在这里插入图片描述
从图上看,数仓用到的数据源基本上都支持。

二、DataX架构原理

1.DataX设计理念

       为了解决异构数据源(异构数据源指的是相同的数据在不同的地方存储的结构不同)同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步(这里不管是从哪里读的数据,统统转化为DataX规定的结构,再根据要写入的数据源的类型,转化为对应的结构)。

2.DataX框架设计

       DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
在这里插入图片描述
FrameWork是整个的核心,不管数据源从哪来,到这里都转化为固定的数据结构
PS:流控:速度的控制

3.DataX运行流程

下图是一个DataX作业生命周期的时序图:
在这里插入图片描述
一个Job是一个进程,一个Task是一个线程

4.DataX调度决策思路

举一个例子,用户提交了一个DataX作业(一个Job),并且配置了总的并发度为20,目的是对一个有100张分表(默认1张表为一个Task,实际上一张表可以继续切分为多个Task)的mysql数据源进行同步。DataX的调度决策思路是:
1)DataX Job根据分库分表切分策略,将同步工作分成100个Task。
2)根据配置的总的并发度20(可以同时运行20个Task),以及每个Task Group的并发度5(每个Task Group可以同时运行5个Task),DataX计算共需要分配4个TaskGroup。
3)4个TaskGroup平分100个Task,每一个TaskGroup负责运行25个Task。

5.DataX和Sqoop对比

功能 DataX Sqoop
运行模式 单进程多线程 MR
分布式 不支持,可以通过调度系统规避 支持(MR就是分布式)
流控 有流控功能 需要定制
统计信息 已有一些统计,上报需定制 没有,分布式的数据收集不方便
数据校验 在core部分有校验功能 没有,分布式的数据收集不方便
监控 需要定制 需要定制

综上,DataX功能更加强大,速度更加快,但是DataX对于数据格式的支持较少(只支持gzip压缩格式,lzo等都不支持)

三、DataX部署

1.下载安装

第一步,先下载,下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
第二步,解压:tar -zxvf datax.tar.gz -C /opt/module/
第三步,自检:python /opt/module/datax/bin/datax.py /opt/module/datax/job/job.json
出现如下内容,则表明安装成功:
在这里插入图片描述

四、DataX使用

1.DataX任务提交命令

命令:python bin/datax.py path/to/your/job.json (job.json是自己编写的同步文件)

2.DataX配置文件格式

查看DataX配置文件模板命令:python bin/datax.py -r mysqlreader -w hdfswriter
上面的mysqlreader和hdfswriter可以根据自己的需要修改为对应的输入源和输出源
在这里插入图片描述
上图是查询给出的模板,json最外层是一个job,job包含setting和content两部分,setting是对整个job的配置,content是用于配置数据源和数据的目的地。
还可以通过官方文档查看对应的Reader和Writer的具体参数:https://github.com/alibaba/DataX/blob/master/README.md https://gitee.com/mirrors/DataX/blob/master/README.md
在这里插入图片描述
点击对应的读、写,可以查看对应的参数

3.DataX传参

       通常情况下,离线数据同步任务需要每日定时重复执行,故HDFS上的目标路径通常会包含一层日期,以对每日同步的数据加以区分,也就是说每日同步数据的目标路径不是固定不变的,因此DataX配置文件中HDFS Writer的path参数的值应该是动态的。为实现这一效果,就需要使用DataX传参的功能。
DataX传参的用法如下,在JSON配置文件中使用${param}引用参数,在提交任务时使用-p"-Dparam=value"传入参数值,具体示例如下:
在需要动态传入参数的地方这样写:

	"fileType": "text",
    "path": "/base_province/${dt}",
    "writeMode": "append"

其中dt就是要传入的参数名
在提交任务时,使用命令:python bin/datax.py -p"-Ddt=2020-06-14" job/base_province.json

五、DataX案例

1.同步MySQL数据到HDFS案例

案例需求:同步gmall数据库中base_province表数据到HDFS的/base_province目录
需求分析:要实现该功能,需选用MySQLReader和HDFSWriter,MySQLReader具有两种模式分别是TableMode和QuerySQLMode,前者使用table,column,where等属性声明需要同步的数据;后者使用一条SQL查询语句声明需要同步的数据。

1)使用TableMode方式实现

首先,创建配置文件:vim /opt/module/datax/job/base_province.json
编写配置文件:

{
    "job": {
        "setting": {
            "speed": {
                 "channel": 1
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "root",
                        "password": "123456",
                        "column": [
                            "id",
                            "name",
                            "region_id",
                            "area_code",
                            "iso_code",
                            "iso_3166_2"
                        ],
                        "where":"id>=3",
                        "splitPk": "id",
                        "connection": [
                            {
                                "table": [
### 尚硅谷电商数据仓库 Flink 实战教程 #### 数据处理流程概述 在构建电商数据仓库的过程中,Flink 被广泛应用于实时数据流处理。通过集成 Kafka 和其他存储系统,可以实现从原始日志收集到最终分析报表生成的一系列操作[^1]。 #### 架构设计要点 架构上通常会采用分层结构来管理不同粒度的数据集。具体来说: - **ODS 层**:用于接收来自业务系统的增量或全量同步过来的基础事实表和维度表; - **DWD 层**:基于 ODS 原始数据进行清洗转换得到更细颗粒度的事实记录以及标准化后的维表; - **DWS 层**:在此基础上进一步加工汇总形成面向主题域宽表模型支持高效查询统计需求; - **ADS 应用服务层**:针对特定应用场景定制开发应用接口或者视图提供给前端调用展示。 对于上述每一层之间的流转过程都可以利用 Apache Flink 来完成高效的ETL作业调度执行,并且能够很好地应对高并发写入场景下的性能挑战[^2]。 #### 技术选型说明 考虑到项目实施周期和技术栈兼容性等因素,在工具链的选择方面推荐如下组合方案: - 使用 `bin/kafka-console-consumer.sh` 启动Kafka消费者实例以便于调试验证消息队列中的内容正确性[^3]; - 编辑 DataX 的 JSON 配置文件定义好源端与目标端之间映射关系从而简化跨平台迁移工作量[^4]. ```bash # 启动Kafka消费者命令示例 $ bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic ods_base_log ``` ```json // 修改DataX配置文件片段 { "job": { ... "content":[ { "reader":{ "name":"streamreader", "parameter":{ "column":[{"value":"${bizdate}"}], "sliceRecordCount":1, "where":"dt='${bizdate}'" } }, "writer":{ "name":"hdfswriter", "parameter":{ "defaultFS":"hdfs://nameservice1/", "fileType":"text", "path":"/ods/db/t_order/${bizdate}", "fileName":"t_order_${bizdate}.txt", "writeMode":"append", "fieldDelimiter":"\u0001" } } } ] } } ``` #### 可视化呈现方式探讨 最后值得一提的是为了更好地服务于决策制定者们直观理解这些复杂多变的信息图表至关重要。目前市面上存在多种优秀的开源框架可供选择比如 ECharts 或 Superset ,它们不仅具备强大的交互功能而且易于部署维护成本低廉;当然如果追求极致用户体验的话也可以考虑商业级产品 QuickBI 或 DataV 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值