一、概述

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。
如需了解更多DataX,可以访问DataX主页

二、环境要求

1、python环境要求是 python2.x
2、jdk1.8及以上

三、安装

3.1 下载

  • DataX主页
  • wget命令下载,如下所示
    wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

下载后得到datax.tar.gz包

3.2 解压

tar -zxvf datax.tar.gz

3.3 插件安装

hinawriter是一个写入插件,主要是根据配置对读入数据进行格式整理,之后再打包数据,压缩并经过 base64 之后发送至海纳的数据接收地址。

1.下载插件: hinawriter.tar.gz 资源下载

2.把 hinawriter.tar.gz 解压到 datax/plugin/writer 目录下

解压插件包

tar -zxvf hinawriter.tar.gz
rm -rf  hinawriter.tar.gz

解压完成之后记得删除

3.4 配置

配置文件是格式为json,事件表配置样例如下:

{
  "job": {
    "setting": {
      "speed": {
        "channel": 1
      }
    },
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "root",
            "password": "pssword",
            "column": [
              "is_login",  // 是否登录,默认为否      
              "account_id",  // 登录状态下(is_login)需要填写 
              "anonymous_id",  // 匿名 Id,不能为空
              "event",  // 事件名
              "type",  // 事件类型,默认值是'track'
              "time"  // 事件发生时间,格式:"yyyy-MM-dd HH:mm:ss"
            ],
            "connection": [
              {
                "jdbcUrl": [
                  "jdbc:mysql://127.0.0.1:3306/db_name"
                ],
                "table": [
                  "event1",
                  "event2"
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "hinawriter",
          "parameter": {
            "thread": 3,
            "type": "track",
            "pushUrl": "数据接收地址",
            "appid": "test",
            "project": "your_project_code",
            "column": [
              {
                "index": "0",
                "colTargetName": "is_login"
              },
              {
                "index": "1",
                "colTargetName": "account_id"
              },
          {
                "index": "2",
                "colTargetName": "anonymous_id"
              },
          {
                "index": "3",
                "colTargetName": "event"
              },
          {
                "index": "4",
                "colTargetName": "type"
              },
              {
                "index": "5",
                "colTargetName": "time",
                "type": "date",
                "dateFormat": "yyyy-MM-dd HH:mm:ss"
              }
            ]
          }
        }
      }
    ]
  }
}

用户表配置样例如下:

{
    "job": {
      "setting": {
        "speed": {
          "channel": 1
        }
      },
      "content": [
        {
          "reader": {
            "name": "mysqlreader",
            "parameter": {
              "username": "root",
              "password": "psw",
              "column": [
                "is_login",
                "account_id",
                "name",
                "gender",
                "time"
              ],
              "connection": [
                {
                  "jdbcUrl": [
                    "jdbc:mysql://127.0.0.1:3306/www"
                  ],
                  "table": [
                    "user1"
                  ]
                }
              ]
            }
          },
          "writer": {
            "name": "hinawriter",
            "parameter": {
              "thread": 3,
              "type": "user_set",
              "pushUrl": "https://higateway.haishuu.com/ha?project=xxx&token=xxx",
              "appid": "test",
              "project": "yunceapp1",
              "column": [
                {
                  "index": "0",
                  "colTargetName": "is_login"
                },
                {
                  "index": "1",
                  "colTargetName": "account_id"
                },
                {
                  "index": "2",
                  "colTargetName": "name"
                },
                {
                  "index": "3",
                  "colTargetName": "gender"
                },
                {
                  "index": "4",
                  "colTargetName": "time",
                  "type": "date",
                  "dateFormat": "yyyy-MM-dd HH:mm:ss"
                }
              ]
            }
          }
        }
      ]
    }
  }

reader配置参数说明请查看DataX主页
hinawriter配置参数说明

配置 必填 默认 说明
thread 否 3 线程数,为每个 channel 内部并发使用,与 DataX 的 channel 数量无关。
type 是 无 写入的数据格式 track、profile_set等
pushUrl 是 无 数据上报地址
appid 是 无 对应项目的 appid
compress 否 无 压缩方式,gzip:支持gzip压缩
column 是 无 详见column参数说明

column参数说明

配置 必填 默认 说明
index index/value 必须选择其一 无 从reader到datax传输的数据列号,从0开始
value index/value 必须选择其一 无 数据常量,不从reader中获取
colTargetName 是 无 输出字段名
type 否 String 数据类型,见下表
dateFormat 否 无 type为date 类型时,可设置日期格式

数据类型

DataX数据类型 hinawriter数据类型
Int Number
Long Number
Double Number
String String
bytes String
Boolean Boolean
Date Date

3.5 执行

在datax安装目录下/datax/bin目录下

执行命令如下:python datax.py 配置.json

3.6 事件时间限制

导入错误时间的数据,会影响真实数据分析的准确性,因此默认情况下海纳对事件时间进行限制:
使用后端语言 SDK (如 Java、C# 等)或导入工具(如 Datax、dataimporter、Logstash + Filebeat等),需要导入历史数据,需要联系海纳运营人员,开放历史事件数据限制;

四、常见问题

4.1、datax.py脚本报语法错误;

解决方案:需要python 2.x版本,python版本要与datax版本对于要求的一致;

4.2、datax(3): win环境cmd乱码

win环境,运行 python \xxx\datax.py \xxx\xx.json后控制台乱码
解决方案:

命令:chcp (更改该控制台的活动控制台代码页)
过程:cmd 下输入 chcp 65001 改变 当前代码页变为 utf-8编码

常用的编码及对应的码值(10进制):
十进制码值    对应编码名称
950            繁体中文
65001        UTF-8代码页
936            简体中文默认的GBK
437            MS-DOS 美国英语

外部文档:https://cloud.tencent.com/developer/article/2084809

4.3、datax运行自检命令报错 datax/plugin/reader/._xxxx/plugin.json]不存在

删除.临时文件即可,在datax/plugin目录下运行:

find ./* -type f -name ".*er"  | xargs rm -rf

注意:windows环境,可以安装git工具,在命令行界面执行此命令;

4.4、【jdbc错误】Could not create connection to database server.

原因:mysql-connector-java依赖版本与下载使用的MySQL版本不一致导致;
解决方案:版本保持一致,MySQL Connectors下载官网https://www.mysql.com/products/connector/;

4.5、datax运行自检命令报错 datax/plugin/writer/hinawriter.tar.gz/plugin.json]不存在

删除hinawriter的插件包,在datax/plugin/writer目录下运行

rm -rf  hinawriter.tar.gz

4.6、mac 系统下:datax运行自检命令报错 datax/plugin/writer/.DS_Store/plugin.json]不存在

只需要在终端中,将 文件夹下的.DS_Store 删除即可,然后不要再 finder 中再次打开该文件夹,
在datax/plugin/writer目录下运行

rm -rf .DS_Store
作者:刘建雄  创建时间:2022-08-02 14:04
最后编辑:刘建雄  更新时间:2026-02-09 15:28