参考视频
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数据集成的开源版本。)
-
类型 数据源 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