一、概述

  1.是什么?

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

  开源地址https://github.com/alibaba/DataX

二、简介

  1.设计架构

  

  数据交换通过DataX进行中转,任何数据源只要和DataX连接上即可以和已实现的任意数据源同步

  2.框架结构

  

  核心组件:

      Reader:数据采集模块,负责从源采集数据

    Writer:数据写入模块,负责写入目标库

    Framework:数据传输通道,负责处理数据缓冲等

    以上只需要重写Reader与Writer插件,即可实现新数据源支持

  支持主流数据源,详见:https://github.com/alibaba/DataX/blob/master/introduction.md

  从一个JOB来理解datax的核心模块组件:

    datax完成单个数据同步的作业,称为Job,job会负责数据清理、任务切分等工作;

    任务启动后,Job会根据不同源的切分策略,切分成多个Task并发执行,Task就是执行作业的最小单元

    切分完成后,根据Scheduler模块,将Task组合成TaskGroup,每个group负责一定的并发和分配Task

三、入门

  1.安装

    参考官方文档

    提取为安装随笔https://www.cnblogs.com/jiangbei/p/10901201.html

  2.使用

    核心就是编写配置文件(当前版本使用JSON)

    在datax服务器上运行:

python bin/datax.py -r mysqlreader -w hdfswriter

即可获取配置模板

    【配置文件】

      先看一个示例:

{
"job": {
"setting": {
"speed": {
"channel": 1
}
},
"content": [{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "",
"password": "",
"connection": [{
"querySql": [
"SELECT Id,CopId,BrandId,PayType,TradeNo,OutTradeNo,TotalFee,PayTotalFee,PayCashFee,PayCouponFee,RefundFee,ShopId,VipOldCode,VipId,UserCode,PayStatus,IsReverse,CreateDate,UNIX_TIMESTAMP(LastModifiedDate) as LastModifiedDate FROM mall_out_sales_order_pay where brandid=63 order by createDate asc;"
],
"jdbcUrl": [
"jdbc:mysql://192.168.12.41:3306/ezp-pay"
]
}]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "",
"password": "",
"dateFormat": "YYYY-MM-dd hh:mm:ss",
"column": [
"Id",
"CopId",
"BrandId",
"PayType",
"TradeNo",
"OutTradeNo",
"TotalFee",
"PayTotalFee",
"PayCashFee",
"PayCouponFee",
"RefundFee",
"ShopId",
"VipOldCode",
"VipId",
"UserCode",
"PayStatus",
"IsReverse",
"CreateDate",
"LastModifiedDate"
],
"session": [
"set session sql_mode='ANSI'"
],
"preSql": [
"delete from pay_order where brandid=63"
],
"connection": [{
"jdbcUrl": "jdbc:mysql://127.0.0.1:3306/ezp-pay",
"table": [
"pay_order"
]
}]
}
}
}]
}
}

JSON配置文件

    整个配置文件是一个Job配置文件,以Job为起手根元素,Job下面两个子元素配置项:setting和content,

  其中,setting描述任务本身的信息,content描述源(reader)和目的端(writer)的信息:

  

   其中,content下又分为reader和writer两块,分别对应源端和目的端:

  

 各reader与writer插件的文档直接点击对应的文件夹进入doc即可!

    

    3.示例

      编写一个Mysql到本地打印的Job:

      根据Mysqlreader插件编写配置文件:

{
"job": {
"setting": {
"speed": {
"channel": 3
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "root",
"column": [
"id",
"age",
"name"
],
"connection": [
{
"table": [
"girl"
],
"jdbcUrl": [
"jdbc:mysql://192.168.19.129:3306/mysql"
]
}
]
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"print":true
}
}
}
]
}
}

    根据自检脚本(文件颜色浅绿色),可以知道需要是可执行文件,添加权限:

chmod +x mysqltest.json

    使用运行命令,运行即可:(进入bin目录运行命令如下)

python datax.py ../job/mysqltest.json

    有时是希望灵活一点的自定义的配置,则可参考如下json配置:

{
"job": {
"setting": {
"speed": {
"channel":1
}
},
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"username": "root",
"password": "root",
"connection": [
{
"querySql": [
"select db_id,on_line_flag from db_info where db_id < 10;"
],
"jdbcUrl": [
"jdbc:mysql://bad_ip:3306/database",
"jdbc:mysql://127.0.0.1:bad_port/database",
"jdbc:mysql://127.0.0.1:3306/database"
]
}
]
}
},
"writer": {
"name": "streamwriter",
"parameter": {
"print": false,
"encoding": "UTF-8"
}
}
}
]
}
}

四、拓展

  1.调度

    任务很少,情景简单的情况下,使用Linux自带的corntab即可,当然,正常的时候推荐使用调度平台

    这里推荐airflow(其他相关的azkaban、oozie等调度不展开)

【dataX】阿里开源ETL工具——dataX简单上手的更多相关文章

  1. 【转】阿里出品的ETL工具dataX初体验

    原文链接:https://www.imooc.com/article/15640 来源:慕课网 我的毕设选择了大数据方向的题目.大数据的第一步就是要拿到足够的数据源.现实情况中我们需要的数据源分布在不 ...

  2. 开源ETL工具kettle系列之常见问题

    开源ETL工具kettle系列之常见问题 摘要:本文主要介绍使用kettle设计一些ETL任务时一些常见问题,这些问题大部分都不在官方FAQ上,你可以在kettle的论坛上找到一些问题的答案 1. J ...

  3. ETL工具Datax、sqoop、kettle 的区别

    一.Sqoop主要特点: 1.可以将关系型数据库中的数据导入到hdfs,hive,hbase等hadoop组件中,也可以将hadoop组件中的数据导入到关系型数据库中: 2.sqoop在导入导出数据时 ...

  4. 开源ETL工具之Kettle介绍

    What 起源 Kettle是一个Java编写的ETL工具,主作者是Matt Casters,2003年就开始了这个项目,最新稳定版为7.1. 2005年12月,Kettle从2.1版本开始进入了开源 ...

  5. 开源ETL工具kettle--数据迁移

    背景 因为项目的需求,须要将数据从Oracle迁移到MSSQL,不是简单的数据复制,而是表结构和字段名都不一样.甚至须要处理编码规范不一致的情况,例如以下图所看到的 watermark/2/text/ ...

  6. 初识阿里开源诊断工具Arthas

    上个月,阿里开源了一个名为Arthas的监控工具.恰逢近期自己在写多线程处理业务,由此想到了一个问题. 如果在本机开发调试,IDE可以看到当前的活动线程,例如IntelliJ IDEA,线程是运行还是 ...

  7. 阿里ETL工具datax学习(一)

    阿里云开源离线同步工具DataX3.0介绍 一. DataX3.0概览 ​ DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.Ma ...

  8. 开源作业调度工具实现开源的Datax、Sqoop、Kettle等ETL工具的作业批量自动化调度

    1.阿里开源软件:DataX DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳 ...

  9. ETL工具框架开源软件

    http://www.oschina.net/project/tag/453/etl 开源ETL工具 Kettle Talend KETL CloverETL Apatar Scriptella ET ...

随机推荐

  1. Tensorflow高效读取数据

    关于Tensorflow读取数据,官网给出了三种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFlow ...

  2. GIS性能策略

    当一个地理平台上线运行,我们经常会遇到这些问题:1.系统刚上线时速度较快,一段时间后访问较慢?2.在地理平台目前的配置下,发布多少个服务才合理?一个服务配置多少个实例数才合适?这些问题,都涉及整个地理 ...

  3. MSys2安装QT5

    1. MSYS2 shell # pacman –Syuu 2. Reopen MSYS2 # pacman –Syuu 3.添加国内源 msys64\etc\pacman.d 目录下有三个文件 1. ...

  4. JavaScript日期排序

    //日期排序 function sortDownDate(a, b) { return Date.parse(a.received) - Date.parse(b.received); } funct ...

  5. 喜闻乐见-Activity生命周期

    Activity的生命周期,对于Android开发者来说,再熟悉不过了.但是我们接触到的资料,绝大部分都只是谈了一些表面上的东西,例如各个回调的顺序等等.本文试图换个角度来讲解,也希望对各位读者有所帮 ...

  6. (网页)备注在HTML页面的放置的小技巧(title属性)

    其实很简单,就是title这个属性:(字符多余的剪切,title显示完整的字符) 下面是代码: <ul> <li title="江南style.江南style.江南styl ...

  7. 慕学在线网0.5_xadmin的全局配置

    全局配置包括了以下修改: 开启主题功能: 修改左上角的"django Xadmin"和主界面的"我的公司": App菜单收叠: App名字修改(汉化). 1.把 ...

  8. Pyhon环境变量的一些坑

    在正常的情况下,使用编译器执行Python文件,无需考虑环境变量的改变 例:sum --one --one1.py --two --two1.py 在执行one.py文件需要调用 two.py中某个方 ...

  9. C#检测本机是否联网

    public class Net { [DllImport("wininet")] private extern static bool InternetGetConnectedS ...

  10. 描述性统计的matlab实现

    理论讲的再多不会做也白弄 直接上手 一.针对接近正态分布的(均值,方差,标准差,极差,变异系数,偏度,峰度) 这里我必须提前说明一点就是,你在写好函数后,函数的名是dts,你保存的文件名也必须是dts ...