1.7 Datax
1.7.1 DataX与Sqoop区别
1)DataX与Sqoop都是主要用于离线系统中批量同步数据处理场景。
2)DataX和Sqoop区别如下:
(1)DataX底层是单进程多线程;Sqoop底层是4个Map;
(2)数据量大的场景优先考虑Sqoop分布式同步;数据量小的场景优先考虑DataX,完全基于内存;DataX数据量大,可以使用多个DataX实例,每个实例负责一部分(手动划分)。
(3)Sqoop是为Hadoop而生的,对Hadoop相关组件兼容性比较好;Datax是插件化开发,支持的Source和Sink更多一些。
(4)Sqoop目前官方不在升级维护;DataX目前阿里在升级维护
(5)关于运行日志与统计信息,DataX更丰富,Sqoop基于Yarn不容易采集
1.7.2 速度控制
1)关键优化参数如下:
参数 | 说明 |
job.setting.speed.channel | 总并发数 |
job.setting.speed.record | 总record限速 |
job.setting.speed.byte | 总byte限速 |
core.transport.channel.speed.record | 单个channel的record限速,默认值为10000(10000条/s) |
core.transport.channel.speed.byte | 单个channel的byte限速,默认值1024*1024(1M/s) |
2)生效优先级:
(1)全局Byte限速 / 单Channel Byte限速
(2)全局Record限速 / 单Channel Record限速
两个都设置,取结果小的
(3)上面都没设置,总Channel数的设置生效
3)项目配置:只设置 总channel数=5,基本可以跑满网卡带宽。
1.7.3 内存调整
建议将内存设置为4G或者8G,这个也可以根据实际情况来调整。
调整JVM xms xmx参数的两种方式:一种是直接更改datax.py脚本;另一种是在启动的时候,加上对应的参数,如下:
python datax/bin/datax.py --jvm="-Xms8G -Xmx8G" /path/to/your/job.json
1.7.4 空值处理
1)MySQL(null) => Hive (\N) 要求Hive建表语句
解决该问题的方案有两个:
(1)修改DataX HDFS Writer的源码,增加自定义null值存储格式的逻辑,可参考记Datax3.0解决MySQL抽数到HDFSNULL变为空字符的问题_datax nullformat_谭正强的博客-CSDN博客。
(2)在Hive中建表时指定null值存储格式为空字符串(''),例如:
DROP TABLE IF EXISTS base_province;
CREATE EXTERNAL TABLE base_province
(
`id` STRING COMMENT '编号',
`name` STRING COMMENT '省份名称',
`region_id` STRING COMMENT '地区ID',
`area_code` STRING COMMENT '地区编码',
`iso_code` STRING COMMENT '旧版ISO-3166-2编码,供可视化使用',
`iso_3166_2` STRING COMMENT '新版IOS-3166-2编码,供可视化使用'
) COMMENT '省份表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
NULL DEFINED AS ''
LOCATION '/base_province/';
2)Hive(\N) => MySQL (null)
"reader": {
"name": "hdfsreader",
"parameter": {
"defaultFS": "hdfs://hadoop102:8020",
"path": "/base_province",
"column": [
"*"
],
"fileType": "text",
"compress": "gzip",
"encoding": "UTF-8",
"nullFormat": "\\N",
"fieldDelimiter": "\t",
}
}
1.7.5 配置文件生成脚本
(1)一个表一个配置,如果有几千张表,怎么编写的配置?
(2)脚本使用说明
python gen_import_config.py -d database -t table
1.7.6 DataX一天导入多少数据
1)全量同步的表如下
- 活动表、优惠规则表、优惠卷表、SKU平台属性表、SKU销售属性表
- SPU商品表(1-2万)、SKU商品表(10-20万)、品牌表、商品一级分类、商品二级分类、商品三级分类
- 省份表、地区表
- 编码字典表
以上全部加一起30万条,约等于300m。
加购表(每天增量20万、全量100万 =》1g)
所以Datax每天全量同步的数据1-2g左右。
注意:金融、保险(平安 、民生银行),只有业务数据数据量大一些。
2)增量同步的表如下
- 加购表(20万)、订单表(10万)、订单详情表(15万)、订单状态表、支付表(9万)、退单表(1000)、退款表(1000)
- 订单明细优惠卷关联表、优惠卷领用表
- 商品评论表、收藏表
- 用户表、订单明细活动关联表
增量数据每天1-2g
1.7.7 Datax如何实现增量同步
获取今天新增和变化的数据:通过sql过滤,创建时间是今天或者操作时间等于今天。