安装部署

下载DataX安装包并上传到/opt/software

        下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

        解压datax.tar.gz到/opt/module

                

        自检,执行如下命令

                

        出现如下内容,则表示安装成功

                

DataX使用

        DataX任务提交命令

                DataX的使用十分简单,用户只需根据自己同步数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可

                

        DataX配置文件格式

                可以使用如下命名查看DataX配置文件模板。

                        

                配置文件模板如下,json最外层是一个job,job包含setting和content两部分,其中setting用于对整个job进行配置,content用户配置数据源和目的地

Reader和Writer的具体参数可参考官方文档,地址如下

https://github.com/alibaba/DataX/blob/master/README.md

            

同步MySQL数据到HDFS案例    

        

案例要求:同步gmall数据库中base_province表数据到HDFS的/base_province目录

需求分析:要实现该功能,需选用MySQLReader和HDFSWriter,MySQLReader具有两种模式分别是TableMode和QuerySQLMode,前者使用table,column,where等属性声明需要同步的数据;后者使用一条SQL查询语句声明需要同步的数据

        下面使用一种模式进行演示

        MySQLReader之TableMode

        编写配置文件

                创建配置文件base_province.json

                

                配置文件内容如下

                      

       配置文件说明 

        注意事项:

                

        HFDS Writer并未提供nullFormat参数:也就是用户并不能自定义null值写到HFDS文件中的存储格式。默认情况下,HFDS Writer会将null值存储为空字符串(''),而Hive默认的null值存储格式为\N。所以后期将DataX同步的文件导入Hive表就会出现问题。

解决该问题的方案有两个:

一是修改DataX HDFS Writer的源码,增加自定义null值存储格式的逻辑,可参考记Datax3.0解决MySQL抽数到HDFSNULL变为空字符的问题_datax nullformat-CSDN博客

二是在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/';

Setting参数说明

        

提交任务

        在HDFS创建/base_province目录

                

        进入DataX根目录

                cd /opt/module/datax

        执行如下命令

                python bin/datax.py job/base_province.json

查看结果

        DataX打印日志

                

        查看HDFS文件

                        hadoop fs -cat /base_province/* | zcat

                        

DataX传参

        通常情况下,离线数据同步任务需要每日定时重复执行,故HDFS上的目标路径通常会包含一层日期,以对每日同步的数据加以区分,也就是说每日同步数据的目标路径不是固定不变的,因此DataX配置文件中HDFS Writer的path参数的值应该是动态的。为实现这一效果,就需要使用DataX传参的功能。dataX传参的用法如下,在JSON配置文件中使用${param}引用参数,在提交任务时使用-p"-Dparam=value"传入参数值,具体示例如下

        修改配置文件base_province.json

                

           配置内容如下:

                

提交任务

        创建目标路径

                

        进入DataX根目录

                 cd /opt/module/datax

        执行如下命令

                python bin/datax.py -p"-Ddt=2020-06-14" job/base_province.json

        查看结果

                 hadoop fs -ls /base_province

        

同步HDFS数据到MySQL案例

        案例要求:同步HDFS上的/base_province目录下的数据到MySQL gmall 数据库下的test_province表。

        编写配置文件:vim /opt/module/datax/job/base_province.json

配置文件如下:

       

配置文件说明:

        Reader参数说明

注意:路径一定要改成自己的

         Writer参数说明

        

提交任务

        在MySQL中创建gmall.test_province

                

进入DataX根目录

        cd /opt/module/datax

执行如下命令

        python bin/datax.py job/test_province.json

查看结果

DataX打印日志

查看MySQL目标表数据

DataX优化

        

速度控制

        DataX3.0提供了包括通道(并发)、记录流、字节流三种流控模式,可以随意控制你的作业速度,让你的作业在数据库可以承受的范围内达到最佳的同步速度。

        关键优化参数如下:

参数

说明

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)

        注意事项:

                1.若配置了总record限速,则必须配置单个channel的record限速

                2.若配置了总byte限速,则必须配置单个channe的byte限速

             3.若配置了总record限速和总byte限速,channel并发数参数就会失效。因为配置了总record限速和总byte限速之后,实际channel并发数是通过计算得到的:

        计算公式为:

                min(总byte限速/单个channel的byte限速,总record限速/单个channel的record限速)

        配置示例:

{

    "core": {

        "transport": {

            "channel": {

                "speed": {

                    "byte": 1048576 //单个channel byte限速1M/s

                }

            }

        }

    },

    "job": {

        "setting": {

            "speed": {

                "byte" : 5242880 //总byte限速5M/s

            }

        },

        ...

    }

}

         内存调整

        当提升DataX Job内Channel并发数时,内存的占用会显著增加,因为DataX作为数据交换通道,在内存中会缓存较多的数据。例如Channel中会有一个Buffer,作为临时的数据交换的缓冲区,而在部分Reader和Writer的中,也会存在一些Buffer,为了防止OOM等错误,需调大JVM的堆内存。

建议将内存设置为4G或者8G,这个也可以根据实际情况来调整。

调整JVM xms xmx参数的两种方式:一种是直接更改datax.py脚本;另一种是在启动的时候,加上对应的参数,如下:python datax/bin/datax.py --jvm="-Xms8G -Xmx8G" /path/to/your/job.json

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐