一文带你看懂DataX离线同步工具(图文并茂,看完就懂)

DataX是阿里巴巴的开源数据同步工具,支持多种数据源间的离线同步。它采用Reader-Writer框架,将复杂同步链路简化,支持速度控制和内存调整。文章提供了MySQL到HDFS的同步案例,展示了TableMode和QuerySQLMode的使用,并讨论了DataX与Sqoop的对比。此外,还介绍了DataX的并发控制和调度策略。

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

一. DataX简介

1.1 DataX概述

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

源码地址:阿里云DataX源码

1.2 DataX支持的数据源

请添加图片描述

二. DataX架构原理

2.1 DataX设计理念

为了解决异构数据源同步问题,DataX 将复杂的网状的同步链路变成了星型数据链路,DataX 作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接DataX,便能跟已有的数据源做到无缝数据同步。

请添加图片描述

2.2 DataX框架设计

DataX 本身作为离线数据同步框架,采用 Framework + plugin架构构建。将数据源读取和写入抽象成为 Reader/Writer 插件,纳入到整个同步框架中。

请添加图片描述

其中:
Reader数据采集模块,负责采集数据源的数据,将数据发送给Framework
Writer数据写入模块,负责不断向Framework取数据,并将数据写入到目的端
Framework:用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

2.3 DataX运行流程

请添加图片描述

注:
Job单个数据同步的作业,称为一个Job一个Job启动一个进程
Task:根据不同数据源的切分策略,一个Job会切分为多个TaskTask是DataX作业的最小单元每个Task负责一部分数据的同步工作。
TaskGroupScheduler调度模块会对Task进行分组,每个Task组称为一个Task Group。每个Task Group负责以一定的并发度运行其所分得的Task,单个Task Group的并发度为5
Reader–>Channel–>Writer:每个Task启动后,都会固定启动Reader–>Channel–>Writer的线程来完成同步工作。

2.4 DataX调度决策思路

举例来说,用户提交了一个 DataX 作业,并且配置了总的并发度为 20,目的是对一个有 100 张分表的 mysql 数据源进行同步。DataX 的调度决策思路是:

1)DataX Job 根据分库分表切分策略,将同步工作分成 100 个 Task。

2)根据配置的总的并发度 20,以及每个 Task Group 的并发度 5,DataX 计算共需要分配 4 个TaskGroup。

3)4 个 TaskGroup 平分 100 个 Task,每一个 TaskGroup 负责运行 25 个 Task。

注:默认DataX会把Mysql中的1个表切分成1个Task。

2.5 DataX 与 Sqoop 对比

请添加图片描述

三. DataX使用

3.1 DataX使用概述

3.1.1 DataX任务提交命令

用户只需根据自己同步数据的数据源目的地选择相应的ReaderWriter,并将 Reader 和 Writer 的信息配置在一个 json 文件中,然后执行如下命令提交数据同步任务即可:

请添加图片描述

3.1.2 DataX配置文件格式

使用如下命令查看 DataX 配置文件模板

请添加图片描述

配置文件模板如下,json 最外层是一个 jobjob 包含settingcontent 两部分,其中setting 用于对整个 job 进行配置content 用户配置数据源和目的地

{
   
    "job": {
   
        "content": [
            {
   
                "reader": {
   
                    "name": "mysqlreader",
                    "parameter": {
   
                        "column": [],
                        "connection": [
                            {
   
                                "jdbcUrl": [],
                                "table": []
                            }
                        ],
                        "password": "",
                        "username": "",
                        "where": ""
                    }
                },
                "writer": {
   
                    "name": "hdfswriter",
                    "parameter": {
   
                        "column": [],
                        "compress": "",
                        "defaultFS": "",
                        "fieldDelimiter": "",
                        "fileName": "",
                        "fileType": "",
                        "path": "",
                        "writeMode": ""
                    }
                }
            }
        ],
        "setting": {
   
            "speed": {
   
                "channel": ""
            }
        }
    }
}

请添加图片描述

Reader 和 Writer 的具体参数可参考官方文档,地址如下:DataX配置

3.2 同步MySQL数据到HDFS案例

案例要求:同步 gmall 数据库中 base_province 表数据到 HDFS 的/base_province 目录

需求分析:要实现该功能,需选用 MySQLReaderHDFSWriterMySQLReader 具有两种模式分别是 TableModeQuerySQLMode前者使用 table,column,where 等属性声明需要同步的数据;后者使用一条 SQL 查询语句声明需要同步的数据。

下面分别使用两种模式进行演示。

3.2.1 MySQLReader之TableMode

1)编写配置文件

(1)创建配置文件 base_province.json

请添加图片描述

(2)内容如下:

{
   
    "job": {
   
        "content": [
            {
   
                "reader": {
   
                    "name": "mysqlreader",
                    "parameter": {
   
                        "column": [
                            "id",
                            "name",
                            "region_id",
                            "area_code",
                            "iso_code",
                            "iso_3166_2"
                        ],
                        "where": "id>=3",
                        "connection": [
                            {
   
                                
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丷江南南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值