Azkaban开源任务调度程序(使用篇)
azkaban shell 参数

azkaban shell 参数Azkaban是一个用于构建和管理大规模批处理和在线数据处理工作流的开源软件。
作为一个流行的任务调度和工作流管理工具,Azkaban 提供了一种方便的方式来定义、调度和监控任务的执行。
这篇文章将重点介绍Azkaban Shell的参数和用法。
Azkaban Shell是一个基于命令行的工具,允许用户通过命令行界面与Azkaban进行交互。
用户可以使用Azkaban Shell执行各种任务,包括创建项目、上传和调度工作流、管理任务执行等。
首先,让我们来了解一些常用的Azkaban Shell参数。
1. -url-url参数用于指定Azkaban Web服务器的URL。
通过提供正确的URL,Azkaban Shell将能够与Web服务器进行通信并执行请求操作。
例如,可以使用以下命令指定URL:```bashazkaban.sh -url http://localhost:8081```2. -user-user参数用于指定登录到Azkaban的用户名。
通过提供正确的用户名,Azkaban Shell将使用该用户身份进行操作。
例如,可以使用以下命令指定用户名:```bashazkaban.sh -user myusername```3. -password-password参数用于指定登录到Azkaban的密码。
通过提供正确的密码,Azkaban Shell将验证用户身份并执行请求操作。
请注意,为了安全起见,不建议在脚本中直接指定密码。
相反,您可以在运行脚本时从命令行提示用户输入密码,或者通过其他安全方式提供密码。
例如,可以使用以下命令指定密码:```bashazkaban.sh -password mypassword```4. -execid-execid参数用于指定任务执行的执行ID。
通过提供正确的执行ID,Azkaban Shell将能够查看和管理特定任务执行的状态和输出。
azkaban 表结构-概述说明以及解释

azkaban 表结构-概述说明以及解释1.引言1.1 概述概述是一篇文章的开篇部分,用于向读者介绍主题的背景和重要性。
对于本篇文章而言,概述部分需要介绍azkaban表结构的概念和作用。
azkaban是一个开源的批量工作流任务调度器,用于管理和执行大型数据处理任务。
在azkaban系统中,表结构扮演了重要的角色,用于存储和组织任务、工作流和调度相关的信息。
azkaban的表结构是根据系统需求设计和构建的,它描述了任务、工作流、调度器和用户之间的关系和属性。
这些表结构包括了各种实体的定义和属性,如项目、任务、执行和用户等。
azkaban表结构的设计原则是基于高效、可扩展和易使用的目标。
通过合理的表结构设计,azkaban能够支持大规模任务调度和管理,同时提供灵活的可配置性和易于扩展的特性。
概述部分的主要目的是让读者了解azkaban表结构的基本概念和作用,为后续内容提供必要的背景。
在本文的剩余部分,我们将深入探讨azkaban表结构的组成和设计原则,并分析其在实际应用中的重要性和优势。
1.2 文章结构文章结构部分的内容应该包含以下信息:文章的结构对于读者来说是非常重要的,它可以帮助读者更好地理解文章的内容和逻辑关系。
本文的结构分为三个主要部分:引言、正文和结论。
引言部分主要介绍了本文的背景和目的。
在本文中,我们将重点讨论azkaban表结构的相关内容。
首先,我们将对azkaban进行定义,然后介绍azkaban表结构的组成和设计原则。
正文部分是本文的主体,将详细介绍azkaban表结构的相关内容。
首先,我们将对azkaban进行定义,解释它的作用和功能。
然后,我们将介绍azkaban表结构的组成,包括各个表的名称、字段和关系。
最后,我们将介绍azkaban表结构的设计原则,包括数据一致性、性能优化等方面的考虑。
结论部分总结了整篇文章的主要内容,并提出了azkaban表结构的重要性、优势以及未来的发展趋势和展望。
使用azkaban进行任务调度实验原理

使用azkaban进行任务调度实验原理Azkaban是一个用于在特定工作流内以特定顺序运行一组工作和流程的工具。
其基本原理是通过KV文件(properties)格式建立任务之间的依赖关系,并通过易于使用的Web用户界面来维护和跟踪工作流。
使用Azkaban进行任务调度实验的基本原理包括以下几个步骤:1. 定义工作流:首先,需要定义一个工作流,明确各个任务之间的依赖关系和执行顺序。
这可以通过创建KV文件(properties)格式的任务配置文件来完成。
2. 创建任务:在Azkaban中,每个任务都由一个独立的配置文件定义。
这些配置文件通常包含任务的输入、输出、参数等信息。
通过在配置文件中指定任务之间的依赖关系,可以确保任务按照正确的顺序执行。
3. 调度任务:Azkaban提供了一个Web用户界面,用于管理和调度任务。
用户可以通过该界面创建、编辑和删除任务,并设置任务的执行时间、频率等调度参数。
4. 执行任务:Azkaban将根据配置文件中的任务依赖关系和工作流顺序自动执行任务。
在执行过程中,Azkaban会监控任务的执行状态,并在必要时重新调度或处理异常情况。
5. 监控和日志:Azkaban提供了对工作流执行过程的实时监控功能,用户可以通过Web界面查看任务的执行状态、输出和日志等信息。
这有助于用户了解实验的进展和调试问题。
6. 结果处理:一旦所有任务都成功执行完毕,用户可以通过Azkaban的Web界面获取最终的结果。
这些结果通常包括任务的输出文件、统计数据等,用户可以根据需要进行进一步的分析和处理。
总之,使用Azkaban进行任务调度实验的基本原理是通过定义工作流、创建任务、调度任务、执行任务、监控和日志以及结果处理等步骤,实现自动化、可重复和可扩展的任务调度实验。
azkaban调度原理

azkaban调度原理一、概述azkaban是一个开源的工作流调度系统,可以方便地管理和调度大规模的批处理作业。
它提供了一个易于使用的Web界面,可以让用户轻松地创建、调度和监控工作流。
本文将详细介绍azkaban的调度原理。
二、架构azkaban的架构由三个主要组件组成:Executor、Web Server和数据库。
Executor是执行器,负责实际执行工作流中的任务;Web Server是Web服务器,提供用户接口和管理界面;数据库存储所有与工作流相关的信息。
三、工作流1. 定义azkaban中的工作流是由一组任务(Job)以特定顺序组成的有向无环图(DAG)。
每个任务都有一个唯一标识符和一些属性,例如命令行参数、依赖关系等。
2. 执行过程当一个工作流被提交后,azkaban会将其解析为一个DAG,并将其分解为一系列独立的任务。
然后,它会按照拓扑排序算法依次执行这些任务。
如果某个任务失败,则整个工作流将被标记为失败,并停止执行。
四、调度器1. 定义azkaban中的调度器(Scheduler)负责管理所有待执行和正在执行的工作流。
它会周期性地扫描数据库,查找需要执行的工作流,并将其提交给Executor执行。
2. 调度策略azkaban中的调度策略是基于优先级的。
当多个工作流同时需要执行时,调度器会按照优先级从高到低的顺序依次提交它们。
如果两个工作流具有相同的优先级,则调度器会根据它们的提交时间进行排序。
3. 任务依赖在azkaban中,任务之间可以有依赖关系。
当一个任务被提交时,调度器会检查它所依赖的所有任务是否已经完成。
如果有未完成的任务,则该任务将被暂停,并等待其依赖项完成后再执行。
五、Executor1. 定义azkaban中的Executor是一个运行在独立进程中的Java程序,负责实际执行工作流中的任务。
每个Executor可以同时运行多个任务,并提供了一些高级功能,例如失败重试、超时控制等。
azkaban源码编译

azkaban源码编译Azkaban是一个开源的工作流调度系统,用于管理和调度大规模的批处理和定时任务。
它提供了一个直观的用户界面,使用户能够轻松地创建、监控和管理工作流。
Azkaban的源代码是开放的,这意味着用户可以自由地查看、修改和编译它。
编译Azkaban源码是一个相对复杂的过程,需要一些基本的编程知识和工具。
下面我将简要介绍一下Azkaban源码的编译过程。
首先,你需要准备好编译Azkaban所需的环境。
Azkaban是用Java 编写的,所以你需要安装Java开发工具包(JDK)。
确保你的JDK版本符合Azkaban的要求。
此外,你还需要安装Apache Maven,这是一个用于构建Java项目的工具。
一旦你准备好了环境,你可以开始下载Azkaban的源代码。
你可以在Azkaban的官方网站上找到源代码的下载链接。
下载完成后,解压缩源代码文件到你的工作目录。
接下来,你需要使用Maven来构建Azkaban。
打开命令行终端,进入到源代码所在的目录。
运行以下命令来构建Azkaban:```mvn clean package```这个命令会清理之前的构建结果,并重新构建Azkaban。
这个过程可能需要一些时间,具体取决于你的计算机性能和网络速度。
一旦构建完成,你可以在目录中找到生成的Azkaban二进制文件。
你可以将这些文件部署到你的服务器上,并按照Azkaban的文档进行配置和使用。
编译Azkaban源码可能会遇到一些问题,比如依赖项缺失或编译错误。
在这种情况下,你可以参考Azkaban的官方文档或在开发者社区中寻求帮助。
Azkaban的开发者社区非常活跃,你可以在论坛或邮件列表中提问并获得解答。
编译Azkaban源码是一个有挑战性但也非常有意义的任务。
通过编译源码,你可以更深入地了解Azkaban的内部工作原理,并且可以根据自己的需求进行定制和扩展。
同时,你也可以为Azkaban的开发做出贡献,帮助改进和完善这个开源项目。
Hadoop作业流调度引擎Oozie与Azkaban

Oozie在Hadoop生态系统中的位置
பைடு நூலகம்
认识Oozie
Oozie基本架构
Oozie 使用方式
Oozie CLI JAVA API REST API WEB UI(只读)
Oozie基本概念
作业流由一组行为节点(Hadoop MR作业、Hive 作业等)构成,且这些节点通过控制流节点相连 ;
根据需要对作业进行调度
按周期调度 定时调度……
支持容错与报警
可视化作业流运行过程
自己构建作业流:crontab+shell
//mapreduce_job.sh cmd=“hadoop jar example1.jar xxx –D …..” $cmd code=$? while [ $code != 0 ]; do echo “run job failed, run submit……" $cmd done
方法:使用Coordinator作业,对workflow进行控制
修改job.properties,增加以下一项:oozie.coord.application.path,设置为 Coordinator作业存放目录 编写coord.xml如下:
实例3:编写Bundle作业
在实例2基础上,引入一个新的问题:如何有多个Coordination 作业,如何统一管理和调度?
支持Hadoop map-reduce, HDFS, Pig, SSH, HTTP, eMail等;
可设置重试次数。
Oozie 控制流
Coordinator
定期执行一个工作流; 数据准备完毕后执行一个工作流。
一个简单的实例
实例1:workflow作业编写流程
Hadoop下运行Wordcount: bin/hadoop jar hadoop-*-examples.jar wordcount /input /output 使用Oozie:
基于开源项目Azkaban的二次开发

基于开源项目Azkaban的二次开发作者:廖锴宇卢致源余秋明来源:《电脑知识与技术》2018年第19期摘要:Azkaban,一个工作在大数据Hadoop领域的主流工作流调度器之一。
为更好地使用该任务调度系统完成一系列任务,要对其源码研究并进行二次开发以实现自己所需要的功能。
该文首先对开源项目Azkaban任务调度系统进行分析,接着在其原生系统上二次开发并新增实现了四个功能:任务一键重做功能、默认参数功能、数据时间显示功能、任务配置方式改良。
经测试,四个功能模块都已良好实现。
关键词:大数据;开源项目;二次开发;Azkaban;任务调度系统中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)19-0087-02大数据中每一条数据必须要经过采集,传输,计算,展示等过程才能挖掘出利用到其价值。
那么如何把这些步骤连起来使之有序稳定的工作亦成了问题的关键。
故需要一个好的调度平台来进行各种任务的调度管理。
Azkaban,就是这样一个在Hadoop领域的主流的工作流调度器之一。
Azkaban是由Linkedin开源的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。
但是想要用好Azkaban这一任务调度器,还必须要对其源码研究并对其进行二次开发以实现自己所要的功能。
1 系统分析Azkaban系统具体划分为web server和executor server两大模块。
Web server功能模块主要有登录、项目管理、项目创建、上传任务、任务定时、执行任务、查看任务执行情况、查看历史任务等功能,如图1所示。
Executor server功能包括调度hadoop任务、调度shell脚本任务、调度hive任务、任务负载均衡、单点故障等,如图2所示意。
2 新功能设计2.1 任务重做功能设计作为一个任务调度系统,系统维持着很多的任务调度,那么这些任务必然有部分任务会出现异常或者失败。
Azkaban介绍+安装部署+实战案例

Azkaban介绍+安装部署+实战案例Azkaban介绍什么是azkaban?1、⼯作流的作业调度系统2、通过k、v指令写法描述⼯作流节点3、可以通过web界⾯去管理⼯作流Azkaban安装部署2.3.1 准备⼯作Azkaban Web服务器azkaban-web-server-2.5.0.tar.gzAzkaban执⾏服务器azkaban-executor-server-2.5.0.tar.gzMySQL⽬前azkaban只⽀持 mysql,需安装mysql服务器,本⽂档中默认已安装好mysql服务器,并建⽴了 root⽤户,密码 123456.下载地址:http://azkaban.github.io/downloads.html2.3.2 安装将安装⽂件上传到集群,最好上传到安装 hive、sqoop的机器上,⽅便命令的执⾏在当前⽤户⽬录下新建 azkabantools⽬录,⽤于存放源安装⽂件.新建azkaban⽬录,⽤于存放azkaban运⾏程序2.3.3 azkaban web服务器安装解压azkaban-web-server-2.5.0.tar.gz命令:tar –zxvf azkaban-web-server-2.5.0.tar.gz将解压后的azkaban-web-server-2.5.0 移动到 azkaban⽬录中,并重新命名 webserver命令:mv azkaban-web-server-2.5.0 ../azkabancd ../azkabanmv azkaban-web-server-2.5.0 server2.3.4 azkaban 执⾏服器安装解压azkaban-executor-server-2.5.0.tar.gz命令:tar –zxvf azkaban-executor-server-2.5.0.tar.gz将解压后的azkaban-executor-server-2.5.0 移动到 azkaban⽬录中,并重新命名 executor命令:mv azkaban-executor-server-2.5.0 ../azkabancd ../azkabanmv azkaban-executor-server-2.5.0 executorazkaban脚本导⼊解压: azkaban-sql-script-2.5.0.tar.gz命令:tar –zxvf azkaban-sql-script-2.5.0.tar.gz将解压后的mysql 脚本,导⼊到mysql中:进⼊mysqlmysql> create database azkaban;mysql> use azkaban;Database changedmysql> source /root/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql;2.3.5 创建SSL配置参考地址: /display/JETTY/How+to+configure+SSL命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA运⾏此命令后,会提⽰输⼊当前⽣成 keystore的密码及相应信息,输⼊的密码请劳记,信息如下:输⼊keystore密码:再次输⼊新密码:您的名字与姓⽒是什么?[Unknown]:您的组织单位名称是什么?[Unknown]:您的组织名称是什么?[Unknown]:您所在的城市或区域名称是什么?[Unknown]:您所在的州或省份名称是什么?[Unknown]:该单位的两字母国家代码是什么[Unknown]: CNCN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确吗?[否]: y输⼊<jetty>的主密码(如果和 keystore 密码相同,按回车):再次输⼊新密码:完成上述⼯作后,将在当前⽬录⽣成 keystore 证书⽂件,将keystore 考贝到 azkaban web服务器根⽬录中.如:cp keystore azkaban/webserver2.3.6 配置⽂件注:先配置好服务器节点上的时区1、先⽣成时区配置⽂件Asia/Shanghai,⽤交互式命令 tzselect 即可2、拷贝该时区⽂件,覆盖系统本地时区配置cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeazkaban web服务器配置进⼊azkaban web服务器安装⽬录 conf⽬录v 修改azkaban.properties⽂件命令vi azkaban.properties内容说明如下:#Azkaban Personalization Settings=Test #服务器UI名称,⽤于服务器上⽅显⽰的名字bel=My Local Azkaban #描述azkaban.color=#FF3601 #UI颜⾊azkaban.default.servlet.path=/index #web.resource.dir=web/ #默认根web⽬录default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海默认为美国#Azkaban UserManager classuser.manager.class=er.XmlUserManager #⽤户权限管理默认类user.manager.xml.file=conf/azkaban-users.xml #⽤户配置,具体配置参加下⽂#Loader for projectsexecutor.global.properties=conf/global.properties # global配置⽂件所在位置azkaban.project.dir=projects #database.type=mysql #数据库类型mysql.port=3306 #端⼝号mysql.host=hadoop-001 #数据库连接IPmysql.database=azkaban #数据库实例名er=root #数据库⽤户名mysql.password=123456 #数据库密码mysql.numconnections=100 #最⼤连接数# Velocity dev modevelocity.dev.mode=false# Jetty服务器属性.jetty.maxThreads=25 #最⼤线程数jetty.ssl.port=8443 #Jetty SSL端⼝jetty.port=8081 #Jetty端⼝jetty.keystore=keystore #SSL⽂件名jetty.password=123456 #SSL⽂件密码jetty.keypassword=123456 #Jetty主密码与 keystore⽂件相同jetty.truststore=keystore #SSL⽂件名jetty.trustpassword=123456 # SSL⽂件密码# 执⾏服务器属性executor.port=12321 #执⾏服务器端⼝# 邮件设置mail.sender=xxxxxxxx@ #发送邮箱mail.host= #发送邮箱smtp地址er=xxxxxxxx #发送邮件时显⽰的名称mail.password=********** #邮箱密码job.failure.email=xxxxxxxx@ #任务失败时发送邮件的地址job.success.email=xxxxxxxx@ #任务成功时发送邮件的地址lockdown.create.projects=false #cache.directory=cache #缓存⽬录v azkaban 执⾏服务器配置进⼊执⾏服务器安装⽬录conf,修改azkaban.propertiesvi azkaban.properties#Azkabandefault.timezone.id=Asia/Shanghai #时区# Azkaban JobTypes 插件配置azkaban.jobtype.plugin.dir=plugins/jobtypes #jobtype 插件所在位置#Loader for projectsexecutor.global.properties=conf/global.propertiesazkaban.project.dir=projects#数据库设置database.type=mysql #数据库类型(⽬前只⽀持mysql)mysql.port=3306 #数据库端⼝号mysql.host=hadoop-001 #数据库IP地址mysql.database=azkaban #数据库实例名er=root #数据库⽤户名mysql.password=123456 #数据库密码mysql.numconnections=100 #最⼤连接数# 执⾏服务器配置executor.maxThreads=50 #最⼤线程数executor.port=12321 #端⼝号(如修改,请与web服务中⼀致)executor.flow.threads=30 #线程数v ⽤户配置进⼊azkaban web服务器conf⽬录,修改azkaban-users.xmlvi azkaban-users.xml增加管理员⽤户<azkaban-users><user username="azkaban" password="azkaban" roles="admin"groups="azkaban" /><user username="metrics" password="metrics" roles="metrics"/><user username="admin" password="admin" roles="admin,metrics" /><role name="admin" permissions="ADMIN" /><role name="metrics" permissions="METRICS"/></azkaban-users>2.4启动2.4.1 web服务器在azkaban web服务器⽬录下执⾏启动命令bin/azkaban-web-start.sh注:在web服务器根⽬录运⾏2.4.2执⾏服务器在执⾏服务器⽬录下执⾏启动命令bin/azkaban-executor-start.sh ./注:只能要执⾏服务器根⽬录运⾏启动完成后,在浏览器(建议使⽤⾕歌浏览器)中输⼊https://服务器IP地址:8443 ,即可访问azkaban服务了.在登录中输⼊刚才新的户⽤名及密码,点击 login. Command类型单⼀job⽰例1、创建job描述⽂件以.job后缀结尾vi command.job#command.jobtype=commandcommand=echo 'hello'2、将job资源⽂件打包成zip⽂件zip command.job3、通过azkaban的web管理平台创建project并上传job压缩包⾸先创建project上传zip包4、启动执⾏该job2.5.2 Command类型多job⼯作流flow1、创建有依赖关系的多个job描述第⼀个job:foo.job# foo.jobtype=commandcommand=echo foo第⼆个job:bar.job依赖foo.job# bar.jobtype=commanddependencies=foocommand=echo bar2、将所有job资源⽂件打到⼀个zip包中3、在azkaban的web管理界⾯创建⼯程并上传zip包4、启动⼯作流flow2.5.3 HDFS操作任务1、创建job描述⽂件#fs.jobtype=commandcommand=echo "start execute"command.1=/var/local/hadoop/bin/hadoop fs -mkdir /azkabancommand.2=/var/local/hadoop/bin/hadoop fs -put /root/zk.log /azkabancommand后⾯可以加上⼀个数字!表现形式为command.N表⽰可以执⾏多个command命令操作2、将job资源⽂件打包成zip⽂件3、通过azkaban的web管理平台创建project并上传job压缩包4、启动执⾏该job2.5.4 MAPREDUCE任务Mr任务依然可以使⽤command的job类型来执⾏1、创建job描述⽂件,及mr程序jar包(⽰例中直接使⽤hadoop⾃带的example jar)# mrwc.jobtype=commandcommand=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop jar hadoop-mapreduce-examples-2.6.1.jar wordcount /wordcount/input /wordcount/azout 2、将所有job资源⽂件打到⼀个zip包中3、在azkaban的web管理界⾯创建⼯程并上传zip包4、启动job2.5.5 HIVE脚本任务l 创建job描述⽂件和hive脚本Hive脚本: test.sqluse default;drop table aztest;create table aztest(id int,name string) row format delimited fields terminated by ',';load data inpath '/aztest/hiveinput' into table aztest;create table azres as select * from aztest;insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest;Job描述⽂件:hivef.job# hivef.jobtype=commandcommand=/home/hadoop/apps/hive/bin/hive -f 'test.sql'2、将所有job资源⽂件打到⼀个zip包中3、在azkaban的web管理界⾯创建⼯程并上传zip包4、启动job。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
登录
https://localhost:8443
注意是https,采用的是jetty ssl链接。
输入账号密码azkaban/azkanban(如果你之前没有更改的话)
首页
首页有四个菜单
∙projects:最重要的部分,创建一个工程,所有flows将在工程中运行。
∙scheduling:显示定时任务
∙executing:显示当前运行的任务
∙history:显示历史运行任务
主要介绍projects部分
首先创建一个工程,填写名称和描述,比如o2olog。
o2olog工程
Flows:工作流程,有多个job组成
Permissions:权限管理
Project Logs:工程日志
创建工程:
创建之前我们先了解下之间的关系,一个工程包含一个或多个flows,一个flow包含多个job。
job是你想在azkaban中运行的一个进程,可以是简单的linux命令,可是java程序,也可以是复杂的shell脚本,当
然,如果你安装相关插件,也可以运行插件。
一个job可以依赖于另一个job,这种多个job和它们的依赖组成的图表叫做flow。
job创建
创建job很简单,只要创建一个以.job结尾的文本文件就行了,例如我们创建一个工作,用来将日志数据导入hive中(关于大数据方面的东西,不在重复,可以理解为,将日志所需数据导入的mysql中),我们创建o2o_2_hive.job
type=command
command=echo "data 2 hive"
一个简单的job就创建好了,解释下,type的command,告诉azkaban用unix原生命令去运行,比如原生命令或者shell脚本,当然也有其他类型,后面说。
一个工程不可能只有一个job,我们现在创建多个依赖job,这也是采用azkaban的首要目的。
flows创建
我们说过多个jobs和它们的依赖组成flow。
怎么创建依赖,只要指定dependencies参数就行了。
比如导入hive前,需要进行数据清洗,数据清洗前需要上传,上传之前需要从ftp获取日志。
定义5个job:
1.o2o_2_hive.job:将清洗完的数据入hive库
2.o2o_clean_data.job:调用mr清洗hdfs数据
3.o2o_up_2_hdfs.job:将文件上传至hdfs
4.o2o_get_file_ftp1.job:从ftp1获取日志
5.o2o_get_file_fip2.job:从ftp2获取日志
依赖关系:
3依赖4和5,2依赖3,1依赖2,4和5没有依赖关系。
o2o_2_hive.job
type=command
# 执行sh脚本,建议这样做,后期只需维护脚本就行了,azkaban定义工作流程command=sh /job/o2o_2_hive.sh
dependencies=o2o_clean_data
o2o_clean_data.job
type=command
# 执行sh脚本,建议这样做,后期只需维护脚本就行了,azkaban定义工作流程command=sh /job/o2o_clean_data.sh
dependencies=o2o_up_2_hdfs
o2o_up_2_hdfs.job
type=command
#需要配置好hadoop命令,建议编写到shell中,可以后期维护command=hadoop fs -put /data/*
#多个依赖用逗号隔开
dependencies=o2o_get_file_ftp1,o2o_get_file_ftp2
o2o_get_file_ftp1.job
type=command
command=wget "ftp://file1" -O /data/file1
o2o_get_file_ftp2.job
type=command
command=wget "ftp:file2" -O /data/file2
可以运行unix命令,也可以运行python脚本(强烈推荐)。
将上述job打成zip包。
ps:为了测试流程,我将上述command都改为echo +相应命令
上传:
上传
上传完成
点击o2o_2_hive进入流程,azkaban流程名称以最后一个没有依赖的job定义的。
流程
右上方是配置执行当前流程或者执行定时流程。
流程执行
Flow view:流程视图。
可以禁用,启用某些job Notification:定义任务成功或者失败是否发送邮件
Failure Options:定义一个job失败,剩下的job怎么执行Concurrent:并行任务执行设置
Flow Parametters:参数设置。
1.执行一次
设置好上述参数,点击execute。
执行成功
绿色代表成功,蓝色是运行,红色是失败。
可以查看job运行时间,依赖和日志,点击details可以查看各个job运行情况。
jobList
2.定时执行
定时执行
这时候注意到cst了吧,之前需要将配置中时区改为Asia/shanghai。
可以选择"天/时/分/月/周"等执行频率。
定时任务
可以查看下次执行时间。
其他job配置选项
∙可以定义job依赖另一个flow,配置
type=flow
=fisrt_flow
∙可以设置每个job中子命令
type=command
command=echo "hello"
command.1=echo "world"
∙可以配置job失败重启次数,及间隔时间,比如,上述ftp获取日志,我可以配置重试12次,每隔5分钟一次。
type=command
command=wget "ftp://file1" -O /data/file1
retries=12
#单位毫秒
retry.backoff=300000
azkaban还有很多强大的功能,如它开放了相关api,我们将它可以嵌入到自己的app等等,有兴趣的朋友可以研究。