1、DataX概述
(1)星型数据链路
- DataX为传输通道
github地址:https://github.com/alibaba/DataX
(2)框架设计
- Reader:数据采集模块,负责采集数据源的数据,将数据发送给Framework。
- Writer:数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
- Framework:用于连接reader和writer,作为两者的数据传输通道,并处理缓冲, 流控,并发,数据转换等核心技术问题
(3)运行原理
- Job:单个作业的管理节点,负责数据清理、子任务划分、TaskGroup监控管理。
- Task:由Job切分而来,是DataX作业的最小单元,每个Task负责一部分数据的同步工作。
- Schedule:将Task组成TaskGroup,单个TaskGroup的并发数量为5。
- TaskGroup:负责启动Task。
范例:用户提交了一个 DataX 作业,并且配置了 20 个并发,目的是将一个 100 张 分表的 mysql 数据同步到 odps 里面。 DataX 的调度决策思路是:
1)DataXJob 根据分库分表切分成了100个Task。
2)根据 20 个并发,DataX计算共需要分配4个 TaskGroup。
3)4 个 TaskGroup 平分切分好的100个Task,每一个 TaskGroup 负责以5个并发共计运
行 25个Task。
2、DataX安装
(1)前置要求
- linux
- JDK1.8
- Python(2.6,2.7版本)
(2)解压到到/opt/module
tar -zxvf datax.tar.gz -C /opt/module/
(3)运行自检脚本
cd /opt/module/datax/bin
python datax.py /opt/module/datax/job/job.json
3、DataX&Sqoop对比
功能 | DataX | Sqoop |
---|---|---|
运行模式 | 单进程多线程(java单机版) | MR(分布式计算作业) |
Mysql读写 | 单机压力大,读写粒度易控制 | MR模式重,写出错处理麻烦 |
Hive读写 | 单机压力大(最大缺陷) | 比较好 |
文件格式 | orc支持 | orc不支持,可通过hcatalog添加 |
分布式 | 不支持,可通过调度系统规避(装多个节点,互不干扰,通过调度系统实现负载均衡) | 支持 |
流控 | 有流控功能 | 需要定制 |
统计信息 | 有一些统计,上报需要定制 | 没有,分布式收集数据不方便 |
数据校验 | 在core部分有校验功能 | 没有,分布式收集数据不方便 |
监控 | 需要定制 | 需要定制 |
社区 | 封版,改无可改 |
- 根据业务场景选型
(1)DataX:涉及到多样的数据源互相导入导出,使用DataX
(2)Sqoop:数据源比较少,目的地都在hdfs上
4、DataX参数说明
4.1、mysqlreader参数解读
(1)name:reader名称
(2)column:需要同步的列名集合,使用JSON数组描述自带信息
(3)jdbsUrl:对数据库的JDBC连接信息,使用JSON数组描述,支持多个链接地址
(4)table:需要同步的表,支持多个
(5)querySql:自定义SQL,配置它后,mysqlreader直接忽略table、column、where
(6)username:数据库用户名;
(7)passward:数据库用户名对应密码
(8)where:筛选条件
(9)splitPK:数据分片字段,一般是主键,仅仅支持整形(一般使用代理主键)
4.2、hdfswriter
(1)name:writer名字
(2)column:写入数据的字段,其中name指定字段名,type指定类型
(3)compress:hdfs文件压缩类型,默认不填写意味着没有压缩
(4)defaultFS:hdfs文件类型namenode节点地址,格式hdfs://ip:端口
(5)fieldDelimiter:字段分隔符
(6)filename:写入文件名
(7)fileType:文件类型,目前只支持用用户配置“text”或“orc”
(8)path:存储到Hadoop hdfs文件系统的路径信息
(9)write:hdfswriter写入前数据清理处理模式
- append:追加,写入前不做任何处理,DataX hdfswriter直接使用filename写入,并保证文件名不冲突
- nonConflit:目录下有filename前缀的文件,直接报错