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文档内均含参数说明。

image-20221107141336826

类型数据源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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值