一、概述

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
最后编辑:邓昊  更新时间:2024-10-31 14:08