阿里离线数据同步工具 DataX 踩坑记录

代码星冰乐

专注成就未来

首页 归档 关于

阿里离线数据同步工具 DataX 踩坑记录

Jul 4, 2018 | haifeiWu | Java | 阅读
文章目录
  1. 1. 主要功能
  2. 2. 系统要求
  3. 3. 快速开始
    1. 3.1. 部署DataX
    2. 3.2. 生成配置文件
  4. 4. 小结

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2018/4928/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。


由于版权原因,请阅读原文 --> 阿里离线数据同步工具 DataX 踩坑记录

关注我们

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2018/4928/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2018/4928/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

最近在做一些数据迁移相关工作,调研了一些工具,发现DataX是个不错的东西,所以安利给大家。那么DataX是什么呢? DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具,实现包括 MySQL、SQL Server、Oracle、PostgreSQL 等各种异构数据源之间高效的数据同步功能。

主要功能

DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。具体介绍请移步DataX介绍

系统要求

  • Linux
  • JDK(1.8以上,推荐1.8)
  • Python(推荐Python2.6.X)
  • Apache Maven 3.x (Compile DataX)
  • 设置jvm堆内存,堆内存要求大于1g,否则会出现启动不了的情况
1
export JAVA_OPTS= -Xms1024m -Xmx1024m

快速开始

部署DataX

  • 方法一、直接下载DataX工具包:DataX下载地址

下载后解压至本地某个目录,进入bin目录,即可运行同步作业:

1
2
$ cd  {YOUR_DATAX_HOME}/bin    
$ python datax.py {YOUR_JOB.json}

  • 方法二、下载DataX源码,自己编译:DataX源码
    (1)、下载DataX源码:

    1
    $ git clone git@github.com:alibaba/DataX.git

    (2)、通过maven打包:

    1
    2
    $ cd  {DataX_source_code_home}
    $ mvn -U clean package assembly:assembly -Dmaven.test.skip=true

    打包成功,日志显示如下:

    1
    2
    3
    4
    5
    6
    [INFO] BUILD SUCCESS
    [INFO] -----------------------------------------------------------------
    [INFO] Total time: 08:12 min
    [INFO] Finished at: 2018-06-05T16:26:48+08:00
    [INFO] Final Memory: 133M/960M
    [INFO] -----------------------------------------------------------------

打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ ,

生成配置文件

  • 第一步、创建配置文件(json格式)

    可以通过命令生成配置模板:

    1
    python datax.py -r oraclereader -w mysqlwriter > oracle2mysql2.json

    在 {DataX_source_code_home} 目录下的 plugin 目录下有DataX支持的所有reader与writer
    通过命令生成的配置模板如下所示,楼主生成的reader与writer是对应的是从oracle读取数据,向mysql写数据。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    {
    "job": {
    "content": [{
    "reader": {
    "name": "oraclereader",
    "parameter": {
    "column": ["*"],
    "connection": [{
    "jdbcUrl": ["*"],
    "table": ["tb1"]
    }],
    "password": "***",
    "username": "***"
    }
    },
    "writer": {
    "name": "mysqlwriter",
    "parameter": {
    "column": ["*"],
    "connection": [{
    "jdbcUrl": "*",
    "table": ["tb1"]
    }],
    "password": "**",
    "preSql": [],
    "session": [],
    "username": "**",
    "writeMode": "insert"
    }
    }
    }],
    "setting": {
    "speed": {
    "channel": "3"
    }
    }
    }
    }
  • 最后:启动DataX

    1
    2
    $ cd {YOUR_DATAX_DIR_BIN}
    $ python datax.py ./oracle2mysql2.json
  • 同步结束,显示日志如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    2018-06-05 11:20:25.263 [job-0] INFO JobContainer -
    任务启动时刻 : 2018-06-05 11:20:15
    任务结束时刻 : 2018-06-05 11:20:25
    任务总计耗时 : 10s
    任务平均流量 : 205B/s
    记录写入速度 : 5rec/s
    读出记录总数 : 50
    读写失败总数 : 0

小结

相对来说DataX上手使用起来还是比较容易的,但是令楼主比较犯难就是不能在同一个配置文件里面同时写入不同的数据库的表,要想读取多张表并写入就只能单独配置。但是也解决了楼主一些问题。

关注我们

作 者:haifeiWu
原文链接:https://www.hchstudio.cn/article/2018/4928/
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

分享
Java
阿里云离线同步工具DataX源码略读golang重构博客统计服务
微信关注我们
分类
  • Android8
  • Go4
  • Java59
  • Kafka,Java1
  • Kotlin2
  • Linux1
  • MapReduce1
  • Python2
  • Raft1
  • Redis1
  • ThreadPoolExecutor1
  • go1
  • 工具1
  • 总结8
  • 旅游日记1
标签
Nginx ChanghuiN haifeiWu Android Java 设计模式 hexo Kotlin 算法 MySQL 源码解析 Python Redis golang web Kafka 配置中心 总结 性能优化 旅游日记 Shell Go 问题排查 译文 Docker Spring Boot 工具 学习笔记 WebFlux 性能测试 go 散列表 源码 netty Raft
最近文章
  • Kafka的日志复制机制
  • 从20到21
  • go 并发编程
  • 【译】了解Linux CPU负载-您何时应该担心?
  • Zookeeper 与分布式锁
  • 基于Redis的分布式锁到底安全吗?
  • 【译】Raft 学生指南
  • ThreadPoolExecutor 的简单梳理
  • MapReduce 的简单实现
  • 使用 Map 实现策略模式
福利专区
    免费SSL证书
      阿里云红包
        腾讯云专属福利
        Copyright © 2021 代码星冰乐. Powered by ChanghuiN. 版权所有 晋ICP备15001365号
        特别感谢: 云服务器服务商 、 CDN 服务商