Datax的配置及使用

                                          Datax的配置及使用

1、 DataX3.0概览

  DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能

DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入,具体详情DataX的GitHub地址

2、 DataX3.0的使用


2.1 准备工作
Java版本要求:jdk1.8及以上
参考链接:Linux下jdk环境配置及JDK版本升级
Python版本要求:2.7.X,DataX未更新至Python3
DataX下载:datax下载
当然你还可以去Github去下载源码进行编译,通过此种方式你可以自行选择你需要的配置进行打包,如只需要Mysql的,那么其他的相关支持你都不需要用到,也就不需要都打包,更轻量使用。与此同时,你还需要maven工具进行打包,在pom.Xml中删除你不需要的模块,再执行maven命令:mvn -U clean package assembly:assembly -Dmaven.test.skip=true,生成的文件在/target/datax/datax/下
确保上述步骤都通过后则继续往下看。

2.2 快速上手

2.2.1 构建一个测试数据表

表结构如表2-1所示。

                                                                                                表2-1 测试表结构

字段名

类型

备注

name

varchar

 

age

int

 

age_true

int

 

 并向其中插入几条数据,如表2-2所示。

                                                                                          表2-2 测试表数据

name age age_true
tom 23  
tom 23  
tom 23  
tom 23  
tom 23  
tom 23  
tom 23  
tom 23  
... ...  

2.2.2 构建任务Json

DataX工具是用json文件作为配置文件的,根据官方提供文档我们构建Json文件如下所示。

{ 
    "job": { 
        "content": [ 
            { 
                "reader": { 
                    "name": "mysqlreader",
                    "parameter": { 
                        "username": "root", 
                        "password": "123456",  
                        "column": ["name","age"], 
                        "where": "age<100", 
                        "connection": [ 
                            { 
                                "table": [ 
                                    "person" 
                                ], 
                                "jdbcUrl": [ 
                                    "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
                                ] 
                            } 
                        ] 
                    } 
                }, 
                "writer": { 
                    "name": "mysqlwriter",
                    "parameter": { 
                        "username": "root", 
                        "password": "123456", 
                        "column": ["name","age_true"],
                        "connection": [ 
                            { 
                                "table": [ 
                                    "person" 
                                ], 
                                "jdbcUrl":"jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"                              
                            } 
                        ]   
                    } 
                } 
            } 
        ], 
        "setting": {
                 "speed": {
                         "channel": 1,
                         "byte": 104857600
                 },
                 "errorLimit": {
                         "record": 10,
                         "percentage": 0.05
      }
    } 
}

它由三部分组成,分别是读,写和通用配置。
Reader部分,也就是读,常用以下几种参数,如表2-3所示。
                                                                                          

表2-3 读属性
参数名 解释 备注
name 与要读取的数据库一致 字符串
jdbcUrl 数据库链接

数组

会自动选择一个合法的链接

可以填写连接附件控制信息

username 数据库用户名 字符串,数据库的用户名
password 数据库密码 字符串,数据库的密码
table 要同步的表名 数组,需保证表结构一致
column 要同步的列名 数组
where 选取的条件 字符串
querySql 自定义查询语句 会自动忽略上述的同步条件

Writer部分,也就是写,常用以下几种参数,如表2-4所示

2-3 写属性
参数名 解释 备注
name 与要读取的数据库一致 字符串
jdbcUrl 数据库链接

字符串

不和writer一样

可以填写连接附件控制信息

username 数据库用户名 字符串,数据库的用户名
password 数据库密码 字符串,数据库的密码
table 要同步的表名 数组,需保证表结构一致
column 列名可以不对应,但是类型和总的个数要一致 数组,需保证表结构一致
preSql 写入前执行的语句 数组,比如清空表等
postSql 写入后执行的语句 数组
writeMode 写入方式,默认为insert

insert/replace/update

job.setting.speed(流量控制)
Job支持用户对速度的自定义控制,channel的值可以控制同步时的并发数,byte的值可以控制同步时的速度
job.setting.errorLimit(脏数据控制)
Job支持用户对于脏数据的自定义监控和告警,包括对脏数据最大记录数阈值(record值)或者脏数据占比阈值(percentage值),当Job传输过程出现的脏数据大于用户指定的数量/百分比,DataX Job报错退出。
 

2.2.3 执行
Win+R+cmd进入命令行控制台,首先通过java –version和python查看是否满足要求,然后执行:python 空格{datax文件夹路径}\bin\datax.py 空格{json配置文件的路径},如,python D:\download\datax\bin\datax.py D:\download\datax\job\job2.json
接着控制台会打印出相应的信息,控制台乱码输入 chcp空格 65001。

我们可以看到写入数据表中的数据已经发生了变化,此处是将age位置的信息写入到age_true位置上,结果如表2-5所示。
                                                                                         表2-5 DataX写入结果

name age age_true
tom 23  
tom 23  
tom 23  
tom 23  
tom    23
tom    23
tom    23
tom    23
... ...

至此我们就利用datax进行了一次数据同步

在生产环境中我们往往同步的表很多,每个表用datax进行同步都要有对应的json文件,我们可以利用脚本批量生成json文件,具体可以参考另一篇博客:

本篇博客参考资源:https://blog.csdn.net/qq_28131641/article/details/80540079

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章