dataX 入门指南

dataX 入门指南

下文应用场景。

系统:centos 7

python:python 2.7.5

java:jdk1.8.0_341/1.8.0_172

由sql server 2008 向 mysql 8.0.30 全量同步

以下示例经过测试从sql server读取1.5亿+数据,并进行分库分表写入mysql。速度在3/4W条每秒左右,但执行一段时间后速度变慢,原因待查。

2022年12月14日 补充
不适用screen也可,可以使其后台运行,如下命令
nohup /opt/datax/bin/datax.py /opt/datax/job/你的job.json > /opt/datax/输出的日志.out 2>&1 &
或者可以调整堆栈大小
nohup /opt/datax/bin/datax.py --jvm=“-Xms4G -Xmx4G” /opt/datax/job/你的job.json > /opt/datax/输出的日志.out 2>&1 &
下文示例为将数据全量一次性迁移,所以不开启CDC也可。

1. 修改环境

datax依赖于python于java环境,需要检查当前系统环境是否匹配。

1.1 java 环境

因java安全参数设置问题(与java判断有关),如果是==1.8.0_172可以忽略此步骤(直接进入2)==,如果大于此版本请按照本文描述进行修改。

  1. 查看环境变量指向java目录(此处仅列举 通过源码 指定jdk环境的方式,如果是rpm安装请自行参照其安装说明找到jdk目录(或jre))

    cat /etc/profile
    

    通过以上命令找到java环境执行目录,如

    image-20221107110040430

     vim /usr/local/java8/jre/lib/security/java.security
    

    修改 {java_home}/jre/lib/security/java.security 文件

  2. 修改jdk.tls.disabledAlgorithms参数

    删除\3DES_EDE_CBC\,或修改为以下内容

    jdk.tls.disabledAlgorithms=SSLv3,RC4, DES, MD5withRSA, \
        DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
        include jdk.disabled.namedCurves
    

1.2 python环境

  1. 经过测试,datax版本(2022/10)支持python2(有其他看法或反对请提出,此处不太严谨)。需要对 /usr/lib/下python命令直接软链接至python2。

    例如:

    ln -s /usr/local/python2/python /usr/bin/python
    

2. 下载datax

  1. 下载并解压

    datax官方下载,此下载链接为下载最近版datax,链接摘自https://github.com/alibaba/DataX/。

    将tar.gz包放至/opt/datax/下并解压。

  2. 删除某些文件

    rm -rf /opt/datax/dataz/plugin/*/._*
    
  3. 修改数据源头,使sql server开启CDC功能(进入sql server 命令行界面)

    命令参考

    -- 查看已启用cdc的数据库
    SELECT name,is_cdc_enabled FROM sys.databases WHERE is_cdc_enabled = 1;
    -- 查看已开启cdc的表
    SELECT name,is_tracked_by_cdc FROM sys.tables WHERE is_tracked_by_cdc = 1;
    # 启用数据库cdc
    EXECUTE sys.sp_cdc_enable_db;
    
    # 禁用数据库cdc
    EXECUTE sys.sp_cdc_disable_db;
    # 启用表cdc
    EXEC sys.sp_cdc_enable_table
        @source_schema = 'schema_name',
        @source_name   = 'table_name',
        @role_name     = NULL
     
    # 不需要控制权限,则role_name为NULL
     
    # 禁用表cdc
    EXEC sys.sp_cdc_disable_table
        @source_schema = 'schema_name',
        @source_name   =  'table_name',
        @capture_instance = 'cdc.change_tables中capture_instance字段'
    
  4. 新增自己的job

    • /opt/datax/job目录下新建自己的任务,如

      下文为 sql server 2008 -> mysql 8.0.30
      官方说最新版已经支持写入mysql8。具体在写入mysql8中遇到很多问题(无法创建连接之类的)。

      touch 你的job文件.json
      
      {
          "job": {
              "setting": {
                  "speed": {
                      "channel": "16"
                  },
                  "errorLimit": {
                      "record": 0
                  }
              },
              "content": [
                  {
                      "reader": {
                          "name": "sqlserverreader",
                          "parameter": {
                              "username": "账号",
                              "password": "密码",
                              "fetchSize": "4096",
                              "where": "",
                              "connection": [
                                  {
                                      "querySql": [
                                          "同步的字段查询的sql 如 select * from tableName"
                                     ],
                                      "jdbcUrl": [
                                          "jdbc:sqlserver://sql server ip:1433;DatabaseName=名称"
                                      ]
                                  }
                              ]
                          }
                      },
                      "writer": {
                          "name": "mysqlwriter",
                          "parameter": {
                              "writeMode": "insert",
                              "username": "数据库用户名",
                              "password": "数据库密码",
                              "batchSize": "4096",
                              "column": [
                                   "你的字段"
                              ],
                              "session": [
                                  "set session sql_mode='ANSI'"
                              ],
                              "connection": [
                                  {
                                      "jdbcUrl": "jdbc:mysql://你的数据库ip:3306/你的数据库端口?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8",
                                      "table": [
                                          "数据库的表名"
                                      ]
                                  }
                              ]
                          }
                      }
                  }
              ]
          }
      }
      

3. 运行

/opt/datax/bin/datax.py --jvm="-Xms3G -Xmx3G" /opt/datax/job/你的job文件.json

番外

screen

因datax运行大部分是以前台方式运行,即 声明周期为当前session,如果断开连接,datax任务即刻终止。所以建议采用screen来管理session

安装screen

centos系统可以直接使用sudo yum install screen -y来进行安装

使用screen

# 创建一个会话,并指定名字 unique_name 为指定名称 并进入该会话
screen -S unique_name
# 列出活动的会话
screen -ls
# 从正在运行的会话中分离,使其在后台运行 Ctrl+a d(即按住Ctrl,依次再按a,d)
Control + A/a + D/d
# 恢复会话 unique_name 为指定名称
screen -r unique_name
# 退出会话 -r恢复会话或在创建时进入 使用以下命令退出会话(并删除)
exit

datax-web

使用此web界面管理工具可以简单高效的配置datax任务。

gitee开源项目https://gitee.com/WeiYe-Jing/datax-web

请参考https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md进行安装部署。

使用其他读写

本文展示了sql server 的读,以及mysql的写,其他数据库支持范围可以参考如下(以下表格摘自datax官网):

或自行到官网https://github.com/alibaba/DataX在github目录下各个文件名均代表其作用。每个目录下均有 doc/***reader.md,markdown文档内均含参数说明。

dataX 入门指南_第1张图片

类型 数据源 Reader(读) Writer(写) 文档
RDBMS 关系型数据库 MySQL 读 、写
Oracle 读 、写
OceanBase 读 、写
SQLServer 读 、写
PostgreSQL 读 、写
DRDS 读 、写
Kingbase 读 、写
通用RDBMS(支持所有关系型数据库) 读 、写
阿里云数仓数据存储 ODPS 读 、写
ADS
OSS 读 、写
OCS
Hologres
AnalyticDB For PostgreSQL
阿里云中间件 datahub 读 、写
SLS 读 、写
阿里云图数据库 GDB 读 、写
NoSQL数据存储 OTS 读 、写
Hbase0.94 读 、写
Hbase1.1 读 、写
Phoenix4.x 读 、写
Phoenix5.x 读 、写
MongoDB 读 、写
Cassandra 读 、写
数仓数据存储 StarRocks 读 、写
ApacheDoris
ClickHouse
Hive 读 、写
kudu
无结构化数据存储 TxtFile 读 、写
FTP 读 、写
HDFS 读 、写
Elasticsearch
时间序列数据库 OpenTSDB
TSDB 读 、写
TDengine 读 、写

优化

​ 在DataX内部对每个Channel会有严格的速度控制,分两种,一种是控制每秒同步的记录数,另外一种是每秒同步的字节数,默认的速度限制是1MB/s,可以根据具体硬件情况设置这个byte速度或者record速度

"core":{
        "transport":{
            "channel":{
                "speed":{
                    "channel": 2, ## 此处为数据导入的并发度,建议根据服务器硬件进行调优
                    "record":-1, ##此处解除对读取行数的限制
                    "byte":-1, ##此处解除对字节的限制
                    "batchSize":2048 ##每次读取batch的大小
                }
            }
        }
}

参考

https://blog.csdn.net/WANTAWAY314/article/details/112947868

https://github.com/alibaba/DataX

https://github.com/alibaba/DataX/issues/1005

https://xiaozhuanlan.com/topic/7860594132

你可能感兴趣的:(数据库,java,mysql,datax)