DataX 的安装及简单使用(大字段的迁移)

简介

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具 / 平台,实现包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。DataX 采用了框架 + 插件 的模式,目前已开源,代码托管在 github。

DataX 安装部署及小试

1. 下载压缩包:

下载页面地址:https://github.com/alibaba/DataX 在页面中【Quick Start】—>【Download DataX 下载地址】进行下载。下载后的包名:datax.tar.gz。解压后 {datax} 目录下有 {bin conf job lib log log_perf plugin script tmp} 几个目录。

2. 安装

将下载后的压缩包直接解压后可用,前提是对应的 java 及 python 环境满足要求。
System Requirements:

Linux
JDK(1.6 以上,推荐 1.6)
Python(推荐 Python2.6.X) 一定要为 python2,因为后面执行 datax.py 的时候,里面的 python 的 print 会执行不了,导致运行不成功,会提示你 print 语法要加括号,python2 中加不加都行 python3 中必须要加,否则报语法错
Apache Maven 3.x (Compile DataX)

3. 测试

配置测试样例:下面我们配置一组 从 mysql 数据库到另一个 mysql 数据库。

第一步、创建作业的配置文件(json 格式)

可以通过命令查看配置模板:
null
python datax.py -r {YOUR_READER} -w {YOUR_WRITER} 当然也可以从https://github.com/alibaba/DataX 自行配置。
null

第二步、根据配置文件模板填写相关选项

根据模板配置 json 文件 (mysql2mysql.json) 如下:

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
                        "column": [
							"id",
                            "name"
						], 
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:mysql://127.0.0.1:3306/dq"], 
                                "table": ["table1"]
                            }
                        ], 
                        "password": "123456", 
                        "username": "root"
                    }
                }, 
                "writer": {
                    "name": "mysqlwriter", 
                    "parameter": {
                        "column": [
                        "id",
                        "name"
						], 
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://ip地址:端口/test", 
                                "table": ["table2"]
                            }
                        ], 
                        "password": "123456", 
                        "username": "root"
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": "1"
            }
        }
    }
}

第三步:启动 DataX
启动之前数据库
null
null

启动
python datax.pyD:\Software\install\Environment\DataX\datax\job\mysql2mysql.json
null

null
启动之后数据库
null

出现的问题:

Python 版本要为 2,原因前面已经说过了
cmd 乱码解决:输入 CHCP 65001
数据库中的数据中文乱码解决:在 json 文件中 jdbcUrl 项加上:

“jdbcUrl”: [“jdbc:mysql://127.0.0.1:3306/dq?characterEncoding=utf8”]

Java 通过 python 命令执行 DataX 任务
上代码:

public class TestDatax {
    public static void main(String[] args) {
        try {
            WebLogs.info("start");
            String windowcmd = "cmd /c python datax.py D:\\Software\\install\\Environment\\DataX\\datax\\job\\mysql2mysql.json";
            WebLogs.info(windowcmd);
            //.exec("你的命令",null,new File("datax安装路径"));
            Process pr = Runtime.getRuntime().exec(windowcmd,null,new File("D:\\Software\\install\\Environment\\DataX\\datax\\bin"));
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
            String line = null;
            while ((line = in.readLine()) != null) {
                WebLogs.info(line);
            }
            in.close();
            pr.waitFor();
            WebLogs.info("end");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}