1.7 Datax

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/';

2Hive(\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)全量同步的表如下

  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

1.7.7 Datax如何实现增量同步

获取今天新增和变化的数据:通过sql过滤,创建时间是今天或者操作时间等于今天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一鸣888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值