数据迁移工具DataX部署与使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 概述DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

概述

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。
阿里云已经开源此工具,目前版本是datax3.0。

下载安装

下载

Githup地址:https://github.com/alibaba/DataX

若是有能力就直接在服务器上Git clone 或者直接点击【Clone or download】下载datax的源码包,需要自己手动去编译

所以我选择将该网页往下拉一点,点击
image

直接下载编译好的安装包

服务器配置

我使用的是阿里云上的ECS-centos部署datax,总的来说要满足以下几点:

  • JDK(1.8以上,推荐1.8)
  • Python(推荐Python2.6.X)
  • Apache Maven 3.x (Compile DataX)

1、我先安装JDK
使用yum安装

# yum search java|grep jdk  
# yum install java-1.8.0-openjdk -y

安装完成之后可以查看下安装的版本

[root@stephen ~]# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

2、Python
一般的centos都是自带Python的

[root@stephen ~]# python --version
Python 2.7.5

3、 Apache Maven 3.x
下载地址:https://maven.apache.org/download.cgi
我下载的是3.6.1版本,上传到服务器中bin解压

[root@stephen ~]# ls
apache-maven-3.6.1-bin.tar.gz
[root@stephen ~]# tar -xvzf apache-maven-3.6.1-bin.tar.gz 

为了方便,创建一个目录

[root@stephen ~]# mkdir /opt/maven
[root@stephen ~]# mv apache-maven-3.6.1/* /opt/maven/
[root@stephen maven]# ln -s /opt/maven/bin/mvn /usr/bin/mvn

在vi /etc/profile.d/maven.sh添加

export M2_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}

创建完成后看看版本

[root@stephen maven]# mvn -v
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
Maven home: /opt/maven
Java version: 1.8.0_222, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-514.26.2.el7.x86_64", arch: "amd64", family: "unix"

至此,服务器配置完成

开始安装

将下载的datax包上传到服务器并解压

[root@stephen opt]# tar -xvzf datax.tar.gz
[root@stephen opt]# ls datax
bin conf job lib log log_perf plugin script tmp

如果下载的是编译好的安装包的话,基本上就是已经安装好了。可以使用自检测试脚本进行测试一下

python {YOUR_DATAX_HOME}/bin/datax.py {YOUR_DATAX_HOME}/job/job.json

当测试显示以下内容是,说明datax已经安装成功

[root@stephen datax]# python bin/datax.py job/job.json
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.
.....显示省略.....
2019-08-21 12:08:36.709 [job-0] INFO JobContainer - 
任务启动时刻 : 2019-08-21 12:08:26
任务结束时刻 : 2019-08-21 12:08:36
任务总计耗时 : 10s
任务平均流量 : 253.91KB/s
记录写入速度 : 10000rec/s
读出记录总数 : 100000
读写失败总数 : 0

测试使用

测试环境:阿里云ECS 自建 MySQL 5.7 与PostgreSQL 11.2 数据库
计划从MySQL中同步一张表的10万行数据 到 PostgreSQL数据库中,具体情况如下:

准备数据

mysql中的原表结构

mysql> show create table datax_test;
| Table | Create Table |
| datax_test | CREATE TABLE `datax_test` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `memo` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

用数据工具生成了10万行数据

mysql> select count(*) from datax_test;
+----------+
| count(*) |
+----------+
| 100000 |
+----------+

在Postgresql数据库中先建好相同结构的表。字段类型要做相应转换,如下:

stephen=# \d datax_test
                                      Table "public.datax_test"
  Column | Type | Collation | Nullable | Default              
----------+--------------------------------+-----------+----------+-----------------------------------
 id | integer | | not null | 
 name | text | | | 
 birthday | timestamp(0) without time zone | | | NULL::timestamp without time zone
 memo | text | | | 
Indexes:
    "datax_test_pkey" PRIMARY KEY, btree (id)

stephen=# select count(*) from datax_test ;
 count  
--------
0
(1 row)

创建配置文件

可以通过命令查看配置模板: python datax.py -r {YOUR_READER} -w {YOUR_WRITER}

如下,是从MySQL中读出数据写入到PostgreSQL数据库中

可以看到,当命令执行完成之后,会给出两个URL了,分别是mysqlreader和postgresqlwriter的json配置介绍,可以仔细阅读两个文件来查看

[root@stephen bin]# python datax.py -r mysqlreader -w postgresqlwriter

DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.


Please refer to the mysqlreader document:
     https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md 

Please refer to the postgresqlwriter document:
     https://github.com/alibaba/DataX/blob/master/postgresqlwriter/doc/postgresqlwriter.md 
 
Please save the following configuration as a json file and use
     python {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json 
to run the job.

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
                        "column": [], 
                        "connection": [
                            {
                                "jdbcUrl": [], 
                                "table": []
                            }
                        ], 
                        "password": "", 
                        "username": "", 
                        "where": ""
                    }
                }, 
                "writer": {
                    "name": "postgresqlwriter", 
                    "parameter": {
                        "column": [], 
                        "connection": [
                            {
                                "jdbcUrl": "", 
                                "table": []
                            }
                        ], 
                        "password": "", 
                        "postSql": [], 
                        "preSql": [], 
                        "username": ""
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": ""
            }
        }
    }
}

根据自己的两边数据库信息配置json文件

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", 
                    "parameter": {
                        "column": ["id" , "name" , "birthday" , "memo"],  #需要同步的字段,可以写为*来匹配所有字段
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:mysql://172.16.21.167:3306/test"],    # mysql数据源的访问地址,与所在的数据库
                                "table": ["datax_test"]     # 目的表的表名称。支持写入一个或者多个表。当配置为多张表时,必须确保所有表结构保持一致。
                            }
                        ], 
                        "password": "mysql",  #密码
                        "username": "root",  #用户
                        "where": ""
                    }
                }, 
                "writer": {
                    "name": "postgresqlwriter", 
                    "parameter": {
                        "column": ["id" , "name" , "birthday" , "memo"],     #PG端的字段
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:postgresql://172.16.21.167:5432/stephen",   #PG的数据源地址与数据名
                                "table": ["datax_test"]   #在PG中的表名
                            }
                        ], 
                        "password": "postgres",   # 密码
                        "postSql": [], 
                        "preSql": [], 
                        "username": "postgres"  # 用户
                    }
                }
            }
        ], 
        "setting": {
            "speed": {
                "channel": "5"  #并发通道,根据自己的数据库性能而定,一般数据库不建议超过32个
            }
        }
    }
}

执行同步操作

利用刚刚准备好的json文件,执行数据同步操作

[root@stephen datax]# python bin/datax.py job/mysql2pg.json
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.
2019-08-21 15:52:26.746 [main] INFO VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2019-08-21 15:52:26.754 [main] INFO Engine - the machine info => 
........显示省略..........
  [total cpu info] => 
  averageCpu | maxDeltaCpu | minDeltaCpu                    
  -1.00% | -1.00% | -1.00%
  [total gc info] => 
   NAME | totalGCCount | maxDeltaGCCount | minDeltaGCCount | totalGCTime | maxDeltaGCTime | minDeltaGCTime     
   Copy | 1 | 1 | 1 | 0.049s | 0.049s | 0.049s             
   MarkSweepCompact | 0 | 0 | 0 | 0.000s | 0.000s | 0.000s             
2019-08-21 15:52:37.605 [job-0] INFO JobContainer - PerfTrace not enable!
2019-08-21 15:52:37.605 [job-0] INFO StandAloneJobContainerCommunicator - Total 100000 records, 2488939 bytes | Speed 243.06KB/s, 10000 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 5.170s | All Task WaitReaderTime 0.848s | Percentage 100.00%
2019-08-21 15:52:37.606 [job-0] INFO JobContainer - 
任务启动时刻 : 2019-08-21 15:52:26
任务结束时刻 : 2019-08-21 15:52:37
任务总计耗时 : 10s
任务平均流量 : 243.06KB/s
记录写入速度 : 10000rec/s
读出记录总数 : 100000
读写失败总数 : 0

同步成功!去Postgresql中查看数据是否已经同步完成

stephen=# select count(*) from datax_test ;
 count  
--------
 100000
(1 row)

stephen=# 
stephen=# select * from datax_test limit 10 ;
 id | name | birthday | memo     
----+------------+---------------------+--------------
  0 | g=14}9v7x | 2006-11-25 00:00:00 | ujGPtH/I\r
  1 | *O | 2015-12-14 00:00:00 | Vg\r
  2 | kD}ExP6d!0 | 2001-09-07 00:00:00 | ?\r
  3 | ll3--zr | 2008-12-10 00:00:00 | |+\r
  4 | Mj!j5~_~ | 2010-11-04 00:00:00 | ypE@\r
  5 | mJW | 2004-08-25 00:00:00 | *Ish&NS>4k\r
  6 | 65xl | 2003-09-25 00:00:00 | |HAtL2\r
  7 | %6V6c7*4 | 2009-06-16 00:00:00 | dS|Ul6H\r
  8 | 8:0O | 2006-01-25 00:00:00 | rOA10>zL|\r
  9 | CHjFqa_ | 2018-09-26 00:00:00 | 4TY-xX\r

总结

官方上说datax能够实现以下数据源之间的读写,基本上涵盖了日常所见所闻的 有关数据库的产品。
我只能说,点个赞,好东西。迁移数据找它就没错了
image

相关文章
|
6月前
|
SQL 存储 关系型数据库
DataX - 全量数据同步工具(2)
DataX - 全量数据同步工具
|
6月前
|
数据采集 供应链 搜索推荐
数据集成:融合不同来源的数据
【6月更文挑战第4天】数据集成在企业中发挥关键作用,连接数据孤岛,促进信息流动,提升决策能力。通过抽取、清洗、转换和加载(ETL)不同来源、格式的数据,整合到统一框架,进行深度分析。以零售商为例,集成销售、客户和供应链数据可优化库存管理。数据清洗确保质量,转换满足分析需求,最终加载到数据仓库。Python和pandas库是实现这一过程的工具之一。随着技术进步,数据集成将推动企业向智能化和个性化发展。
156 2
|
4月前
|
分布式计算 DataWorks 关系型数据库
MaxCompute 生态系统中的数据集成工具
【8月更文第31天】在大数据时代,数据集成对于构建高效的数据处理流水线至关重要。阿里云的 MaxCompute 是一个用于处理大规模数据集的服务平台,它提供了强大的计算能力和丰富的生态系统工具来帮助用户管理和处理数据。本文将详细介绍如何使用 DataWorks 这样的工具将 MaxCompute 整合到整个数据处理流程中,以便更有效地管理数据生命周期。
156 0
|
4月前
|
关系型数据库 MySQL 大数据
DataX:数据同步的超音速英雄!阿里开源工具带你飞越数据传输的银河系,告别等待和故障的恐惧!快来见证这一数据工程的奇迹!
【8月更文挑战第13天】DataX是由阿里巴巴开源的一款专为大规模数据同步设计的工具,在数据工程领域展现强大竞争力。它采用插件化架构,支持多种数据源间的高效迁移。相较于Apache Sqoop和Flume,DataX通过并发写入和流处理实现了高性能同步,并简化了配置流程。DataX还支持故障恢复,能够在同步中断后继续执行,节省时间和资源。这些特性使其成为构建高效可靠数据同步方案的理想选择。
381 2
|
6月前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之选择独享调度,数据集成里可以使用,但是数据地图里面测试无法通过,是什么原因导致的
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
59 0
DataWorks产品使用合集之选择独享调度,数据集成里可以使用,但是数据地图里面测试无法通过,是什么原因导致的
|
5月前
|
SQL DataWorks 关系型数据库
DataWorks产品使用合集之数据集成时源头提供数据库自定义函数调用返回数据,数据源端是否可以写自定义SQL实现
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
DataWorks 安全 API
DataWorks产品使用合集之是否可以不使用DataWorks进行EMR的调度和DataX数据导入
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
分布式计算 DataWorks 数据挖掘
DataWorks操作报错合集之上传数据时报错com.alibaba.datax.common.exception.DataXException: Code:[UnstructuredStorageReader-11],该如何排查
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
数据采集 分布式计算 大数据
MaxCompute产品使用合集之数据集成中进行数据抽取时,是否可以定义使用和源数据库一样的字符集进行抽取
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
4月前
|
数据采集 SQL DataWorks
【颠覆想象的数据巨匠】DataWorks——远超Excel的全能数据集成与管理平台:一场电商数据蜕变之旅的大揭秘!
【8月更文挑战第7天】随着大数据技术的发展,企业对数据处理的需求日益增长。DataWorks作为阿里云提供的数据集成与管理平台,为企业提供从数据采集、清洗、加工到应用的一站式解决方案。不同于桌面级工具如Excel,DataWorks具备强大的数据处理能力和丰富的功能集,支持大规模数据处理任务。本文通过电商平台案例,展示了如何使用DataWorks构建数据处理流程,包括多源数据接入、SQL任务实现数据采集、数据清洗加工以提高质量,以及利用分析工具挖掘数据价值的过程。这不仅凸显了DataWorks在大数据处理中的核心功能与优势,还展示了其相较于传统工具的高扩展性和灵活性。
153 0

热门文章

最新文章