azkaban:azkaban-common:Project

2018-01-31  本文已影响731人  raincoffee

azkaban源码:azkaban-common:Project

由于种种原因,要基于azkaban二次开发一个适合自身的调度框架。所以进行源码的学习。方便后续开发。

源码构建

Project

该模块主要包含了project的一系列操作。

假设我们现在有一个项目的zip文件。如何解决如下问题:

当然这里面也包含了user,permission等概念。

首先 我们来看一下项目创建的流程。这里面只是创建project。还没有上传zip。

版面 11

接下来 我们来看一下项目上传的流程。==解析flow等信息都是在上传的过程中完成的。==

版面 12

最后看一下其他查询请求的处理。

handleGet

基本上类似上述过程。再次不做重复。

通过上述的表述,我们可以发现。主要的project处理的的逻辑都集中在ProjectManager上。下面我们将详细的学习分析ProjectManager。

ProjectManager

project层次上的管理。单例模式。

==主要包含各种姿势的project的查询设置创建等。属于对外暴漏提供服务的类==。里面内部实现是由AzkabanProjectLoader,ProjectLoader等类提供服务实现的。

getProjectNames()
getUserProjects()
getGroupProjects()
getUserProjectsByRegex()
getProjects()
getProjectsByRegex()
isActiveProject()
getProject()
createProject()
purgeProject()
removeProject()
updateProjectDescription()
...

整个调用的层次结构大概如下:

版面 8

AzkabanProjectLoader

Handles the downloading and uploading of projects.

主要处理project的上传和下载。

核心方法==uploadProject==过程。

ProjectLoader

定义了各种接口。其应该有各种实现,默认使用jdbcprojectimpl实现。

JdbcProjectImpl

ProjectLoader的一种实现,This class implements ProjectLoader using new azkaban-db code to allow DB failover. 单例模式。

其主要功能是提供存储project各种信息的持久化方法。以及这新信息获取的方法。

具体的方法:

StorageManager

StorageManager manages and coordinates all interactions with the Storage layer. This also includes bookkeeping like updating DB with the new versionm, etc

azkaban提供了多种存储层的实现方式,包括database,hdfs,localfile等。也可以自定义自己的存储层。默认使用的是database进行存储。

其中这里面最重要的对外的类应该是==StorageManager==。主要提供了uploadproject和getprojectfile等方法。

FlowLoaderFactory

Factory class to generate flow loaders.

flowLoader

Interface to load project flows.

包含以下重要接口:

更直白一点,就是提供如何从一个project中构建flow的功能。

根据不同版本,flowloader提供了两种实现方式。

版面 4

NodeBeanLoader

其实该部分 应该是如何构建flow,包括node,什么的。最终对外输出的是==FlowLoaderUtils==。里面包含了yaml方式的构建和一些公用的方法。

版面 3

数据结构

AZ.Storage

Storage:
/**
 * The Azkaban Storage interface would facilitate getting and putting objects into a storage
 * mechanism of choice. By default, this is set to the MySQL database. However, users can have the
 * ability to choose between multiple storage types in future.
 *
 * This is different from storing Azkaban state in MySQL which would typically be maintained in a
 * different database.
 *
 * Note: This is a synchronous interface.
 */
版面 7

Az.DB

该模块主要是azkaban db相关代码。包含以下功能。

如需扩展其他链接,需要继承==AzkabanDataSource==。实现相应功能。另外,对外使用 主要使用AzkabanDataSource 和DatabaseOperator两个类。

版面 5
上一篇下一篇

猜你喜欢

热点阅读