数据迁移—datax
数据迁移⼯具—DataX的部署与使⽤
⼀、基本概念与原理
1.什么是DataX
DataX 是阿⾥开源的⼀个异构数据源离线同步⼯具,致⼒于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定⾼效的数据同步功能。是⼀个单机多任务的ETL⼯具
根据官⽅⽂档DataX中可以使⽤的数据源如下:
基本上已经包含了所有常见的数据库,
2.DataX的原理
DataX作为中间传输载体负责连接各种数据源。解决异构数据源同步问题,接⼊⼀个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到⽆缝数据同步。
架构:
核⼼模块介绍:
DataX完成单个数据同步的作业,我们称之为Job,DataX接受到⼀个Job之后,将启动⼀个进程来完成整个作业同步过程。DataX Job 模块是单个作业的中枢管理节点,承担了数据清理、⼦任务切分(将单⼀作业计算转化为多个⼦Task)、TaskGroup管理等功能。
DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个⼩的Task(⼦任务),以便于并发执⾏。Task便是DataX作业的最⼩单元,每⼀个Task都会负责⼀部分数据的同步⼯作。
切分多个Task之后,DataX Job会调⽤Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每⼀个TaskGroup负责以⼀定的并发运⾏完毕分配好的所有Task,默认单个任务组的并发数量为5。
每⼀个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步⼯作。
DataX作业运⾏起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值⾮0
DataX调度流程:
举例来说,⽤户提交了⼀个DataX作业,并且配置了20个并发,⽬的是将⼀个100张分表的mysql数据同步到odps⾥⾯。 DataX的调度决策思路是:
DataXJob根据分库分表切分成了100个Task。
根据20个并发,DataX计算共需要分配4个TaskGroup。
4个TaskGroup平分切分好的100个Task,每⼀个TaskGroup负责以5个并发共计运⾏25个Task。
以上参考链接:
⼆、下载与部署
1.环境规划
主机名IP系统版本数据库版本说明
datax192.168.0.100CentOS Linux release 7.6.1810 (Core)-作为dataX承载系统
MySQL192.168.0.150CentOS release 6.8 (Final) 5.6.21迁移⽬标库
Oracle192.168.0.50CentOS release 6.8 (Final)11.2.0迁移源库
2.资源下载
安装条件:
JAVA环境:jdk1.8以上(centos7通常会⾃带1.8.0的jdk)Python:默认2.7.5即可
Apache Maven 3.X
下载Maven:
下载dataX:
dataX存在两种安装⽅式⼀种是未编译安装另⼀种是已编译安装这⾥选择已经编译的安装⽅法。
以上下载完成后传⼊服务器
[root@datax ~]# ls
apache-maven-3.6.
3.开始安装
3.1 Maven部署
#创建maven存放⽬录
[root@datax ~]# mkdir /root/maven
#解压压缩包
[root@localhost ~]# tar -zxvf apache-maven-3.6. -C maven/ [root@datax ~]# cd maven/
[root@datax maven]# ls
apache-maven-3.6.3
[root@datax maven]# mv apache-maven-3.6.3/ maven
[root@datax maven]# ls
maven
[root@datax bin]# pwd
/root/maven/maven/bin
[root@datax bin]# ln -s /root/maven/maven/mvn /usr/bin/mvn
#修改配置⽂件
[root@datax ~]# vim /etc/profile.d/maven.sh
[root@datax ~]# cat /etc/profile.d/maven.sh
export M2_HOME=/root/maven/maven
export PATH=${M2_HOME}/bin:${PATH}
3.2 dataX部署
⾸先检测以下当前环境是否符合安装条件
查看当前java环境:
[root@datax ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
查看当前Python环境:
[root@datax ~]# python --version
Python 2.7.5
查看maven环境:
[root@datax ~]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /root/maven/maven
Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
符合要求,部署DataX
[root@datax ~]# tar -zxvf
[root@datax ~]# ls datax
bin conf job lib plugin script tmp
[root@datax ~]# cd datax/
[root@datax datax]# ls
bin conf job lib plugin script tmp
#进⾏测试,这是软件⾃带的
jdbc连接oracle[root@datax datax]# python bin/datax.py job/job.json
....
2020-07-23 13:59:23.128 [job-0] INFO JobContainer -
任务启动时刻 : 2020-07-23 13:59:13
任务结束时刻 : 2020-07-23 13:59:23
任务总计耗时 : 10s
任务平均流量 : 253.91KB/s
记录写⼊速度 : 10000rec/s
读出记录总数 : 100000
读写失败总数 : 0
部署完成
三、测试
这⾥采⽤同步Oracle数据库中的表到MySQL数据库中具体操作如下:
Oracle:
1)启动监听,测试⽹络连接是否可⽤
[oracle@Oracle ~]$ lsnrctl start
[oracle@Oracle ~]$ sqlplus sys/123456@192.168.0.50:1521/proe as sysdba
2)登⼊数据库创建测试表
SYS@proe>create table dataxtest (id int);
Table created.
SYS@proe>insert into dataxtest (select employee_id ployees);
107 rows created.
SYS@proe>select count(*) from dataxtest;
COUNT(*)
----------
107
MySQL:
1)创建库以及对应表注意表结构以及字段⼀致
mysql> create database dataxtest;
Query OK, 1 row affected (0.02 sec)
mysql> use dataxtest;
Database changed
mysql> create table dataxtest (id int);
Query OK, 0 rows affected (0.03 sec)
2)测试⽹络连接是否可⽤
[root@MySQL ~]# mysql -u root -h 192.168.0.150 -P 3306 -p dataxtest
dataX:
1)DataX⽐较重要的就是配置⽂件的编写,根据配置⽂件的内容进⾏数据的同步。⽐较⼈性化的地⽅就是这个软件可以根据你的输⼊来为你⽣成相应配置⽂件模板供你进⾏改写。
这⾥我是从oracle中将数据同步到MySQL所以查看相应的配置⽂件模板如下:
#因为从Oracle读⼊,所以oraclereader,写⼊到MySQL为mysqlwriter
[root@datax bin]# python datax.py -r oraclereader -w mysqlwriter
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.
Please refer to the oraclereader document:
github/alibaba/DataX/blob/master/oraclereader/doc/oraclereader.md #阿⾥提供相应的使⽤说明⾥⾯包含哪些参数必要,参数含义等信息Please refer to the mysqlwriter document:
github/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.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": "oraclereader",
"parameter": {
"column": [],
"connection": [
{
"jdbcUrl": [],
"table": []
}
],
"password": "",
"username": ""
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": [],
"connection": [
{
"jdbcUrl": "",
"table": []
}
],
"password": "",
"preSql": [],
"session": [],
"username": "",
"writeMode": ""
}
}
}
],
"setting": {
"speed": {
"channel": ""
}
}
}
}
2)配置⽂件改写:
[root@datax job]# cp job.json job.json.bk
[root@datax bin]# python datax.py -r oraclereader -w mysqlwriter > ./../job/job.json
[root@datax job]# vim job.json
[root@datax job]# cat job.json
{
"job": {
"content": [
{
"reader": {
"name": "oraclereader",
"parameter": {
"column": ["id"],
"connection": [
{
"jdbcUrl": ["jdbc:oracle:thin:@192.168.0.50:1521:proe"],
"table": ["dataxtest"]
}
],
"password": "123456",
"username": "sys as sysdba"
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": ["id"],
"connection": [
{
"jdbcUrl": "jdbc:mysql://192.168.0.150:3306/dataxtest",
"table": ["dataxtest"]
}
],
"password": "1234",
"preSql": [],
"session": [],
"username": "root",
"writeMode": "insert"
}
}
}
]
,
"setting": {
"speed": {
"channel": "5"
}
}
}
}
3)开始同步:
[root@datax datax]# python bin/datax.py job/job.json
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.
2020-07-23 14:39:40.237 [main] INFO VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl 2020-07-23 14:39:40.242 [main] INFO Engine - the machine info =>
osInfo: Oracle Corporation 1.8 25.181-b13
jvmInfo: Linux amd64 3.10.0-957.el7.x86_64
cpu num: 4
totalPhysicalMemory: -0.00G
freePhysicalMemory: -0.00G
maxFileDescriptorCount: -1
currentOpenFileDescriptorCount: -1
GC Names [PS MarkSweep, PS Scavenge]
MEMORY_NAME | allocation_size | init_size
PS Eden Space | 256.00MB | 256.00MB
Code Cache | 240.00MB | 2.44MB
Compressed Class Space | 1,024.00MB | 0.00MB
PS Survivor Space | 42.50MB | 42.50MB
PS Old Gen | 683.00MB | 683.00MB
Metaspace | -0.00MB | 0.00MB
...
WaitWriterTime 0.000s | All Task WaitReaderTime 0.000s | Percentage 100.00%
2020-07-23 14:39:50.900 [job-0] INFO JobContainer -
任务启动时刻 : 2020-07-23 14:39:40
任务结束时刻 : 2020-07-23 14:39:50
任务总计耗时 : 10s
任务平均流量 : 32B/s
记录写⼊速度 : 10rec/s
读出记录总数 : 107
读写失败总数 : 0
4)同步成功,在MySQL中查看是否已经同步数据
mysql> select count(*) from dataxtest;
+----------+
| count(*) |
+----------+
| 107 |
+----------+
1 row in set (0.01 sec)
测试成功
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论