Azkaban开源任务调度程序(使用篇)

合集下载

azkaban shell 参数

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 表结构-概述说明以及解释

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进行任务调度实验原理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调度原理一、概述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所需的环境。

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

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的二次开发

基于开源项目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介绍什么是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。

Hadoop-Azkaban作业调度

Hadoop-Azkaban作业调度

Hadoop-Azkaban作业调度1.概述 在调度 Hadoop 的相关作业时,有以下⼏种⽅式:基于 Linux 系统级别的 Crontab。

Java 应⽤级别的 Quartz。

第三⽅的调度系统。

⾃⾏开发 Hadoop 应⽤调度系统。

对于前两种,使⽤ Crontab 和 Quartz 是基本可以满⾜业务需求,但有其弊端。

在 Job 数量庞⼤的情况下,Crontab 脚本的编写,变得异常复杂。

其调度的过程也不能透明化,让管理变得困难。

Quartz 虽然不⽤编写脚本,实现对应的调度 API 即可,然其调度过程不透明,不涵盖 Job 运⾏详情。

需⾃⾏开发其功能。

因⽽,第三⽅的调度系统便应运⽽⽣了。

在《》⼀⽂中,介绍第三⽅调度系统之间的差异。

这⾥笔者就不多赘述了。

本篇博⽂,笔者给⼤家介绍 Azkaban 的相关使⽤⼼得,以及在使⽤中遇到的种种问题和解决思路。

2.内容 Azkaban 托管在 Github 上,属于开源产品。

它由以下⼏部分组成:Web ServerExecutor ServerMySQLPlugins(HDFS,JobType,HadoopSecurityManager,JobSummary,PigVisualizer,Reportal) 其各个模块的功能,在《》中有对应的介绍,这⾥就不多赘述了。

2.1 How to use 在介绍完其核⼼模块后,我们如何使⽤这样⼀个调度系统,来调度我们所编写好的应⽤。

下⾯,笔者将详细为⼤家介绍如何来完成这部分⼯作。

⾸先,Azkaban 是⼀个独⽴的系统,不需要依赖 Hadoop 集群环境。

我们可以⽤单独的节点来构建这样⼀个调度系统。

但是根据系统本⾝的需要,依赖以下环境:JDKMySQL 在准备完成以上依赖环境后,我们可以构建这样⼀个调度系统。

在[]上下载⼆进制安装包。

官⽹更新的⼆进制安装包⽐ Github 发布的较低,若需要使⽤新版本的 Azkaban ,可在 Github 上下载。

基于Azkaban的任务定时调度实践

基于Azkaban的任务定时调度实践

基于Azkaban的任务定时调度实践本⽂由云+社区发表作者:maxluo⼀、Azkaban介绍Azkaban是LinkedIn开源的任务调度框架,类似于JavaEE中的JBPM和Activiti⼯作流框架。

Azkaban功能和特点:1,任务的依赖处理。

2,任务监控,失败告警。

3,任务流的可视化。

4,任务权限管理。

常见的任务调度框架有Apache Oozie、LinkedIn Azkaban、Apache Airflow、Alibaba Zeus,由于Azkaban具有轻量可插拔、友好的WebUI、SLA告警、完善的权限控制、易于⼆次开发等优点,也得到了⼴泛应⽤。

下图为Azkaban的架构图,主要有三部分组成:Azkaban Webserver、Azkaban Executor、 DB。

Webserver主要负责权限验证、项⽬管理、作业流下发等⼯作;Executor主要负责作业流/作业的具体执⾏以及搜集执⾏⽇志等⼯作;MySQL⽤于存储作业/作业流的执⾏状态信息。

图中所⽰的是单executor场景,但是实际应⽤中⼤部分的项⽬使⽤的都是多executor场景。

1.1 作业流执⾏过程Azkaban webserver会根据搜集起来的Executor的状态选择⼀个合适的任务运⾏节点,并将任务推送给该节点,管理并运⾏该⼯作流的所有job。

1.2 部署模式Azkaban⽀持三种部署模式,分别⽤于学习和测试,⾼可⽤部署⽅式。

solo-server模式DB使⽤的是⼀个内嵌的H2,Web Server和Executor Server运⾏在同⼀个进程⾥。

这种模式包含Azkaban的所有特性,但⼀般⽤来学习和测试。

two-server模式DB使⽤的是MySQL,MySQL⽀持master-slave架构,Web Server和Executor Server运⾏在不同的进程中。

分布式multiple-executor模式DB使⽤的是MySQL,MySQL⽀持master-slave架构,Web Server和Executor Server运⾏在不同机器上,且有多个Executor Server。

Azkaban简介及使用

Azkaban简介及使用

Azkaban简介及使⽤⼀、Azkaban概述Azkaban是⼀个分布式⼯作流管理器,在LinkedIn上实现,以解决Hadoop作业依赖性问题。

我们有需要按顺序运⾏的⼯作,从ETL⼯作到数据分析产品。

特点:1)给⽤户提供了⼀个⾮常友好的可视化界⾯->web界⾯2)⾮常⽅便的上传⼯作流-》打成压缩包3)设置任务间的关系4)权限设置-》删库到跑路5)模块化6)随时停⽌和启动任务7)可以查看⽇志记录⼆、与Oozie对⽐和Oozie相对⽐,azkaban是⼀个轻量级调度⼯具。

企业应⽤的功能并⾮⼩众的功能可以使⽤Azkaban。

1)功能两个任务流调度器可以调度使⽤mr,java,脚本⼯作流任务都可以进⾏定时调度...2)使⽤az直接传参Oozie直接传参,⽀持EL表达式...3)定时az定时执⾏任务基于时间Oozie任务基于时间和数据4)资源az有严格的权限控制Oozie⽆严格权限控制三、Azkaban安装部署1、准备⼯作1)快照2)上传安装包Azkaban Web 服务器:azkaban-web-server-2.5.0.tar.gzAzkaban Excutor 执⾏服务器:azkaban-executor-server-2.5.0.tar.gzAzkaban 初始化脚本⽂件:azkaban-sql-script-2.5.0.tar.gzcd /root/hdmkdir azkaban上传安装包到/root/hd/azkaban⽬录下3)解压重命名cd /root/hd/azkaban/解压tar -zxvf azkaban-web-server-2.5.0.tar.gztar -zxvf azkaban-executor-server-2.5.0.tar.gztar -zxvf azkaban-sql-script-2.5.0.tar.gz删除安装包rm -f azkaban-executor-server-2.5.0.tar.gzrm -f azkaban-web-server-2.5.0.tar.gzrm -f azkaban-sql-script-2.5.0.tar.gz重命名mv azkaban-executor-2.5.0/ executormv azkaban-web-2.5.0/ server4)mysql中azkaban脚本导⼊create database azkaban;use azkaban;source /root/hd/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql2、安装部署1)创建SSL(安全连接)配置服务器需要⼀个证书cd /root/hd/azkaban/serverkeytool -keystore keystore -alias jetty -genkey -keyalg RSA[root@hd09-1 server]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA输⼊密钥库⼝令: 123456(密码是看不见的)再次输⼊新⼝令: 123456您的名字与姓⽒是什么?[Unknown]:您的组织单位名称是什么?[Unknown]:您的组织名称是什么?[Unknown]:您所在的城市或区域名称是什么?[Unknown]:您所在的省/市/⾃治区名称是什么?[Unknown]:该单位的双字母国家/地区代码是什么?[Unknown]: CNCN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN是否正确?[否]: 是输⼊ <jetty> 的密钥⼝令 123456(如果和密钥库⼝令相同, 按回车):[root@hd09-1 server]#2)时间同步设置⽣成时区⽂件tzselect⽣成5->9->1->yes拷贝时区⽂件cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime集群时间同步crt中开启交互窗⼝发送sudo date -s '2018-11-29 20:22:39'3)修改配置⽂件 azkaban.propertiescd /root/hd/azkaban/server/confvi azkaban.properties#Azkaban Personalization Settings=Test #服务器 UI 名称,⽤于服务器上⽅显⽰的名字bel=My Local Azkaban #描述azkaban.color=#FF3601 #UI 颜⾊azkaban.default.servlet.path=/indexweb.resource.dir=/root/hd/azkaban/server/web/ #默认根 web ⽬录default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海默认为美国#Azkaban UserManager classuser.manager.class=er.XmlUserManager #⽤户权限管理默认类user.manager.xml.file=/root/hd/azkaban/server/conf/azkaban-users.xml #⽤户配置#Loader for projects # global 配置⽂件所在位置executor.global.properties=/root/hd/azkaban/executor/conf/global.propertiesazkaban.project.dir=projectsdatabase.type=mysql #数据库类型mysql.port=3306 #端⼝号mysql.host=hd09-1 #数据库连接 IPmysql.database=azkaban #数据库实例名er=root #数据库⽤户名mysql.password=root #数据库密码mysql.numconnections=100 #最⼤连接数# Velocity dev modevelocity.dev.mode=false # Jetty 服务器属性# Azkaban Jetty server properties.jetty.maxThreads=25 #最⼤线程数jetty.ssl.port=8443 #Jetty SSL 端⼝jetty.port=8081 #Jetty 端⼝jetty.keystore=/root/hd/azkaban/server/keystore #SSL ⽂件名jetty.password=123456 #SSL ⽂件密码jetty.keypassword=123456 #Jetty 主密码与 keystore ⽂件相同jetty.truststore=/root/hd/azkaban/server/keystore #SSL ⽂件名jetty.trustpassword=123456 # SSL ⽂件密码# Azkaban Executor settings # 执⾏服务器属性executor.port=12321 #执⾏服务器端⼝# mail settingsmail.sender= #发送邮箱mail.host= #发送邮箱 smtp 地址job.failure.email= #任务失败时发送邮件的地址job.success.email= #任务成功时发送邮件的地址lockdown.create.projects=falsecache.directory=cache #缓存⽬录4)修改配置⽂件 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>5)修改配置⽂件 azkaban.propertiescd /root/hd/azkaban/executor/confvi azkaban.properties#Azkabandefault.timezone.id=Asia/Shanghai #时区# Azkaban JobTypes Plugins #插件配置,插件所在位置azkaban.jobtype.plugin.dir=/root/hd/azkaban/executor/plugins/jobtypes#Loader for projectsexecutor.global.properties=/root/hd/azkaban/executor/conf/global.propertiesazkaban.project.dir=projects#数据库设置database.type=mysql #数据库类型(⽬前只⽀持 mysql)mysql.port=3306 #数据库端⼝号mysql.host=hd09-1 #数据库 IP 地址mysql.database=azkaban #数据库实例名er=root #数据库⽤户名mysql.password=root #数据库密码mysql.numconnections=100 #最⼤连接数# Azkaban Executor settings # 执⾏服务器配置executor.maxThreads=50 #最⼤线程数executor.port=12321 #端⼝号(如修改,请与 web 服务中⼀致)executor.flow.threads=30 #线程数6)启动web服务器cd /root/hd/azkaban/serverbin/azkaban-web-start.sh7)启动执⾏器cd /root/hd/azkaban/executorbin/azkaban-executor-start.sh8)访问webhttps://hd09-1:8443打开⾕歌或是⽕狐浏览器输⼊https://IP:8443,此处测试的地址是https://hd09-1:8443,此时可能会打不开界⾯,点击⾼级点击继续前往hd09-1(不安全)此时会跳到登录界⾯,输⼊在配置⽂件azkaban-users.xml,中配置的⽤户名密码admin/admin,点击登录即可9)配置环境变量vi /etc/profile 在最后⾯加上#Azkabanexport AZKABAN_WEB_HOME=/root/hd/azkaban/serverexport AZKABAN_EXE_HOME=/root/hd/azkaban/executorexport PATH=$PATH:$AZKABAN_WEB_HOME/bin:$AZKABAN_EXE_HOME/bin执⾏ source /etc/profile 声明环境变量此时就可以直接输⼊azkaban-web-start.shazkaban-executor-start.sh启动azkaban了。

Azkaban任务调度(三)

Azkaban任务调度(三)

Azkaban任务调度(三)单⼀ job 任务调度创建 job 描述⽂件[root@node-01 jobs]# vim first.job#first.jobtype=commandcommand=echo 'this is my first job'将 job 资源⽂件打包成 zip ⽂件# 安装 zip 命令[root@node-01 jobs]# yum install -y zip unzip[root@node-01 jobs]# zip first.zip first.jobadding: first.job (deflated 10%)[root@node-01 jobs]# ll总⽤量 8-rw-r--r--. 1 root root 50 5⽉ 19 22:51 first.job-rw-r--r--. 1 root root 213 5⽉ 19 22:53 first.zip注意:⽬前,Azkaban 上传的⼯作流⽂件只⽀持 xxx.zip ⽂件。

zip 应包含 xxx.job 运⾏作业所需的⽂件和任何⽂件(⽂件名后缀必须以 .job 结尾,否则⽆法识别)。

作业名称在项⽬中必须是唯⼀的。

通过 Azkaban 的 web 管理平台创建 project 并上传 job 的 zip 包创建⼯程,如下图:上传 zip ⽂件,如下图:执⾏ Job 任务,如下图:点击 Continue 按钮,执⾏ Job,如下图:Job 执⾏成功,如下图:查看⽇志,如下图:多 Job ⼯作流调度创建有依赖关系的多个 job 描述第⼀个 job:start.job[root@node-01 jobs]# vim start.job#start.jobtype=commandcommand=touch /root/jobs/kangkang.txt第⼆个 job:step1.job 依赖 start.job[root@node-01 jobs]# vim step1.job#step1.jobtype=commanddependencies=startcommand=echo "this is step1 job"第三个 job:step2.job 依赖 start.job[root@node-01 jobs]# vim step2.job#step2.jobtype=commanddependencies=startcommand=echo "this is step2 job"第四个 job:finish.job 依赖 step1.job 和 step2.job[root@node-01 jobs]# vim finish.job#finish.jobtype=commanddependencies=step1,step2command=echo "this is finish job"将所有 job 资源⽂件打到⼀个 zip 包中[root@node-01 jobs]# zip jobs.zip start.job step1.job step2.job finish.job在 Azkaban 的 web 管理界⾯创建⼯程并上传 zip 包启动⼯作流 Flow ,查看结果Java 程序任务调度编写 Java 程序import java.io.File;import java.io.FileOutputStream;import java.io.IOException;/*** @desc Azkaban Java 程序任务调度*/public class AzkabanTest {public void run() throws IOException {//根据需要编写具体代码FileOutputStream fos = new FileOutputStream("/root/azkaban.txt");fos.write("this is a java program.".getBytes());fos.close();}public static void main(String[] args) throws IOException {AzkabanTest azkabanTest = new AzkabanTest();azkabanTest.run();}}将 Java 程序打成 Jar 包,创建 lib ⽬录,将 Jar 包放⼊ lib 内[root@node-01 ~]# mkdir lib[root@node-01 ~]# mv AzkabanDemo-1.0-SNAPSHOT.jar lib/编写 job ⽂件[root@node-01 ~]# cd jobs/#azkabanJava.jobtype=javaprocessjava.class=AzkabanTestclasspath=/root/lib/*将 job ⽂件打成 zip 包[root@node-01 jobs]# zip azkabanJava.zip azkabanJava.job通过 Azkaban 的 web 管理平台创建 project 并上传 job 压缩包,启动执⾏该 job HDFS 操作任务创建 job 描述⽂件[root@node-01 jobs]# $ vim fs.job#hdfs jobtype=commandcommand=/root/apps/hadoop-3.2.1/bin/hadoop fs -mkdir /azkaban将 job 资源⽂件打包成zip⽂件[root@node-01 jobs]# zip fs.zip fs.job通过 Azkaban 的 web 管理平台创建 project 并上传 job 压缩包启动执⾏该 job查看结果MapReduce任务创建 job 描述⽂件,及 mr 程序 jar 包[root@node-01 jobs]# vim mapreduce.job#mapreduce jobtype=commandcommand=/root/apps/hadoop-3.2.1/bin/hadoop jar /root/apps/hadoop-3.2.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /wordcount/input /wordcount/将所有 job 资源⽂件打到⼀个 zip 包中[root@node-01 jobs]# zip mapreduce.zip mapreduce.job在 Azkaban 的 web 管理界⾯创建⼯程并上传 zip 包启动执⾏该 job查看结果Hive脚本任务创建 hive 脚本[root@node-01 jobs]# vim student.sqluse default;drop table student;create table student(id int, name string)row format delimited fields terminated by '\t';load data local inpath '/root/student.txt' into table student;insert overwrite local directory '/root/student'row format delimited fields terminated by '\t'select * from student;Job 描述⽂件:hive.job[root@node-01 jobs]# vim hive.job#hive jobtype=commandcommand=/root/apps/hive-3.1.2/bin/hive -f /root/apps/jobs/student.sql将所有 job 资源⽂件打到⼀个 zip 包中[root@node-01 jobs]# zip hive.zip hive.job在 Azkaban 的 web 管理界⾯创建⼯程并上传 zip 包启动 job查看结果。

azkaban

azkaban

工作流调度器 azkaban1.1 工作流调度器概念1.1.1 为什么需要工作流调度系统?一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序、hive脚本等,各任务单元之间存在时间先后及前后依赖关系,为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:1)通过Hadoop先将原始数据同步到HDFS上;2)借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;3)需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;4)将明细数据进行复杂的统计分析,得到结果报表信息;5)需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。

1.1.2 工作流调度实现方式:简单的任务调度:直接使用linux的crontab来定义;复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban等常见工作流调度系统:市面上目前有许多工作流调度,在hadoop领域,常见的工作流调度器有Oozie, Azkaban,Cascading,Hamake等。

1.1.3 各种调度工具特性对比:下面的表格对上述四种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在显著的区别,在做技术选型的时候,可以提供参考Azkaban与Oozie对比:对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。

总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。

如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。

azkabn案例

azkabn案例

Azkaban是LinkedIn开源的一个批量工作流任务调度器,它主要用于Azkaban是LinkedIn开源的一个批量工作流任务调度器,它主要用于在一个工作流内以一个特定的顺序运行一组工作和流程。

Azkaban整体包括三部分:webserver、dbserver、executorserver。

其开发语言为Java,具有简单易用的特点,并且有便捷的Web用户界面进行维护和跟踪你的工作流。

在实际应用中,例如在大数据处理系统中,除了HDFS + MapReduce + Hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,Azkaban则可以便捷地满足这些需求。

此外,Azkaban通过简单的key:value对的方式配置,并通过dependencies来设置任务之间的依赖关系,极大地方便了工作流的上传和任务之间的关系设置。

具体的应用案例包括:创建单个job的任务类型如command或java的案例,以及将作业资源文件打包成zip文件,然后通过Azkaban的web管理平台创建作业等。

同时,Azkaban 还具有兼容任何版本的Hadoop、能够杀死并重新启动工作流、有关失败和成功的电子邮件提醒等功能。

24.Azkaban调度脚本的编写

24.Azkaban调度脚本的编写

24.Azkaban调度脚本的编写启动azkaban在启动了server和excutor之后,在浏览器打开azkaban,会发现不能打开,⽇志报这个错误at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)at sun.security.ssl.InputRecord.read(InputRecord.java:527)at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)2019/09/0115:18:24.499 +0800 WARN [log] [Azkaban] EXCEPTION.ssl.SSLException: Unrecognized SSL message, plaintext connection?at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)at sun.security.ssl.InputRecord.read(InputRecord.java:527)at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)2019/09/0115:18:24.680 +0800 WARN [log] [Azkaban] EXCEPTION.ssl.SSLException: Unrecognized SSL message, plaintext connection?at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)at sun.security.ssl.InputRecord.read(InputRecord.java:527)at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)2019/09/0115:18:24.809 +0800 WARN [log] [Azkaban] EXCEPTION.ssl.SSLException: Unrecognized SSL message, plaintext connection?at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710)at sun.security.ssl.InputRecord.read(InputRecord.java:527)at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)2019/09/0115:26:14.746 +0800 WARN [log] [Azkaban] EXCEPTION.ssl.SSLHandshakeException: Remote host closed connection during handshakeat sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994)at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)Caused by: java.io.EOFException: SSL peer shut down incorrectlyat sun.security.ssl.InputRecord.read(InputRecord.java:505)at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)... 5 more注意了,之前⼀直不能打开是因为使⽤了http,这⾥强调⼀下,⼀定不能⽤http,必须⽤https,然后选择⾼级选项,运⾏访问不安全的地址,因为这个地址被默认为不安全的编写upload.job脚本# upload.jobtype=commandcommand=bash uploadFile2Hdfs.sh编写uploadFile2Hdfs.sh脚本#!/bin/bash#set java envexport JAVA_HOME=/opt/modules/jdk1.8.0_65export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH#set hadoop envexport HADOOP_HOME=/opt/modules/hadoop-2.6.0export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH#版本1的问题:#虽然上传到Hadoop集群上了,但是原始⽂件还在。

azkaban面试

azkaban面试

Azkaban面试引言Azkaban是一个开源的批量工作流任务调度系统,用于处理和调度大规模的数据处理任务。

在数据领域的日益发展中,Azkaban作为一个可靠、灵活且有效的工作流管理系统,得到了广泛应用。

对于准备参加Azkaban面试的候选人来说,了解Azkaban的特点以及面试中可能涉及的问题是非常重要的。

本文将介绍Azkaban的基本内容以及面试中可能会涉及的一些重要问题和技术要点。

Azkaban的基本概念1. 任务(Job)任务是Azkaban中最基本的调度单元,可以是Shell脚本、Java程序、Hadoop 任务等。

2. 项目(Project)项目是一组相关任务的集合,通常对应一个完整的数据处理流程。

Azkaban通过项目管理来组织和调度任务。

3. 工作流(Flow)工作流是由一组任务组成的有向无环图(DAG),其中每个任务表示一个节点,任务之间的依赖关系表示边。

4. 调度周期(Schedule)调度周期定义了任务或工作流的执行频率和时间间隔。

5. 触发方式(Trigger)触发方式指定了何时执行任务或工作流,可以是手动触发或定时触发。

Azkaban的特点1. 易用性Azkaban提供了一个用户友好的图形化界面,通过简单的拖放操作,用户可以轻松创建、管理和监控任务和工作流。

2. 可扩展性Azkaban支持与其他大数据工具和平台的集成,例如Hadoop、Spark等。

它提供了丰富的API和插件机制,方便用户进行扩展。

3. 可靠性Azkaban具有高可用性和容错性,它能够自动处理任务失败和节点故障等异常情况,并提供日志和报警功能。

4. 监控和调度Azkaban提供了实时的监控和调度功能,用户可以随时查看任务和工作流的运行状态和进度。

5. 安全性Azkaban支持用户认证和授权机制,可以限制用户的访问权限,并提供日志审计功能。

Azkaban面试常见问题1. 请简要介绍一下Azkaban回答:Azkaban是一个开源的批量工作流任务调度系统,用于处理和调度大规模的数据处理任务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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等等,有兴趣的朋友可以研究。

相关文档
最新文档