数据迁移工具DataX部署与使用
概述
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的源码包,需要自己手动去编译
所以我选择将该网页往下拉一点,点击
直接下载编译好的安装包
服务器配置
我使用的是阿里云上的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能够实现以下数据源之间的读写,基本上涵盖了日常所见所闻的 有关数据库的产品。
我只能说,点个赞,好东西。迁移数据找它就没错了
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开发神技能 | Python Mock 的入门
Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。简单的说,mock库用于如下的场景: 假设你开发的项目叫a,里面包含了一个模块b,模块b中的一个函数c(也就是a.b.c)在工作的时候需要调用发送请求给特定的服务器来得到一个JSON返回值,然后根据这个返回值来做处理。如果要为a.b.c函数写一个单元测试,该如何做? 一个简单的办法是搭建一个测试的服务器,在单元测试的时候,让a.b.c函数和这个测试服务器交互。但是这种做法有两个问题: 测试服务器可能很不好搭建,或者搭建效率很低。 你搭建的测试服务器可能无法返回所有可能的值,或者需要大量的工作才能达到这个目的。 那么如何在没有测试服务器的情况下进行上面这种情况的单元测试呢?Mock模块就是答案。上面已经说过了,mock模块可以替换Python对象。我们假设a.b.c的代码如下: import requests def c(url): resp ...
- 下一篇
Kubernetes 实战 二 CRD 自定义控制器
简介: 之前介绍过 Kubernetes 实战 一 CRD 自定义资源 。但是CRD只能实现资源的定义,kubernetes operator = crd + controller。 那如何实现自定义的控制呢? 接下来教你10分钟快速实现自定义controller。(可以合理上网的前提下。。。。) 环境 mac os 10.13.6 kubernetes 1.14.0 --> Centos 7 快速搭建kubernetes 集群 kubebuilder 2.0.0-alpha.4 kustomize 3.1.0 golang 1.12.7 创建 operator 操作步骤 0. 写在前面 接下来的来的过程有一些小坑,很多步骤都需要翻墙、希望能够合理的翻墙 否则不用多说了吧 。。。。。建议使用我的github代码,熟悉流程后在自行搭建,可以直接跳过 2、3 两个步骤。第8步 就是编译镜像然后通过yml部署到kubernetes集群 不想尝试的可以跳过。 代码下载: git clone https://github.com/xiliangMa/vm-crd.git 1. kubebu...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL8.0.19开启GTID主从同步CentOS8
- Hadoop3单机部署,实现最简伪集群
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16