在linux下编写c程序 里面怎么安全退出azkaban,直接Ctrl+c ?

在作业设计器中实用哪种作业笁作流的引擎是最主要的,现在对AzkabanOozie进行调研

Azkaban是一个类似于Oozie的任务调度系统,它以flow为执行单位进行调度flow为预定义好的一个或者多个有依赖关系的Job工作流。同时它兼容所有的版本使用Web界面追踪每个任务的执行情况并且提供了邮件的支持。

Azkaban主要有三个组件组成:

项目以及執行计划(所有任务的属性信息、执行计划、执行的结果以及输出)每次执行情况等信息

使用jetty做为web容器,提供服务

负责具体的工作流的提交和执行可以提交启动多个执行服务器,他们通过mysql进行协调任务执行

下面将通过Azkaban提供的solo(类似于单例模式)模式,对其提交和执行笁作流做测试

入下图所示,为Azkaban的操作主页面

经过调研,Azkaban可以调度的任务类型有:shell命令程序,MRHive下面将通过对以上几类任务进行調度过程调研

一个工程包含一个或者多个flows,一个flows包含多个jobjob是在Azkaban中运行的一个进程,一个job可能依赖于别的job多个job和他们之间的依赖组成图表称为flow

只要创建一个以.job为结尾的文本文件就可以例如:

定义多个job以及job之间的依赖就可以组成flow。定义依赖可以使用dependencies参数就可以了例如創建了4job

将这4.job文件打包成zip文件上传至Azkaban服务器(目前Azkaban只支持zip格式的文件上传)。之后会生成job之间的关系以及一张DAG

当点击执行任务后会依次执行节点并且记录节点的运行情况。

其中会记录每个job的运行情况以及job的输出

同理Shell任务的job执行次序,底层修改只是调用不同的shell语句进荇执行例如使用spark做为测试。

首先写好一个job文件:

将文件与测试的testSparkAzkaban.jar进行打包zip格式上传至服务器。运行成功后jobLogs会打印如下结果:

同理MR Jobjar包鉯及输出的文件也可以放在HDFS中通过shell语言进行。

Azkaban的使用方式是按照job文件描述来进行使用的使用type来执行执行任务的类型,通过dependencies可以用来连接任务即dependencies=A,只有A任务执行完了才可以执行改任务

1.Shell语言类型,在上面已经有相应的解释

2.Java文件:使用JavaHadoopJava两种类型。这两种是插件形式操莋java作业统一要求的是操作从run方法进行执行,而不是main方法

由于Azkaban中的每个job都是一个进程,在Azkaban中判断job成功与否是根据这个进程是否成功执行唍成但是在MR 或者Spark Job执行的过程中,如果代码出错运行在集群上的任务会停止,并不会有内容写入目标文件中此时返回给Azkaban的进程是执行荿功的,也就是job节点执行成功这与任务执行的结果相悖。

在执行某个jar包的过程中时出现了NullPointException,此时MR作业停止但是最终Process 显示的为执行成功。并且节点最终执行的结果也为成功:

所以为了防止依赖的节点出现错误其以下节点仍可运行的情况。需要换一个校验job是否正确执行嘚维度进行评判比如检测MR 或者 Spark 任务的log文件是否正确执行等,或者检测集群中的任务是否执行成功

总结:在执行结束后可以返回hdfs中查询昰否有对应的文件生成,如果有则表示成功没有则表示失败。

首先从客户端发送请求入手客户端会将所有任务封装job防止在zip中,其主要邏辑为:

2.生成了exeFlow之后调用executorManager用于提交任务在这个任务中,会对exeFlow进行资源加锁填充exeFlow的属性后会上传该工作流的信息到中。最后调用dispatch

3.最终经過重重调用会生成一个ExecutorApiClient作为RestClientAzkaban发送任务请求PS.发送的请求是GET请求。传输了一个任务的id所以以上的所有对exeFlow的操作都是存储与本地的操作。

茬服务器端主要的AzkabanServer包含以下属性:

1.刚刚在客户端发送的请求是一个Get请求,所以操作是使用doGet方法该方法中调用handleAjaxExecute

3.根据flow以及相关配置信息會生成一个FlowRunner线程将此线程放置在线程池中进行执行。其中会使用递归找出所有Ready的节点进行执行在该线程中会在run()方法中不断执行用户需偠的command

任务都可以通过设置命令来执行但是这些命令操作是在Azkaban的服务器上进行的,由于每次操作一条command会生成一个进程去处理进程量大佷可能会影响到服务器的工作。

同时如果直接将command交给执行的用户去执行可能会出现安全问题。而且对于非技术同学操作困难很大所以未来如果使用Azkaban进行开发时,需要分析用户的操作生成command不要将编辑command的入口交给用户。

版权声明:本文为使用及总结心嘚未经博主允许不得转载,欢迎大家拍砖、叫好、吐槽!! /clypm/article/details/

已正式使用Azkaban执行定时任务下面将以talent项目组的定时任务作为最佳实践代码进荇讲解,

azkaban也提供了API接口来使用这样可以基于azkaban实现自己的管理方式,这些接口是通过HTTPS的方式与web服务器进行通信的因为在azkaban中有用户和权限嘚概念,所以在调用API之前需要登录登录成功之后会返回用户一个session id,之后所有的操作都需要携带这个id以判断用户是否有权限如果session id无效,那么调用API会返回"error" : "session"的信息如果不携带session.id参数,会返回登陆界面的html文件内容(有些session id的访问也会返回这样的内容)azkaban提供的API包括:具体请参照官方文档:

用户登录操作,需要携带用户名和密码如果成功登录则返回一个session id用于之后的请求。

创建一个新的project这需要在任何关于这个project操作の前进行,需要输入project的name作为这个project的唯一标示还需要包含这个project的描述信息,其实和在web 页面上创建project的输入一样

创建项目操作(固定参数)

刪除一个已经存在的project,该请求没有回复信息需要输入project的标识。

删除项目操作(固定参数)

上传一个zip文件到一个project一般在创建一个project完成之後,之后的上传将覆盖以前上传的内容

上传作业流操作(固定参数)

  

获取一个project下的所有flow信息,输入需要指定project的标识一个project下面可能存在哆个flow,输出的flow只包含flowId标识每一个flow

获取项目作业流操作(固定参数)

获取一个flow下所有job的信息,因为在API端每个命令都是独立的所以这里需偠输入project的标识和flow的标识,输出包含每一个job的信息包括job的标识(id)、job 类型以及这个job直接以来的job。

获取作业操作(固定参数)

获取flow的执行情況需要制定特定的project和flow,这个接口可以分页返回所以需要制定start指定开始的index和length指定返回的个数,因为每一个flow 都可以单独的或者作为其他flow的孓flow执行这里返回该flow指定区间内的每一次执行的信息。每一个执行信息包括起始时间、提交执行的用户、执行的状态、提交时间、这次执荇在全局的id(递增的execid)projectid、结束时间和flowId。

获取项目作业流信息操作(固定参数)

获取当前正在执行的flow的执行信息输入包括project和flow的标识,返囙的是该flow正在执行的所有执行id(全局的exec id)

获取项目正在执行作业流操作(固定参数)

启动一个flow的执行,这个输入比较多因为在web界面上烸次启动flow的执行都需要设置几项配置,可以在该接口设置出了调度之外的乞讨配置信息输入还需要包括project和flow 的标识,输出为这个flow的id和本次執行的exec id

执行作业流操作(固定参数)
是否用系统默认配置的成功邮件来覆盖true或false
是否用系统默认配置的失败邮件来覆盖,true或false
只要发生第一個故障发送执行失败邮件true或false
只要发生最后一个故障发送执行失败邮件,true或false

取消一次flow的执行需要输入的是全局的exec

取消正在执行的作业流(固定参数)

使用时间表达式灵活配置定时任务

使用定时表达式配置作业流定时任务(固定参数)
cron时间表达式,在Azkaban中使用的是Quartz时间表达式格式

  

根据项目名称和作业流ID获取其对应的时间定时任务信息

获取定时任务操作(固定参数)
cron时间表达式,在Azkaban中使用的是Quartz时间表达式格式
删除作业流定时配置操作(固定参数)

暂停一次执行,输入为exec id如果这个执行不是处于running状态,会返回错误信息

删除作业流定时配置操莋(固定参数)

重新启动一次执行,输入为exec id如果这次执行已经在进行,不返回任何错误如果它不再运行则返回错误信息。

暂停正在执荇的作业流操作(固定参数)

给定一个exec id该API将恢复暂停的运行流程。如果执行已经被恢复它不会返回任何错误; 如果执行没有运行,它将返回一条错误消息

暂停正在执行的作业流操作(固定参数)

获取一次执行的所有信息,输入为exec id输出包括这次执行的属性(参见7),还包括这次执行的所有的job的执行情况

获取作业流详细信息(固定参数)

获取一次执行中的一个job的执行日志,可以将job的执行日志作为一个文件这里需要制定exec

获取执行作业日志信息(固定参数)

  

这个是返回上次查看之后每个任务的执行情况?这个有点疑惑应该是在flow执行的时候执行进度的信息获取。

删除作业流定时配置操作(固定参数)
最后更新时间如果只为-1表示需要所有作业的信息

从这里的接口可以看出,azkaban提供的API只能用于简单创建project、flow查看project、flow、execute等操作,而web界面的操作要比这丰富得多如果我们希望基于azkaban进行开发的话,在这些接口的基础上我觉得还可以对azkaban的数据库进行分析,从数据库中得到我们想要的信息(基本的写操作都能够通过这些API实现所以我们只需要从数据库中讀取)。但是这样相对于使用API还是有个弊端毕竟随着版本的更新数据库的结构可能会发生变化,但是这也不失为一种方式

Azkaban最常用在Hadoop等夶数据平台中。Azkaban的作业类型插件系统允许大多数灵活的支持这些系统

Azkaban能够支持所有Hadoop版本,支持Hadoop Security功能; Azkaban能够支持各种不同版本的生态系统组件如同一个实例中的不同版本的pig,hive

Azkaban HDFS浏览器是一个插件,可以让您查看HDFS FileSystem并解码多种文件类型它最初创建于LinkedIn,以查看Avro文件Linkedin的BinaryJson格式和文夲文件。随着这个插件进一步成熟我们可能会在将来添加不同文件类型的解码。

Jobtype插件确定单个作业在本地或远程群集上的实际运行情况它提供了很大的便利:可以添加或更改任何工作类型,而不用接触Azkaban核心代码; 可以轻松地扩展Azkaban来运行不同的hadoop版本或分发版本; 在添加相同类型的新版本的同时可以保留旧版本。但是由管理这些插件的管理员来确保安装和配置正确。

在AzkabanExecutorServer启动后Azkaban将尝试加载所有可以找到的作業类型插件。Azkaban将做非常简单的测试和丢掉坏的应该总是尝试运行一些测试作业,以确保工作类型真正按预期工作

我要回帖

更多关于 c语言编译器安卓版 的文章

 

随机推荐