DataX

月伴飞鱼 2024-06-23 15:20:26
大数据相关
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!

DataX 是阿里云 DataWorks数据集成 的开源版本。

在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。

DataX 实现了包括 MySQL、Oracle、OceanBase、SQLServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。

Gitee:https://github.com/alibaba/DataX

GitHub地址:https://github.com/alibaba/DataX

文档:https://github.com/alibaba/DataX/blob/master/introduction.md

DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。

当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

DataX在阿里巴巴集团内被广泛使用,承担了所有大数据的离线同步业务,并已持续稳定运行了6年之久。

目前每天完成同步8W多道作业,每日传输数据量超过300TB。

img

主要特点

异构数据库和文件系统之间的数据交换

采用Framework + Plugin架构构建,Framework处理了缓冲,流控,并发,上下文加载等高速数据交换的大部分技术问题,提供了简单的接口与插件交互,插件仅需实现对数据处理系统的访问

数据传输过程在单进程内完成,全内存操作,不读写磁盘,也没有IPC

开放式的框架,开发者可以在极短的时间开发一个新插件以快速支持新的数据库/文件系统

DataX3.0框架设计

DataX本身作为离线数据同步框架,采用Framework + Plugin架构构建。

将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

Reader

  • Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。

Writer

  • Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。

Framework

  • Framework用于连接Reader和Writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

img

DataX3.0架构

DataX 3.0 开源版本支持单机多线程模式完成同步作业运行。

img

核心模块

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作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。

否则,异常退出,进程退出值非0。

调度流程

举例来说,用户提交了一个DataX作业,并且配置了20个并发。

目的是将一个100张分表的MySQL数据同步到ODPS(Open Data Processing Service:开发数据处理服务)里面。

DataX的调度决策思路是:

  • DataXJob根据分库分表切分成了100个Task。
  • 根据20个并发,DataX计算共需要分配4个TaskGroup。
  • 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

DataX-WEB安装部署

GitHub地址:https://github.com/WeiYe-Jing/datax-web

SQOOP和DataX的区别

Sqoop采用map-reduce计算框架进行导入导出,而datax仅仅在运行datax的单台机器上进行数据的抽取和加载,速度比Sqoop慢了许多

Sqoop只可以在关系型数据库和hadoop组件之间进行数据迁移,而在hadoop相关组件之间,比如hive和hbase之间就无法使用Sqoop互相导入导出数据,同时在关系型数据库之间,比如mysql和oracle之间也无法通过sqoop导入导出数据

与之相反,DataX能够分别实现关系型数据库和hadoop组件之间、关系型数据库之间、hadoop组件之间的数据迁移

Sqoop是专门为hadoop而生,对hadoop支持度好,而DataX可能会出现不支持高版本hadoop的现象

Sqoop只支持官方提供的指定几种关系型数据库和hadoop组件之间的数据交换,而在DataX中,用户只需根据自身需求修改文件,生成相应rpm包,自行安装之后就可以使用自己定制的插件

Sqoop不支持ORC文件格式,而DataX支持。

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!