zoukankan      html  css  js  c++  java
  • 异构数据源海量数据交换工具-Taobao DataX 下载和使用

     


    DataX介绍

    DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesystem)之间的数据交换。

    目前成熟的数据导入导出工具比较多,但是一般都只能用于数据导入或者导出,并且只能支持一个或者几个特定类型的数据库。
    这样带来的一个问题是,如果我们拥有很多不同类型的数据库/文件系统(Mysql/Oracle/Rac/Hive/Other…),
    并且经常需要在它们之间导入导出数据,那么我们可能需要开发/维护/学习使用一批这样的工具(jdbcdump/dbloader /multithread/getmerge+sqlloader/mysqldumper…)。而且以后每增加一种库类型,我们需要的工具数目将线性增 长。(当我们需要将mysql的数据导入oracle的时候,有没有过想从jdbcdump和dbloader上各掰下来一半拼在一起到冲动?)这些工具 有些使用文件中转数据,有些使用管道,不同程度的为数据中转带来额外开销,效率差别很非常大。
    很多工具也无法满足ETL任务中常见的需求,比如日期格式转化,特性字符的转化,编码转换。

    另外,有些时候,我们希望在一个很短的时间窗口内,将一份数据从一个数据库同时导出到多个不同类型的数据库。

    DataX正是为了解决这些问题而生。

    datax

    datax

    DataX特点

    • 在异构的数据库/文件系统之间高速交换数据
    • 采用Framework + plugin架构构建,Framework处理了缓冲,流控,并发,上下文加载等高速数据交换的大部分技术问题,提供了简单的接口与插件交互,插件仅需实现对数据处理系统的访问
    • 运行模式:stand-alone
    • 数据传输过程在单进程内完成,全内存操作,不读写磁盘,也没有IPC
    • 开放式的框架,开发者可以在极短的时间开发一个新插件以快速支持新的数据库/文件系统。(具体参见《DataX插件开发指南》)

    DataX结构模式(框架+插件)

    DataX架构模式

    DataX架构模式

    • Job: 一道数据同步作业
    • Splitter: 作业切分模块,将一个大任务与分解成多个可以并发的小任务.
    • Sub-job: 数据同步作业切分后的小任务
    • Reader(Loader): 数据读入模块,负责运行切分后的小任务,将数据从源头装载入DataX
    • Storage: Reader和Writer通过Storage交换数据
    • Writer(Dumper): 数据写出模块,负责将数据从DataX导入至目的数据地

    DataX框架内部通过双缓冲队列、线程池封装等技术,集中处理了高速数据交换遇到的问题,提供简单的接口与插件交互,插件分为Reader和Writer两类,基于框架提供的插件接口,可以十分便捷的开发出需要的插件。
    比如想要从oracle导出数据到mysql,那么需要做的就是开发出OracleReader和MysqlWriter插件,装配到框架上即可。并且这样的插件一般情况下在其他数据交换场合是可以通用的。

    更大的惊喜是我们已经开发了如下插件:

    Reader插件

    hdfsreader : 支持从hdfs文件系统获取数据。
    mysqlreader: 支持从mysql数据库获取数据。
    sqlserverreader: 支持从sqlserver数据库获取数据。
    oraclereader : 支持从oracle数据库获取数据。
    streamreader: 支持从stream流获取数据(常用于测试)
    httpreader : 支持从http URL获取数据。

    Writer插件

    hdfswriter:支持向hdbf写入数据。
    mysqlwriter:支持向mysql写入数据。
    oraclewriter:支持向oracle写入数据。
    streamwriter:支持向stream流写入数据。(常用于测试)

    您可以按需选择使用或者独立开发您自己的插件 (具体参见《DataX插件开发指南》)

    DataX在淘宝的运用

           数据同步工具归一化为DataX后,大大提高了用户拖表数据速度和内存利用率, 同时针对归一化后的DataX工具,我们能够做到更好应对mysql切库、数据同步监控等以前零散工具下很难完成的运维任务。
    下面是部分工具替换后的比对情况:

    DataX

    DataX

    下面是我将DataX源码编译后的配置和使用示例(下载地址在文章最后面):

    环境需求:

    1. java >= 1.6  python >= 2.6
    2. 如果使用Oracle,需要安装Oracle客户端;
    3. 如果使用HDFS,需要确保hadoop命令行可用;同时请确保在执行DataX的用户/home目录下,链接Hadoop config目录文件,在用户目录下执行: ln  -s  /home/$user/config  hadoop-configure-目录
    4. 默认安装到/home/taobao/datax 目录, 最好使用root用户安装,因为还有其他权限问题;

    安装:

    1. 先安装Datax engine
    rpm -ivh t_dp_datax_engine-1.0.0-1.noarch.rpm
    安装之后,/home/taobao/datax目录结构如下:

    datax安装

    datax安装

    2. 安装需要的读写插件,比如,我需要在HDFS和Mysql之间的数据传输,则需要装HDFS的读写插件和Mysql的读写插件:
    rpm -ivh t_dp_datax_hdfsreader-1.0.0-1.noarch.rpm
    rpm -ivh t_dp_datax_hdfswriter-1.0.0-1.noarch.rpm
    rpm -ivh t_dp_datax_mysqlreader-1.0.0-1.noarch.rpm
    rpm -ivh t_dp_datax_mysqlwriter-1.0.0-1.noarch.rpm
    成功安装之后,/home/taobao/datax下多了plugins/目录,再往下,是reader和writer目录,分别用来存放读插件和写插件,如图:

    datax读写插件

    datax读写插件

    配置(以mysql数据导入hdfs为例)

    1.建立Hadoop配置文件目录的链接(执行任务的用户为lxw1234 ),切换到lxw1234用户,执行:
    ln -s /usr/local/hadoop-0.20.2/conf /home/lxw1234/config
    如图:

    datax配置

    datax配置

    2. 生成job配置文件
    进入:/home/taobao/datax/bin/,
    执行:./datax.py –e
    屏幕显示如下图:

    datax配置

    datax配置

    列出了可用的数据源类型(之前安装了hdfs和mysql的reader插件,因此这里显示这两种数据源),选择1(mysql),如图:

    datax配置

    datax配置

    列出了可用的数据目标类型(同理,显示hdfs和mysql),选择0(hdfs),如图:

    datax配置

    datax配置

    生成了job的配置文件/home/taobao/datax/jobs/mysqlreader_to_hdfswriter_1432867511409.xml

    3. 编辑job配置文件
    vi /home/taobao/datax/jobs/mysqlreader_to_hdfswriter_1432867511409.xml

    <reader></reader>标签里面配置数据源,这里需要修改从mysql中读取数据的配置信息:
    <param key=”ip” value=”127.0.0.1″/>
    <param key=”port” value=”3306″/>
    <param key=”dbname” value=”lxw1234″/>
    <param key=”username” value=”lxw1234″/>
    <param key=”password” value=”lxw1234.com”/>
    <param key=”sql” value=”select job_id,job_create_time,job_last_update_time,job_type from dmp_job_log limit 500″/>

    其他reader参数可参考使用手册中的说明。

    <writer></writer>标签里面配置数据目标,这里需要修改往HDFS中写入数据的配置信息:
    <param key=”hadoop.job.ugi” value=”?”/>   //Hadoop的认证配置,如果没有,就不需要配置;
    <param key=”hadoop_conf” value=”/home/lxw1234/config/core-site.xml”/>    //Hadoop的配置文件目录
    <param key=”dir” value=”hdfs://namenode:8020/tmp/lxw1234/datax/”/>     //往hdfs的哪个目录下写数据
    <param key=”field_split” value=”01″/>   //写入文件的列分隔符
    <param key=”file_type” value=”TXT”/>  //写入hdfs的文件类型
    <param key=”concurrency” value=”1″/>  //写并发,每个并发生成一个文件

    其他writer参数可参考使用手册中的说明。

    执行:

    1. 进入:/home/taobao/datax/bin/,
    执行:./datax.py /home/taobao/datax/jobs/mysqlreader_to_hdfswriter_1432867511409.xml

    运行结果如图:

    datax执行

    datax执行

    datax执行

    datax执行

    datax执行

    datax执行

    执行完后,查看hdfs上生成的文件:

    datax执行

    datax执行

    说明:

    1. datax中还有很多扩展属性,如:动态参数、动态序列、读写并发等,详见文档说明;
    2. 后续其他job,可直接复制修改之前的job配置文件,然后执行即可;
    3. hdfs reader和writer插件使用的hadoop jar包版本较低hadoop-0.19.2-core.jar(见/home/taobao/datax/plugins/writer /hdfswriter和/home/taobao/datax/plugins/reader/hdfsreader),使用hdfs插件时候,需要将 你的hadoop jar包拷贝至插件目录,比如,我使用的hadoop版本为hadoop-core-0.20.2-cdh3u2.jar,将该jar包拷贝至hdfs插 件目录,并删除原来的hadoop-0.19.2-core.jar;

    相关下载

    DataX编译好的RPM,直接安装使用:
    链接:http://pan.baidu.com/s/1o6uYAEI 密码:knqq

    DataX源码编译安装说明:
    链接:http://pan.baidu.com/s/1jG8DVka 密码:jt5x

    DataX命令行使用说明:
    链接:http://pan.baidu.com/s/1hqBzQUo 密码:w4i7

    DataX插件开发指南:
    链接:http://pan.baidu.com/s/1i36Ed8L 密码:7z3v

    DataX官方开源地址:
    http://code.taobao.org/p/datax/src/

    DataX官方产品说明:
    http://code.taobao.org/p/datax/wiki/DataX%E4%BA%A7%E5%93%81%E8%AF%B4%E6%98%8E/

    数据交换是大数据平台中的一个重要模块,另一个重要模块就是任务调度监控,参考(http://lxw1234.com/archives/2015/04/109.htm)。

    前面介绍过的京东大数据平台中,海量数据交换工具也是参考DataX开发的(http://lxw1234.com/archives/2015/05/228.htm

    后续将持续介绍我自己大数据分析平台的构建经验,请关注我的博客。


    更新: 请参考阿里最新开源的DataX3.0版本。

    https://github.com/alibaba/DataX

    转载请注明:lxw的大数据田地 » 异构数据源海量数据交换工具-Taobao DataX 下载和使用

  • 相关阅读:
    mcstructs使用CMake生成Makefile文件
    打印man手册为pdf文件
    ubuntu安装wine之后进不了系统
    如何知道自己梦呓的内容
    Opencv step by step
    Opencv step by step
    树莓派实现只有一个按键的播放器
    virtualbox 打不开ubuntu解决
    wifi使用的一些误区
    Opencv step by step
  • 原文地址:https://www.cnblogs.com/lcword/p/5858830.html
Copyright © 2011-2022 走看看