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 不容易采集
2. 速度控制
1) 关键优化参数如下:
2) 生效优先级:
(1) 全局 Byte 限速 / 单 Channel Byte 限速
(2) 全局 Record 限速 / 单 Channel Record 限速
两个都设置, 取结果小的
(3) 上面都没设置, 总 Channel 数的设置生效
3) 项目配置
只设置 总 channel 数=5, 基本可以跑满网卡带宽。
3.内存调整
建议将内存设置为 4G 或者 8G, 这个也可以根据实际情况来调整。
调整 JVM xms xmx 参数的两种方式: 一种是直接更改 datax.py 脚本; 另一种是在启动的时候, 加上对应的参数, 如下:
python datax/bin/datax.py --jvm="-Xms8G -Xmx8G" /path/to/your/job.json
4.空值处理
1) MySQL (null) => Hive (\N) 要求 Hive 建表语句
解决该问题的方案有两个:
(1) 修改 DataX HDFS Writer 的源码, 增加自定义 null 值存储格式的逻辑。
(2) 在 Hive 中建表时指定 null 值存储格式为空字符串 (''), 例如:
2) Hive (\N) => MySQL (null)
5.配置文件生成脚本
(1) 一个表一个配置, 如果有几千张表, 怎么编写的配置?
(2) 脚本使用说明
ython gen_import_config.py -d database -t table
6.DataX 一天导入多少数据
1) 全量同步的表如下
(1)活动表 、 优惠规则表 、 优惠卷表 、 SKU 平台属性表 、 SKU 销售属性表
(2)SPU 商品表 (1-2 万)、 SKU 商品表 (10-20 万)、 品牌表 、 商品一级分类 、 商品二 级分类 、 商品三级分类
(3)省份表 、 地区表
(4)编码字典表
以上全部加一起 30 万条, 约等于 300m。
加购表 (每天增量 20 万 、 全量 100 万 = 》 1g)
所以 Datax 每天全量同步的数据 1-2g 左右。
注意: 金融 、 保险 (平安 、 民生银行), 只有业务数据数据量大一些。
2) 增量同步的表如下
(1)加购表 (20 万)、 订单表 (10 万)、 订单详情表 (15 万)、 订单状态表 、 支付表 (9 万)、 退单表 (1000)、 退款表 (1000)
(2)订单明细优惠卷关联表 、 优惠卷领用表
(3)商品评论表 、 收藏表
(4)用户表 、 订单明细活动关联表 增量数据每天 1-2g
7.Datax 如何实现增量同步
获取今天新增和变化的数据: 通过 sql 过滤, 创建时间是今天或者操作时间等于今天。