azkaban web-server源码解析
来源:互联网 发布:数控机床螺纹编程实例 编辑:程序博客网 时间:2024/05/19 14:37
注:请先看azkaban官方文档,然后安装好azkaban-web-server并熟悉使用流程后,再往下看
一、概述
azkaban主要用于hadoop相关job任务的调度,但也可以应用任何需要调度管理的任务,可以完全代替crontab。azkaban主要分为web-server(任务上传,管理,调度),executor-server(接受web-server的调度指令,进行任务执行)。
二、源码分析
1.数据表:
projects:工程
project_versions:工程版本信息已经上传文件的信息(MD5,chunk数等),每次上传都会覆盖上一个flow,并且版本号+1,但是数据表里不会做旧数据物理删除
project_permissions:工程权限配置信息
project_flows:工程下包含的flow信息
project_files:工程包含的上传文件内容,分成多个chunk存储
project_events:操作日志
project_properties:每个job的配置信息
triggers:调度配置,例如执行周期等。一个调度对应一个trigger,webServer启动的时候会加载所有的trigger到内存。
active_executing_flows:执行中的flow,执行完后会delete
executors:执行节点(服务器的ip端口号以及是否active)
execution_flows:可执行flow,包含了flow的一些信息以及执行配置信息(对应数据结构ExecutableFlow),其中executor_id是executors表的id
2.数据结构:
node的内部属性:
level: 距离起始节点的距离(多条路径的话取最大值),起始节点level为0
Edge的内部属性:
id:getSourceId() + ">>" + getTargetId()
flow的内部属性:
inEdges:key为jobName,value为节点的入边集合
outEdges:key为jobName,value为节点的出边集合
startNodes:起始Node集合,没有入边的谓之起始节点
endNodes:结束Node结合,没有出边的谓之结束节点
每个flow里能配置报警等信息
nodeDependencies:Map<String, Map<String, Edge>>,例如
{jobB_B:
{jobB_A:
{sourceId: jobB_A, targetId: jobB_B}
}
}
flowMap:key为root节点的jobName,value为flow
flowDependencies: key为jobName,value为jobName的集合(依赖的节点属于另一个flow)
schedule:
ExecutableFlow:可执行的flow,执行的单元,用户传递给executorManager,包含了执行信息,以及执行配置信息ExecutionOptions(成功失败邮件、并发控制等)
2.上传job:
(1)把压缩包存到/temp下
(2)解压压缩包到azkaban/temp下
(3)DirectoryFlowLoader加载azkaban/temp下的properties文件以及job文件
3-1:加载解析properties文件,properties有继承覆盖关系,子目录的properties里会继承覆盖父目录里的properties
3-2:加载解析job文件,对每个job文件新建一个Node,设置type(例如command),设置id(为jobName),设置
jobSource(为job文件相对路径,相对于azkaban/temp目录),更新缓存(设置jobPropsMap和nodeMap)
(4)job文件校验,校验http job callback
(5)解析job依赖关系,主要是建立数据结构nodeDependencies
(6)构造flow,从root节点开始递归建立(不被其他节点依赖的节点也就是出度为0的节点称之为root节点)。
(7)解析flow间的依赖,就是检查了下flow与flow之间是否有循环依赖
3.创建schedule:
(1)解析参数,构造ExecutionOptions(调度配置,就schedule配置页面那些参数)
(2)插入trigger表
2-1:判断调度合法性(是否非周期执行并且调度已过期)
2-2:
2-3:创建TriggerAction(触发器触发的动作,有很多实现类,比如ExecuteFlowAction,表示执行flow的动作)
0 0
- azkaban web-server源码解析
- azkaban源码解读
- 【转载】Azkaban源码分析
- azkaban源码解读
- chatOfPomelo web-server解析
- Azkaban源码阅读之AzkabanApplication
- Azkaban源码阅读之CachingFlowManager
- Azkaban源码阅读之AzkabanApplication
- Azkaban源码阅读之CachingFlowManager
- 一次azkaban源码阅读经历
- 又一篇azkaban源码分析
- 启动azkaban-web示例步骤
- Azkaban
- 【Web容器】Tomcat源码分析(2)-server.xml文件的加载与解析
- web-servlet servlet源码解析
- kpush源码解析---服务端(alloc server)
- Zookeeper源码解析之Server启动
- Golang 1.4 net/rpc server源码解析
- 正则表达式学习-网站
- C#之正则表达式
- 会“遗传”的五大坏习惯,为了孩子改掉吧!
- 2016.01.27--html5第六天之css
- 01-linux指令学习记录
- azkaban web-server源码解析
- unity3d出版本时出现的图片失真(图片模糊)
- HDU1004
- HDU——2067小兔的棋盘(卡特兰数/DP)
- POJ2251 三维的bfs
- 3.6 常用查询的例子
- ubuntu14.04 安装xelatex以及实现中文输入
- 考考你的页面跳转
- 小结