一、概述

  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. Apktool(1)——Apktool的安装

    Apktool是google提供的apk的编译工具,有了它就可以做很多事情.比如获取apk的源码,apk汉化,对手机rom包做一些美化. 首先来看看apktool的安装(配置): 以下内容主要翻译字A ...

  2. 我的简历 PHP Java C# 技术总监

          石先生 ID:303321266 目前正在找工作 13611326258 hr_msn@163.com 男|32 岁 (1985/08/06)|现居住北京-海淀区|12年工作经验     ...

  3. Python中DataFrame去重

    # 去除重复行数据 keep:'first':保留重复行的第一行,'last':保留重复行的最后一行,False:删除所有重复行df = df.drop_duplicates( subset=['YJ ...

  4. Java新建Web应用与配置Tomcat流程

    1. 新版本IDEA新建Web应用后没有web.xml文件,需要通过下图方式添加 2. IDEA中的web文件夹相当于eclipse里的WebRoot文件夹,在里面新建WEB-INF文件夹,再创建cl ...

  5. Asp.net Mvc身份验证

    1.安装组件 Microsoft.AspNet.Identity.Core,身份认证核心组件 安装Microsoft.AspNet.Identity.EntityFramework,EF实现身份认证 ...

  6. 17LaTeX学习系列之---LaTeX的版面设计

    目录 目录 前言 (一)基础知识 1.纸张大小的设置 2.边距的设置 3.页眉页脚的设置 4.横分割线的设置 5.行间距与段间距 (二)实例 1.源代码 2.输出效果: 目录 本系列是有关LaTeX的 ...

  7. 14LaTeX学习系列之---LaTeX的浮动体

    目录 目录 前言 (一)浮动体的基础知识 1.环境及语法 2.允许位置的参数 3.其他命令 (二)实例: 1.源代码 2.输出效果 (三)浮动体的高级操作 1.标题的控制 2.并排与子图表 3.绕排 ...

  8. Python3编写网络爬虫07-基本解析库pyquery的使用

    三.pyquery 简介:同样是一个强大的网页解析工具 它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便 安装: pip install pyquery 验证: im ...

  9. Python3编写网络爬虫04-爬取猫眼电影排行实例

    利用requests库和正则表达式 抓取猫眼电影TOP100 (requests比urllib使用更方便,由于没有学习HTML系统解析库 选用re) 1.目标 抓取电影名称 时间 评分 图片等 url ...

  10. jQuery实现全选/反选和批量删除

    <%@ page language="java" contentType="text/html; charset=utf-8"     pageEncod ...