![](https://img-blog.csdnimg.cn/20210407192233574.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
datax
文章平均质量分 79
阿里巴巴开发数据同步框架DataX解读
water___Wang
不断学习
展开
-
阿里-DataX源码解读汇总
将自己datax的系列文章进行汇总形成目录DataX(1):编译打包使用DataX(2): 通过idea搭建源码阅读+调试环境DataX(3): win环境cmd乱码DataX(4): dDataX.py解读DataX(5):改造升级-自动识别py环境,执行dDataX任务DataX(6):启动步骤解析DataX(7):JobContainer源码解读DataX(8):TaskGroupContainer源码解读DataX(9):Job和TaskGroup的通讯机制DataX(10).原创 2021-03-10 11:15:29 · 66742 阅读 · 19 评论 -
datax(1):编译打包使用
阿里开源的datax默认只支持py2,我将datax进行fork然后修改,现在直接执行datax命令,脚本会检测本地py版本,选择对应的py文件进行处理;一. DataXDataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。二.FeaturesDataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据.原创 2020-12-11 13:53:38 · 53066 阅读 · 5 评论 -
datax(2): 通过idea搭建源码阅读+调试环境
为了读datax源码,要在本地idea 上进行debug一,环境搭建本地已经按照上文,安装好dataxidea导入datax源码启动类Engine 上配置参数二,参数配置vm option 需要写上你用maven打包后生成的target目录 -Ddatax.home=/xxx/DataX/target/datax/dataxprogram args 写json文件目录-mode standalone -jobid -1 -job /xxx/job.json如下图所示最终效.原创 2020-12-11 14:11:02 · 59419 阅读 · 1 评论 -
datax(3): win环境cmd乱码
通过前面两篇文章,大家应该已经可以安装成功datax,但是在win的cmd下竟然中文乱码。解决它!!!一,环境win10datax 3.xcmdpy3.x二,现象运行 python \xxx\datax.py \xxx\job.json后控制台乱码三,解决1,临时解决命令:chcp (更改该控制台的活动控制台代码页)过程:cmd 下输入 chcp 65001 改变 当前代码页变为 utf-8编码常用的编码及对应的码值(10进制):十进制码值 对应编码名称950 .原创 2020-12-11 15:57:03 · 68649 阅读 · 3 评论 -
datax(4): datax.py解读
datax 直接使用py文件进行任务提交,今天读一读它1 文件位置原始文件位置在 xx/DataX/core/src/main/bin/下,datax项目打包后会将文件拷贝到 xx/DataX\target\datax\datax\bin 下。 core模块的pom.xml 指定‘拷贝’datax.py文件的方式maven-assembly-plugin <plugin> <artifactId>maven-asse.原创 2021-01-05 15:43:36 · 78224 阅读 · 2 评论 -
datax(5):改造升级-自动识别py环境,执行datax任务
1 思考上篇文章已经研究过datax.py文件,产生2个问题:如果用户不是py2环境(datax默认要求环境)怎么处理;能不能有一个脚本自动识别用户的py环境,从而执行datax任务2 效果在py2或py3下执行下面命令>python datax.py ../job/job.json熟悉的配方,熟悉的味道。什么都没有变,但是背后却做了很多事情;3 改造过程3.1 编写py3的datax脚本共计3个文件===datax.py文件===#!/usr/bin/env pyt.原创 2021-01-05 16:45:05 · 78416 阅读 · 2 评论 -
datax(6):启动步骤解析
通过前面 datax(2): 通过idea搭建源码阅读+调试环境 已经知道了idea下阅读源码的步骤,现在看下 DataX启动步骤解析一,启动java类(主入口)/** * Engine是DataX入口类,该类负责初始化Job或者Task的运行容器,并运行插件的Job或者Task逻辑 */com.alibaba.datax.core.Engine二,启动的步骤 1、解析配置,包括job.json、core.json、plugin.json三个配置2、设置jobId到config.原创 2021-01-14 16:34:26 · 85386 阅读 · 0 评论 -
datax(7):JobContainer源码解读
前面已经看了Engine,其中有一步就是判断container 是job还是taskGroup类型。本文就好好看看JobContainer。一,概述JobContainer: job实例运行在jobContainer容器中,它是所有任务的master,负责初始化、拆分、调度、运行、回收、监控和汇报,但它并不做实际的数据同步操作1、如果是job类型,则依次执行job的preHandler()、init()、prepare()、split()、schedule()、- post()、post.原创 2021-01-16 17:57:44 · 76233 阅读 · 3 评论 -
datax(8):TaskGroupContainer源码解读
继续深挖 datax里的container,任务一个任务进入datax都会判断是jobContainer还是TaskGroupContainer。那后者要做哪些事情。一,TaskGroupContainer概述JobContainer将所有的task分配到TaskGroup中执行,TaskGroup启动5个线程去消费所有的taskTaskGroupContainer里的主入口为start方法,实现自AbstractContainer.startTaskGroupContainer.start.原创 2021-01-18 20:40:11 · 76832 阅读 · 4 评论 -
datax(9):Job和TaskGroup的通讯机制
先后看完了TaskGroupContainer 和 JobContainer,梳理下他们的关系与职责;一,各自职责JobContainer: Job执行器,负责Job全局拆分、调度、前置语句和后置语句等工作的工作单元。类似Yarn中的JobTrackerTaskGroupContainer: TaskGroup执行器,负责执行一组Task的工作单元,类似Yarn中的TaskTracker(Yarn中的JobTracker和Yarn中的TaskTracker通过RPC进行通讯);二.原创 2021-01-18 21:49:31 · 80292 阅读 · 0 评论 -
datax(10): 源码解读Communication(Datax通讯类)
前面看了datax的通讯机制,继续看源码—具体的通讯类 Communication。根据datax的运行模式的区别, 数据的收集会有些区别,这篇文章都是讲的在standalone模式下。一、communication概述DataX所有的统计信息都会保存到Communication类里面。Communication支持下列数据的统计计数器,比如读取的字节速度,写入成功的数据条数 /** * 所有的数值key-value对 * */ private Map<String.原创 2021-01-19 19:38:42 · 86675 阅读 · 2 评论 -
datax(11):源码解读 ContainerCommunicator
前面看了datax的 通讯类communication,现在看看在他之上包装的一个容器通信类ContainerCommunicator一、抽象基类AbstractContainerCommunicatordataX中提供了一个基类 AbstractContainerCommunicator来处理JobContainer、TaskGroupContainer和Task的通讯。AbstractContainerCommunicator提供了注册、收集信息等接口,信息的单位是Communication.原创 2021-01-20 00:34:37 · 90273 阅读 · 0 评论 -
datax(12):调度源码解读AbstractScheduler
datax的jobContainer最终会通过调度周期性的执行,今天把它看完;一、基类AbstractScheduler概述类继承关系全部方法二、AbstractScheduler的主要属性和方法1、主要属性 /** * 脏数据行数检查器,用于运行中随时检查脏数据是否超过限制(脏数据行数,或脏数据百分比) */ private ErrorRecordChecker errorLimit; /** * 积累容器通讯器,来处理JobContainer、Tas.原创 2021-01-21 00:26:03 · 92485 阅读 · 0 评论 -
datax(13):源码解读Column-datax中的数据类型
一、基类Column概述Column是datax中所有数据类型的基类,里面有3个属性,以及一个构造方法,外加一个枚举类;public abstract class Column { private Type type; private Object rawData; private int byteSize; public Column(final Object object, final Type type, int byteSize) { this.rawData = objec原创 2021-01-22 00:38:00 · 94719 阅读 · 2 评论 -
datax(14):源码解读Channel
一、概述Channel是Reader和Writer的通信组件。因为Reader和Writer是一一对应的关系,所以channel的值可以视为是DataX任务中数据管道的数量;Reader向channle写入数据,Writer从channel读取数据。channel还提供了限速的功能,支持数据大小(字节数), 数据条数。但是在实际ETL过程中,配置了channel可能不产生效果,实际的DataX并发度由数据源的文件切片数量决定,比如数据源是hdfs上某个文件,这个文件的并发度是3,有3个文件,则Dat原创 2021-01-22 00:51:20 · 105142 阅读 · 7 评论 -
datax(15):源码解读AbstractCollector
前面看了通讯类communication,容器类container,今天继续看他们两个是如何关联起来的。一、概述AbstractCollector1、主要作用: 1. 将communication和container进行关联起来; 2. 收集task信息;2、族谱目前整个家族只有父子二人,AbstractCollector和ProcessInnerCollector,且大部分事情都是父亲AbstractCollector干了。二、主要属性 /** * taskCommu.原创 2021-01-22 16:03:24 · 100564 阅读 · 0 评论 -
datax(16):源码解读AbstractReporter
之前介绍了通信类communication,容器类container,communication的收集类collector,今天再看一个报告类Reporter;一、概述AbstractReporter主要作用:Reporter的主要功能是将收集到的信息上报给上级主要方法:reportTGCommunication(汇报TG的communication信息给上级),reportJobCommunication(汇报job的communication信息给上级)二、族谱族谱里面目前只有父子.原创 2021-01-22 23:37:48 · 96814 阅读 · 0 评论 -
datax(17):源码解读AbstractRunner
datax中将job根据channel切分成task,task又构成taskGroup,真正到执行阶段,是由各类runner执行,现在就看看看各种runner;一、概述AbstractRunnerAbstractRunner 是各类runner的基类,由他衍生出ReaderRUnner和WriterRunner,父类AbstractRunner中定义并实现了几个基本方法;族谱主要方法及属性,可以从下图看到,主要属性 /** * 基类任务插件 */ private A.原创 2021-01-23 13:25:11 · 103086 阅读 · 0 评论 -
datax(18):源码解读Transformer
现在很多场景都把datax当做ETL工具,datax中的各种reader相当于E(Extract),各种writer相当于L(load),那么datax中是否有T(transform)。答案是肯定的~一、概述transformer作用:在生产上数据传输,一般情况下只需要rw就行,但是有时候需要在中间过程做些操作,比如加解密、切割、拼接等等,这个时候就需要transform了。族谱datax中的transform有2个顶级祖宗,简单类型的Transformer和复杂类型的ComplexTran.原创 2021-01-24 15:04:55 · 97201 阅读 · 0 评论 -
datax(19):源码解读内置Transformer
通过datax(18)已经对transformer有了初步了解,继续撸代码,看datax已经内置的5种简单类型transformer;一、概述目前datax内置了5种常用的transformer,分别如下截取SubstrTransformer填充PadTransformer替换ReplaceTransformer过滤FilterTransformerGroovy类型GroovyTransformer二、SubstrTransformer主要是对record中的column的值进.原创 2021-01-25 00:05:42 · 96721 阅读 · 0 评论 -
datax(20):内置transformer使用
前面看了transformer的原理及源代码,今天实战下,看看他的效果;一、环境win10DataX 3.0(从我的datax分支打包而来)job.json使用datax的样例json,源文件在xxx\DataX\core\src\main\job\中,打包编译后在xxx\DataX\target\datax\datax\job下。本文略做修改,主要修改2出,是否打印和记录行数{ "job": { "setting": { "speed":.原创 2021-01-25 11:33:27 · 103251 阅读 · 5 评论 -
datax(21):编写自己的Transformer
前面2篇文章,已经看完+学习完transform的内容,今天继续编写一个自己的transformer;一、环境win10DataX 3.0(从我的datax分支打包而来)job.json使用datax的样例json,源文件在xxx\DataX\core\src\main\job\中,打包编译后在xxx\DataX\target\datax\datax\job下。本文略做修改,主要修改2出,是否打印和记录行数{ "job": { "setting": { .原创 2021-01-26 11:45:47 · 129655 阅读 · 14 评论 -
datax(22):任务分配规则
前面学习了一些源码和datax的执行,其中有一个重要的流程任务切分。今天梳理下;一、概述Datax根首先据配置文件,确定好channel的并发数目。然后将整个job分成一个个小的task,然后划分成组。从JobContainer的start()方法开始,进入split()方法,split方法里执行后续所有的切分;二、总体流程切分任务channel数目的确定reader的切分Writer的切分合并配置 分配任务三、切分任务JobContainer 的split负责将整个jo.原创 2021-01-26 23:18:25 · 99299 阅读 · 14 评论 -
datax(23):dataX调优
调优前需要先知道datax任务的执行过程;一、调优方向网络本身的带宽等硬件因素造成的影响;DataX本身的参数;即当觉得DataX传输速度慢时,需要从上述两个个方面着手开始排查。二、网络本身的带宽等硬件因素造成的影响此部分主要需要了解网络本身的情况,即从源端到目的端的带宽是多少(实际带宽计算公式),平时使用量和繁忙程度的情况,从而分析是否是本部分造成的速度缓慢。以下提供几个思路。1,可使用从源端到目的端scp,python http,nethogs等观察实际网络及网卡速度;2,结合.原创 2021-01-28 00:34:55 · 102831 阅读 · 11 评论 -
datax(24):远程调试datax
一、datax开启远程debug1、环境本地:win10,idea专业版2020.3,datax3.0远程:CentOS6.5,datax3.02、效果3、步骤3.1 远程开启debug/apps/datax/bin/datax.py /apps/datax/job/job.json -d即在后面添加-d 即可,默认端口为9999,也可以自行修改datax.py文件第35行 REMOTE_DEBUG_CONFIG = "-Xdebug -Xrunjdwp:transport=dt原创 2021-01-29 00:02:48 · 97634 阅读 · 6 评论 -
datax(25):插件加载原理
一、插件分类按照功能分reader, 读插件,例如mysqlReader,从mysql读取数据writer, 写插件。例如mysqlWriter,给mysql写入数据;transformer, 中间结果转换,例如SubstrTransformer用于字符截取;handler, 主要用于任务执行前的准备工作和完成的收尾工作。插件类型由PluginType枚举表示public enum PluginType { READER("reader"), TRANSFORMER("transfor.原创 2021-01-29 23:11:53 · 92496 阅读 · 8 评论 -
datax(26):各个数据库与datax字段映射
通过源码解读Column-datax中的数据类型,可以知道datax框架中只有7(enum Type种)种数据类型,那么各个数据库的字段是如何和datax的字段进行相互映射?一、ADB PGDataX 内部类型ADB PG 数据类型Longbigint, bigserial, integer, smallint, serialDoubledouble precision, float, numeric, realStringvarchar, char, tex.原创 2021-02-01 23:36:02 · 62018 阅读 · 3 评论 -
datax(27):不太常见配置项querySql、preSql、postSql、splitPk
每个datax的json都有自己的json配置文档,基本大同小异,有几个配置较为少用,但是用了之后,真香~一、querySql1、使用教程描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on tabl.原创 2021-02-02 16:11:51 · 70451 阅读 · 15 评论