- DataX简介
- DataX框架设计
- DataX3.0插件体系
- 工具部署
- 三种案例实操
- stream2mysql
- mysql2hdfs
- 拓展
DataX简介
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
DataX框架设计
DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
- Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
- Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
- Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
DataX3.0插件体系
DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入,目前支持数据如下图,详情请点击:DataX数据源参考指南
工具部署
(1) 环境要求
- Linux
- JDK(1.6以上)
- Python2(推荐Python2.7.X) ,datax 支持Python3需要修改替换datax/bin下面的三个python文件,替换文件地址
- Apache Maven 3.x (若不编译DataX源码,则不需要)
(2) 工具部署
- 方法一、直接下载DataX工具包:DataX,下载后解压至本地某个目录,进入bin目录,即可运行同步作业。
$ cd {YOUR_DATAX_HOME}/bin
python datax.py {YOUR_JOB.json}
- 方法二、下载DataX源码,自己编译:DataX源码
下载DataX源码:
$ git clone git@github.com:alibaba/DataX.git
通过maven打包:
$ cd {DataX_source_code_home}
$ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
打包成功,日志显示如下:
[INFO] BUILD SUCCESS
[INFO] ————————————————————————————————-
[INFO] Total time: 08:12 min
[INFO] Finished at: 2015-12-13T16:26:48+08:00
[INFO] Final Memory: 133M/960M
[INFO] ————————————————————————————————-
三种案例实操
- stream2mysql
从stream读取数据并打印到控制台,
第一步、创建创业的配置文件(json格式)
#stream2mysql.json
{
"job": {
"setting": {
"speed": {
"channel": 1
}
},
"content": [
{
"reader": {
"name": "streamreader",
"parameter": {
"column" : [
{
"value": "DataX",
"type": "string"
},
{
"value": "man",
"type": "string"
}
],
"sliceRecordCount": 100
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "******",
"column": [
"name",
"sex"
],
"session": [
"set session sql_mode='ANSI'"
],
"preSql": [
"delete from test"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://192.168.157.130:3306/testdb?useUnicode=true&characterEncoding=utf8",
"table": [
"test"
]
}
]
}
}
}
]
}
}
整个配置文件是一个Job配置文件,以Job为起手根元素,Job下面两个子元素配置项:setting和content,
其中,setting描述任务本身的信息,content描述源(reader)和目的端(writer)的信息:
第二步:启动DataX
同步结束,显示日志如下:
…
数据库中导入成功:
- mysql2hdfs
第一步、创建创业的配置文件(json格式)
{
"job": {
"setting": {
"speed": {
"channel": 4
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "******",
"column": [
"id",
"name",
"sex"
],
"where":"id>=50",
"splitPk": "id",
"connection": [
{
"table": [
"test"
],
"jdbcUrl": [
"jdbc:mysql://192.168.157.130:3306/testdb"
]
}
]
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"defaultFS": "hdfs://spark01:9000",
"fileType": "text",
"path": "/testdata1/textfull",
"fileName": "testext",
"column": [
{
"name": "id",
"type": "INT"
},
{
"name": "name",
"type": "STRING"
},
{
"name": "sex",
"type": "STRING"
}
],
"writeMode": "append",
"fieldDelimiter": "\t",
}
}
}
]
}
}
HDFS中数据导入成功
拓展
任务很少,情景简单的情况下,使用Linux自带的corntab即可(crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令),当然,正常的时候推荐使用调度平台,这一块我还没详细研究过,但是我知道已有完整项目代码已经放在github上,如:基于Django的FirstBlood,博客地址;