当前位置: 首页 > news >正文

【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax类图

【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax概述 

【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax快速入门 

 【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax类图

【大数据进阶第三阶段之Datax学习笔记】使用阿里云开源离线同步工具Datax实现数据同步 

3、 DataX类图

整个流程大致如下
 

在这里插入图片描述


启动步骤解析:
1、解析配置,包括job.json、core.json、plugin.json三个配置

2、设置jobId到configuration当中

3、启动Engine,通过Engine.start()进入启动程序

4、设置RUNTIME_MODEconfiguration当中

5、通过JobContainer的start()方法启动
6、依次执行job的preHandler()、init()、prepare()、split()、schedule()、- post()、postHandle()等方法。

7、init()方法涉及到根据configuration来初始化reader和writer插件,这里涉及到jar包热加载以及调用插件init()操作方法,同时设置reader和writer的configuration信息

8、prepare()方法涉及到初始化reader和writer插件的初始化,通过调用插件的prepare()方法实现,每个插件都有自己的jarLoader,通过集成URLClassloader实现而来

9、split()方法通过adjustChannelNumber()方法调整channel个数,同时执行reader和writer最细粒度的切分,需要注意的是,writer的切分结果要参照reader的切分结果,达到切分后数目相等,才能满足1:1的通道模型

10、channel的计数主要是根据byte和record的限速来实现的,在split()的函数中第一步就是计算channel的大小

11、split()方法reader插件会根据channel的值进行拆分,但是有些reader插件可能不会参考channel的值,writer插件会完全根据reader的插件1:1进行返回

12、split()方法内部的mergeReaderAndWriterTaskConfigs()负责合并reader、writer、以及transformer三者关系,生成task的配置,并且重写job.content的配置

13、schedule()方法根据split()拆分生成的task配置分配生成taskGroup对象,根据task的数量和单个taskGroup支持的task数量进行配置,两者相除就可以得出taskGroup的数量

14、schdule()内部通过AbstractScheduler的schedule()执行,继续执行startAllTaskGroup()方法创建所有的TaskGroupContainer组织相关的task,TaskGroupContainerRunner负责运行TaskGroupContainer执行分配的task。scheduler的具体实现类为ProcessInnerScheduler。

15、taskGroupContainerExecutorService启动固定的线程池用以执行TaskGroupContainerRunner对象,TaskGroupContainerRunner的run()方法调用taskGroupContainer.start()方法,针对每个channel创建一个TaskExecutor,通过taskExecutor.doStart()启动任务

相关文章:

  • 【WinForms 窗体】常见的“陷阱”
  • SqueezeNet:通过紧凑架构彻底改变深度学习
  • MySQL之数据类型建表以及约束
  • JQuery异步加载表格选择记录
  • 如何上传苹果ipa安装包?
  • R语言【base】——sample():随机取样和排列
  • K8S存储卷和数据卷
  • 常见类型的yaml文件如何编写?--kind: Job|CronJob
  • C 语言关于sizeof() 和 strlen()区别?
  • Java的输入和输出处理(二)字符篇
  • Java使用IText生产PDF时,中文标点符号出现在行首的问题处理
  • 第二证券:股指维持震荡格局 关注光伏设备等板块
  • B-树和B+树的特性,以及B+树在数据库中的应用
  • RESTful API使用它构建 web 应用程序
  • Mysql与Redis如何保证数据一致性问题
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • #Java异常处理
  • @jsonView过滤属性
  • C# 免费离线人脸识别 2.0 Demo
  • CSS实用技巧干货
  • input的行数自动增减
  • input实现文字超出省略号功能
  • iOS 颜色设置看我就够了
  • JS函数式编程 数组部分风格 ES6版
  • JS字符串转数字方法总结
  • Mysql5.6主从复制
  • React16时代,该用什么姿势写 React ?
  • redis学习笔记(三):列表、集合、有序集合
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 两列自适应布局方案整理
  • 无服务器化是企业 IT 架构的未来吗?
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​secrets --- 生成管理密码的安全随机数​
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #、%和$符号在OGNL表达式中经常出现
  • #{}和${}的区别?
  • (ZT)一个美国文科博士的YardLife
  • (补)B+树一些思想
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (排序详解之 堆排序)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)Controller接口控制器详解(三)
  • (算法)Travel Information Center
  • (一)基于IDEA的JAVA基础12
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)jQuery 基础
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .jks文件(JAVA KeyStore)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core使用ef 6
  • .NET 材料检测系统崩溃分析
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET是什么