汝之观览,吾之幸也!本文主要讲解Datax工具的概念,架构,以及部署使用说明
一、基础引导
1、什么是ETL
ETL全称为Extract Transform Load,是一种数据仓库技术,其中三个英文单词分别对应三个数据处理操作的中文名称:抽取(Extract)、转换(Transform)以及加载(Load)。因此,ETL的实际含义是将数据经过抽取、清洗转换之后加载到数据仓库的过程。
2、Datax
DataX是由阿里巴巴研发并开源的一个异构数据源离线同步工具,技术人员能够通过DataX实现不同数据源之间的同步。
这里所指的数据源既包括关系型数据库、NoSQL数据存储、无结构化数据存储、时间序列数据库,同时也包含了阿里的云数仓数据存储。
DataX是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX实现了包括MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS等各种异构数据源之间高效的数据同步功能
二、Datax的架构
DataX这套工具采用的是离线数据同步的方式,其框架为Framework + plugin。
数据同步的步骤即是将数据的读取、写入操作抽象成为由Reader/Writer插件进行处理步骤,最后纳入到整个同步框架中。
- Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
- Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
- Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
1、Job
- Job:运行在JobContainer容器中,这是所有任务的Master,负责初始化、分割、调度、运行、回收、监视和报告,但是它不进行实际的数据同步操作。
- JobContainer:Job执行器,它负责Job全局分割、调度、前置语句和后置语句等工作。在Yarn里与JobTracker相似。
Job是DataX用来描述从一个源到目标端的同步作业,它是DataX数据同步的最小业务单位。例如:将一张MySQL表与ODPS(OpenDataProcessingService)的一个表的特定分区进行同步。
2、Task
- Task:将Job分割成最小化的执行单元。例如:阅读一个包含1024个Task的MySQL分类表的Job,将其分为1024个Task,并以数个并行执行。
- TaskGroup:描述了一组任务集。执行同一TaskGroupContainer的Task集合称为TaskGroup。
- TaskGroupContaine:负责执行一组任务,就像Yarn中的TaskTracker那样。
简单地说,Job拆分为Task,在框架所提供的容器中分别执行,插件仅需实现Job和Task逻辑
3、Channel
DataX 会单独启动一条线程运行运行一个 Task,而 Task 会持有一个 Channel,用作 Reader 与 Writer 的数据传输媒介,DataX 的数据流向都是按照 Reader—>Channel—>Writer 的方向流转。
4、Transformer
DataX 的 transformer 模式同时还提供了强大的数据转换功能,DataX 默认提供了丰富的数据转换实现类,用户还可以根据项目自身需求,扩展数据转换。
三、下载部署
1、方法一
直接下载DataX工具包:datax压缩包
下载后解压至本地某个目录,DataX即安装完成
进入bin目录,即可运行同步作业:
$ cd {YOUR_DATAX_HOME}/bin
$ python datax.py {YOUR_JOB.json}
自检脚本:python {YOUR_DATAX_HOME}/bin/datax.py {YOUR_DATAX_HOME}/job/job.json
2、方法二
下载DataX源码,自主编译:datax源码地址
下载压缩包后解压后进行maven编辑
$ cd {DataX_source_code_home}
$ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
打包成功,日志显示如下:
打包成功后的DataX包位于{DataX_source_code_home}/target/datax/datax/,结构如下:
四、其他
1、修改源码
因为有些数据源同步可能会遇到格式不匹配的问题,这时可以对相应的reader与writer做修改,然后maven编译即可。后续会更新具体的源码修改例子
2、gitee地址
因为github地址国内会有反应慢连不上的问题,提供gitee地址
Datax的gitee地址