参考视频

02_DataX_概述_哔哩哔哩_bilibili

参考文档

大数据技术之DataX-阿里云开发者社区

介绍

        DataX 是阿里巴巴开源的一个 异构数据源 离线 同步工具

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

适用人群

  • 从事数据采集工作
  • 数仓从0-1的建设阶段(架构选型)

前置基础

        Java基础,Linux命令、数据库的了解

DataX的设计

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

        设计理念:插件式

DataX支持的数据库(GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。)

  1. 类型 数据源 Reader(读) Writer(写) 文档
    RDBMS 关系型数据库 MySQL  、
    Oracle  、
    OceanBase  、
    SQLServer  、
    PostgreSQL  、
    DRDS  、
    Kingbase  、
    通用RDBMS(支持所有关系型数据库)  、
    阿里云数仓数据存储 ODPS  、
    ADB
    ADS
    OSS  、
    OCS
    Hologres
    AnalyticDB For PostgreSQL
    阿里云中间件 datahub 读 、写
    SLS 读 、写
    图数据库 阿里云 GDB  、
    Neo4j
    NoSQL数据存储 OTS  、
    Hbase0.94  、
    Hbase1.1  、
    Phoenix4.x  、
    Phoenix5.x  、
    MongoDB  、
    Cassandra  、
    数仓数据存储 StarRocks 读 、
    ApacheDoris
    ClickHouse  、
    Databend
    Hive  、
    kudu
    selectdb
    无结构化数据存储 TxtFile  、
    FTP  、
    HDFS  、
    Elasticsearch
    时间序列数据库 OpenTSDB
    TSDB  、
    TDengine  、

DataX架构设计

DataX在设计之初就将同步理念抽象成框架+插件的形式.框架负责内部的序列化传输,缓冲,并发,转换等而核心技术问题,数据的采集(Reader)和落地(Writer)完全交给插件执行。

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

运行原理

  • Job 完成单个数据同步的作业称之为job。DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。负责数据清理,子任务划分,TaskGroup监控管理。
  • Task 由Job切分而来,是DataX作业的最小单元,每个Task负责一部分数据的同步工作。
  • Schedule 将Task组成TaskGroup,默认单个任务组的并发数量为5。
  • TaskGroup 负责启动Task。

详细解说:DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务.

DataX调度流程
举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:

  • 1 DataXJob根据分库分表切分成了100个Task。
  • 2 根据20个并发,且默认单个任务组的并发数量为5,DataX计算共需要分配4个TaskGroup。
  • 3 这里4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

与Sqoop的对比

参考文档:

sqoop or datax_sqoop和datax-CSDN博客

功能 datax sqoop
运行模式 单进程多线程,但配置的好可以打满贷款,也不慢 mr
Mysql读写 单机压力大,但读写粒度容易控制 mr模式重,写出错处理麻烦,看日志麻烦
hive读写 单机压力大 很好
文件格式 orc支持 orc不支持,可添加
分布式 不支持,可以通过调度系统规避 支持
运行信息
 
运行时间,数据量,消耗资源,脏数据稽核 不支持
数据库 数据来源比较多 数据来源比较纯粹单一
流量控制 支持 需要定制
社区 开源不久,不太活跃 活跃

读取mysql写入到hdfs

# 查看mysql到hdfs的json文件怎么写
bin/datax.py -r mysqlreader -r hdfswriter

多线程如何保证全部成功

        会先创建一个临时路径,存放到临时路径下,如果有线程失败则全部失败,删除所有数据;如果全部成功,则最后合并,移到临时路径外,删除临时路径

大数据常用组件官网: 大数据常用组件官网地址_datax官网-CSDN博客

1

Logo

新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐