`
乡里伢崽
  • 浏览: 111912 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hadoop工作流引擎之Azkaban

 
阅读更多
Hadoop工作流引擎之Azkaban
Edit
介绍

Azkaban是twitter出的一个任务调度系统,操作比Oozie要简单很多而且非常直观,提供的功能比较简单。Azkaban以Flow为执行单元进行定时调度,Flow就是预定义好的由一个或多个可存在依赖关系的Job组成的工作流。Azkaban的官方主页是http://azkaban.github.io/azkaban2/ ,它的的主要特点有下面几个:
兼容所有Hadoop版本(1.x,2.x,CDH)
可以通过WebUI进行管理配置,操作方便
可以通过UI配置定时调度
扩展性好,可针对某一问题开发组件(目前有三个插件HDFSBrowser,JobtypePlugins和HadoopSecurityManager)
有权限管理模块
可以通过WebUI跟踪Flow或者Job的执行情况
可以设置邮件提醒
可以为定时Flow或者Flow中的某个Job配置执行时间长度的控制,如果执行时间超过了所设的时间,可以发送警告邮件给相关人员或者Kill掉相应设置的Flow或Job
可以重试失败Job
Azkaban也有一些局限性(尚待挖掘),例如任务之间的依赖,不能够指定部分完成(比如我们希望任务A依赖于B,但是并不是B完全执行完成A才可以启动,而是B的某个阶段完成的话就可以启动A)
Azkaban主要是解决Hadoop Job的依赖关系,它包括三个组件,组件之间的关系如下图所示
Relational Database(MySQL)存储Azkaban和Job的状态信息
AzkabanWebServer通过WebUI的方式处理对project信息的管理,定时调度和监控
AzkabanExecutorServer负责根据作业的依赖关系完成作业的解析和调度

Edit
安装步骤

首先准备Azkaban相关软件,其中AzkabanWebServer和AzkabanExecutorServer要安装到不同目录,下载链接http://azkaban.github.io/azkaban2/downloads.html
azkaban-web-server-2.1.tar.gz
azkaban-executor-server-2.1.tar.gz
azkaban-sql-script-2.1.tar.gz
azkaban-hdfs-viewer-2.1.tar.gz
azkaban-jobtype-2.1.tar.gz
Edit
安装及配置数据库(目前仅支持Mysql)

Azkaban使用MYSQL管理工程、计划和执行
安装Mysql 具体安装过程可参考相关资料,比如http://ifalone.me/305.html ,http://dev.mysql.com/doc/index.html
为Azkaban创建数据库,其中数据库名字不一定是azkaban
mysql> CREATE DATABASE azkaban;
创建Azkaban数据库的用户,其中用户名字不一定是azkaban
mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
增加azkaban用户对azkaban数据库的增删改查权限
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON <database>.* to '<username>'@'%' WITH GRANT OPTION;
有必要的话可以增加Packet大小,此项限制mysql接受的数据包大小,可以在/etc/my.cnf中配置
[mysqld]
...
max_allowed_packet=1024M
配置完重启MYSQL
sudo /sbin/service mysqld restart
创建Azkaba需要的数据库表,将azkaban-sql-script-2.1.tar.gz解压,执行create-all-sql脚本即可(其中带有‘_update_’的脚本可以忽视)
获取JDBC连接器mysql-connector-java-5.1.25.tar.gz,下载地址http://dev.mysql.com/downloads/connector/j/ 。mysql-connector-java-5.1.25.tar.gz需要在webserver和excutorserver安装完后,分别拷入Azkaban2-web-server-install-dir/extlib和supertool/azkaban/excutorserver/extlib
Edit
下载安装Web Server

将azkaban-web-server-2.1.tar.gz解压到合适目录,如Azkaban2-web-server-install-dir
解压完应该有如下文件目录
Folder    Description
bin       运行 Azkaban jetty server的脚本
conf      Azkaban web server的配置文件
lib       Azkaban依赖的jar包
extlib    放入到这个目录的jar包会被添加Azkaban的classpath
plugins   插件安装在此目录
web       Azkaban web server的相关css,html等文件
获取SSL需要的keystore。此处尤其注意要用java的keytool工具,不然会报错(PATH最好将新填的内容放在旧的前面,如PATH=$JAVA_HOME/bin:......:${PATH})
证书制作可参考http://wingware.iteye.com/blog/1160396 ,http://docs.codehaus.org/display/JETTY/How+to+configure+SSL
keytool -keystore keystore -alias jetty -genkey -keyalg RSA

示例如下
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password:  password
What is your first and last name?
  [Unknown]:  jetty.mortbay.org
What is the name of your organizational unit?
  [Unknown]:  Jetty
What is the name of your organization?
  [Unknown]:  Mort Bay Consulting Pty. Ltd.
What is the name of your City or Locality?
  [Unknown]:
What is the name of your State or Province?
  [Unknown]:
What is the two-letter country code for this unit?
  [Unknown]:
Is CN=jetty.mortbay.org, OU=Jetty, O=Mort Bay Consulting Pty. Ltd.,
L=Unknown, ST=Unknown, C=Unknown correct?
  [no]:  yes

Enter key password for <jetty>
        (RETURN if same as keystore password):  password

成功得到keystore文件后,根据实际情况修改azkaban.properties文件里如下内容
jetty.keystore=keystore
jetty.password=password
jetty.keypassword=password
jetty.truststore=keystore
jetty.trustpassword=password
配置数据库。根据实际情况修改Azkaban2-web-server-install-dir/azkaban.properties文件里如下内容
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
配置UserManager。根据实际情况配置azkaban-users.xml相关信息,其中在azkaban.properties里定义了对azkaban-users.xml的引用
    user.manager.class=azkaban.user.XmlUserManager
    user.manager.xml.file=conf/azkaban-users.xml
运行Web Server
在azkaban.properties中如下属性配置jetty的相关行为
jetty.maxThreads=25
jetty.ssl.port=8443

运行前首先要建一个Web Server临时目录,如Azkaban2-web-server-install-dir/tmpdir。然后进入webserver/bin目录,修改azkaban-web-start.sh里的如下内容
tmpdir=Azkaban2-web-server-install-dir/tmpdir

进入webserver根目录执行如下命令,没意外的话正常启动。可通过https:/localhost:8443验证是否启动成功
bin/azkaban-web-start.sh ./

关闭webserver命令如下:
bin/azkaban-web-shutdown.sh ./
Edit
下载安装Excutor Server

将azkaban-executor-server-2.1.tar.gz解压到合适目录,如Azkaban2-exec-server-install-dir
解压完应该有如下文件目录
Folder      Description
bin         启动Azkaban jetty server的脚本
conf        Azkaban exec server的相关配置文件
lib         Azkaban依赖的jar包
extlib      放入到这个目录的jar包会被添加Azkaban的classpath
plugins     插件安装在此目录
配置数据库。根据实际情况修改Azkaban2-exec-server-install-dir/azkaban.properties文件里如下内容
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
配置AzabanWebServer和AzkabanExecutorServer客户端
在AzkabanExecutorServer的azkaban.properties里做如下配置:
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

在AzkabanWebServer的azkaban.properties里做如下配置:
executor.port=12321

这个配置需要重启Server才能生效
运行Excutor Server
运行前首先要建一个Excutor Server临时目录,如supertool/azkaban/excutorserver/tmpdir。然后进入excutorserver/bin目录,修改azkaban-web-start.sh里的如下内容
tmpdir=supertool/azkaban/excutorserver/tmpdir

进入excutorserver根目录执行如下命令,没意外的话正常启动
bin/azkaban-exec-start.sh ./

关闭运行如下命令
bin/azkaban-exec-shutdown.sh
Edit
安装Azkaban插件

HDFS Viewer插件
修改Azkaban2-web-server-install-dir/conf/azkaban.properties:
viewer.plugins=hdfs

Azkaban 会从如下地址加载hdfs viewer插件:
Azkaban2-web-server-install-dir/plugins/viewer/hdfs

将azkaban-hdfs-viewer-2.1.tar.gz解压到Azkaban2-web-server-install-dir/plugins/viewer并将目录重命名为hdfs
*如果hadoop没有启动安全机制,重启AzkabanWebServer 即可使用hdfs插件。如果hadoop启动了安全机制,则需要修改Azkaban2-web-server-install-dir/plugins/viewer/hdfs/conf/plugin.properties里的如下配置:
Parameter                          Description
azkaban.should.proxy               Wether Azkaban should proxy as another user to view the hdfs filesystem, rather than Azkaban itself, defaults to true
hadoop.security.manager.class      The security manager to be used, which handles talking to secure hadoop cluster, defaults to azkaban.security.HadoopSecurityManager_H_1_0 (for hadoop 1.x versions)
proxy.user                         The Azkaban user configured with kerberos and hadoop. Similar to how oozie should be configured, for secure hadoop installations
proxy.keytab.location              The location of the keytab file with which Azkaban can authenticate with Kerberos for the specified proxy.user
Job Type插件
修改Azkaban2-exec-server-install-dir/conf/azkaban.properties :
azkaban.jobtype.plugin.dir=plugins/jobtypes

Azkaban 会从如下地址加载所有的job types插件:
Azkaban2-exec-server-install-dir/plugins/jobtypes

将azkaban-jobtype-2.1.tar.gz解压到Azkaban2-exec-server-install-dir/plugins/并将目录重命名为jobtypes
如果hadoop没有启动安全机制,只需要修改Azkaban2-exec-server-install-dir/plugins/jobtypes/commonprivate.properties中如下配置:
Parameter                           Description
hadoop.home                         Your $HADOOP_HOME setting.
jobtype.global.classpath            The cluster specific hadoop resources, such as hadoop-core jar, and hadoop conf (e.g. ${hadoop.home}/hadoop-core-1.0.4.jar,${hadoop.home}/conf)

如果hadoop启动了安全机制,则需要修改Azkaban2-exec-server-install-dir/plugins/jobtypes/commonprivate.properties中如下配置:
Parameter                           Description
hadoop.security.manager.class       The security manager to be used, which handles talking to secure hadoop cluster, defaults to azkaban.security.HadoopSecurityManager_H_1_0 (for hadoop 1.x versions)
proxy.user                          The Azkaban user configured with kerberos and hadoop. Similar to how oozie should be configured, for secure hadoop installations
proxy.keytab.location               The location of the keytab file with which Azkaban can authenticate with Kerberos for the specified proxy.user
hadoop.home                         Your $HADOOP_HOME setting.
jobtype.global.classpath            The cluster specific hadoop resources, such as hadoop-core jar, and hadoop con (e.g. ${hadoop.home}/hadoop-core-1.0.4.jar,${hadoop.home}/conf)
Edit
使用说明及举例。Job具体可配置信息可参看http://azkaban.github.io/azkaban2/documents/2.1/jobconf.html

建立一个简单的可以进行定时调度的job
Azkaban启动后可以使用浏览器访问站点的8443端口,进入站点后可以进行project增删改查等相关操作。下面以创建一个简单的Job举例,比如创建foo.job
# foo.job
type=command
command=echo "Hello World"

将foo.job压缩成zip格式。然后在web页面创建工程并将foo.zip上传到foo对应工程中,如下图所示

配置完成后可以立即执行此project,也可以设置定时执行,定时配置如下示例如下图。目前时间只能按照UTC和PDT两种时区输入,也就是说要根据当地时间先算UTC时间然后再输入(比如CST-8=UTC,github上已经将此情况列为bug,但是还没修复)。

建立一个有依赖关系的job
分别建立foo和bar两个job,其中bar依赖foo。将两个job压缩到一个zip里就生成了一个简单的flow project,其中foo失败后的动作可选,具体可参考http://azkaban.github.io/azkaban2/documents/2.1/executingflow.html 。
#foo.job
type=command
command=echo foo
#bar.job
type=command
dependencies=foo
command=echo bar
建立一个HadoopJava类型的Job,主要流程是先把写好的Java程序打成Jar包,然后配置**.job文件,最后将Jar包和**.job压缩到zip文件中上传。一个打包好的有依赖关系的zip包示例http://redmine.mzsvn.com/attachments/download/398/java-hadooptest-de.zip
首先修改Azkaban2-exec-server-install-dir/plugins/jobtypes/common.properties
hadoop.home=hadoop.home=/home/workspace/hadoop-*.*.*

然后修改Azkaban2-exec-server-install-dir/plugins/jobtypes/commonprivate.properties
jobtype.global.classpath=${hadoop.home}/hadoop-core-*.*.*.jar,${hadoop.home}/conf,${hadoop.home}/lib/*

一个示例Job如下,其中wc.properties(可选,非必须)描述了此Job的变量信息,wordcount.job描述了此Job的主要配置信息
#wc.properties
HDFSRoot=/test
param.inData=${HDFSRoot}/input
param.outData=${HDFSRoot}/output

#wordcount.job
type=hadoopJava
job.class=azkaban.jobtype.examples.java.WordCount
classpath=./lib/*
main.args=${param.inData} ${param.outData1}
force.output.overwrite=true
input.path=${param.inData}
output.path=${param.outData}
邮件的使用首先需要修改Azkaban2-web-server-install-dir/conf/azkaban.properties,示例如下
# mail settings
mail.sender=******@miaozhen.com
mail.host=smtp.miaozhen.com
mail.user=******@miaozhen.com
mail.password=******

然后需要根据每个Job的情况配置合适的邮件通知列表,示例如下
# foo.job
type=command
command=echo "Hello World"
notify.emails=******@miaozhen.com
failure.emails=******@miaozhen.com
success.emails=******@miaozhen.com
Azkaban的SLA使用
Azkaban可以为定时Flow或者Flow中的某个Job设置SLA服务,如果执行时间超过了所设的时间,可以发送警告邮件给相关人员或者Kill掉相应设置的Flow或Job,示例如下图。

Azkaban的接口调用
Azkaban对外提供了Ajax接口,此类接口可通过包装get或者post请求调用。API使用时需要先获取SessionId(默认有效期一天),然后才可以做其他操作。其中获取Session到执行Job的过程示例如下
获取Session命令:
curl -k --data "action=login&username=azkaban&password=azkaban" https://localhost:8443
命令返回结果:
{
  "status" : "success",
  "session.id" : "5a932706-3d04-4c44-888d-5afcd87b8ebe"
}

创建一个Project命令:
curl -k --data "action=create&name=azkaban&description=dis&session.id=5a932706-3d04-4c44-888d-5afcd87b8ebe" https://localhost:8443/manager
命令返回结果:
{"status":"success","path":"manager?project=azkaaban","action":"redirect"}

上传打包好的zip压缩包命令:
curl -k -i -H "Content-Type: multipart/mixd" -X POST --form 'session.id=5a932706-3d04-4c44-888d-5afcd87b8ebe' --form 'ajax=upload' --form 'file=@foo.job.zip;type=application/zip' --form 'project=MyProject;type/plain' https://localhost:8443/manager
命令返回结果:
HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 43
Server: Jetty(6.1.26)

{
  "projectId" : "42",
  "version" : "1"
}

执行Flow命令:
curl -k --data "ajax=executeFlow&project=azkaban&flow=foo&session.id=5a932706-3d04-4c44-888d-5afcd87b8ebe" https://localhost:8443/executor
命令返回结果:
{
  "message" : "Execution submitted successfully with exec id 70",
  "project" : "azkaban",
  "flow" : "foo",
  "execid" : 70
}
分享到:
评论

相关推荐

    大数据课程-Hadoop集群程序设计与开发-9.Azkaban工作流管理器_lk_edit.pptx

    Azkaban是一款由LinkedIn开发并开源的工作流管理器,专门设计用于调度和管理Hadoop相关的工作流任务。它提供了一种有序执行任务的机制,特别适用于处理大数据项目中复杂任务间的依赖关系。Azkaban的主要特点是其兼容...

    Azkaban工作流管理器.pdf

    Azkaban是一款流行的工作流管理器,尤其在大数据处理领域中广泛使用,因为它与Hadoop等技术紧密集成。Azkaban的核心功能是管理和调度一系列相互依赖的任务,这些任务通常涉及数据处理和分析工作。 Azkaban工作流...

    大数据工具之Azkaban使用教程.zip

    Azkaban是一款开源的工作流执行引擎,主要用于大数据处理工作流的调度和管理。它由LinkedIn开发,设计目标是简化批处理作业的执行流程,尤其是在大数据领域。Azkaban以其直观的用户界面、强大的依赖管理和定时调度...

    azkaban 最新的编译包

    Azkaban是一款流行的工作流管理系统,它主要用于协调和执行一系列有依赖关系的任务,尤其是在大数据处理领域。这个最新的编译包包含了一系列的组件,方便用户直接安装和使用,避免了自行编译的繁琐过程。 1. **...

    azkaban4.0编译包

    Azkaban是一个开源的工作流执行引擎,主要用于大数据处理工作流的调度和管理。它由LinkedIn开发并维护,设计目标是简化Hadoop作业的调度和依赖管理。Azkaban4.0编译包提供了预编译的组件,可以直接安装和使用,无需...

    Azkaban2.5.0 executor-server、web-server下载

    Azkaban是一款开源的工作流执行引擎,主要用于大数据处理工作流的调度和管理。它由LinkedIn开发并维护,设计目标是简化大数据处理任务的调度和执行,尤其适合Hadoop作业的调度。Azkaban分为两个主要组件:Executor ...

    azkaban3.9安装包下载(已编译)

    Azkaban是一款开源的工作流执行器,主要用于大数据处理工作流的调度和管理。它由LinkedIn开发,被广泛用于Hadoop和Hive等大数据工具的任务调度。Azkaban3.9是该软件的一个版本,此处提供的安装包已经经过编译,方便...

    Azkaban任务调度安装配置和使用

    以下是一些常见的Hadoop工作流调度器的关键特性比较: - **Oozie**:Apache Oozie是Hadoop生态系统的一部分,支持多种类型的Hadoop任务,如MapReduce、Pig、Hive等,并提供了REST API用于外部集成。 - **Azkaban**...

    Android-Azkaban工作流管理器

    Azkaban是一款开源的工作流执行管理工具,主要设计用于数据处理工作流,如Hadoop作业调度。虽然它的原生应用环境是大数据处理领域,但标签“Android开发-其它杂项”表明Azkaban在Android开发中也可能有特定的应用...

    Azkaban4.0.zip

    Azkaban是一款开源的工作流执行器,主要用于大数据处理工作流的调度和管理。它由LinkedIn开发并维护,设计目标是简化Hadoop作业的管理和执行。Azkaban4.0是其一个重要的版本,包含了对先前版本的改进和新功能的添加...

    尚硅谷大数据技术之Azkaban1

    Azkaban 是一个批量工作流任务调度器,由 Linkedin 公司推出,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程。它的配置是通过简单的 key:value 对的方式,通过配置中的 dependencies 来设置依赖关系。 ...

    Azkaban工作调度框架安装包

    Azkaban是一款开源的工作流和批处理作业调度系统,由LinkedIn开发并维护,主要用于管理和执行大规模的数据处理任务。它的核心设计理念是提供一个简单易用的Web界面,使得数据工程师能够定义、组织和调度复杂的依赖...

    大数据技术之Azkaban.docx

    【Azkaban】是LinkedIn开源的一款专为大数据处理设计的工作流调度系统,它主要用于协调大量相互依赖的任务单元,如shell脚本、Java程序、MapReduce作业和Hive脚本等。Azkaban的设计目的是简化大数据处理流程中的复杂...

    Azkaban3.2调度系统部署

    Azkaban是一款开源的工作流和批处理作业调度系统,由LinkedIn开发并维护。它主要用于管理大数据处理流程,如Hadoop作业。Azkaban3.2版本提供了更稳定、高效和易用的调度服务,适用于复杂的数据处理工作流。 在部署...

    Azkaban3.13安装版

    Azkaban是一款开源的工作流执行器,主要用于大数据处理任务的调度和管理。它是由LinkedIn开发并维护的,设计目标是简化大数据工作流程的管理和执行,特别适合于Hadoop作业的调度。Azkaban3.13是其一个稳定版本,提供...

    azkaban-4.0.0.tar.gz

    Azkaban是一款开源的工作流执行引擎,主要用于大数据处理工作流的调度和管理。在4.0.0版本中,它提供了强大的任务调度能力,支持复杂的依赖关系,是大数据项目中的重要工具。本压缩包“azkaban-4.0.0.tar.gz”包含了...

    azkaban-3.38.0.tar.gz

    Azkaban是一款开源的工作流调度系统...总结,Azkaban 3.38.0是一个强大的工作流调度系统,特别适合Hadoop生态系统中的大数据处理任务。通过源码包,开发者可以深入了解其内部工作原理,并根据实际需求进行定制和扩展。

    azkaban-3.43.0

    Azkaban是一个开源的工作流执行引擎,主要用于大数据处理工作流的调度和管理。它由LinkedIn开发并维护,设计目标是简化Hadoop作业的调度和依赖管理。Azkaban 3.43.0是一个更新的版本,包含了对系统性能和稳定性的...

    azkaban-3.90.0.tar.gz

    Azkaban是一款开源的工作流执行器,主要用于大数据处理任务的调度和管理。它是由LinkedIn开发并贡献给社区的,设计目标是提供一个简单易用、可扩展的平台,用于管理和执行复杂的作业流程。Azkaban 3.90.0 版本是一个...

Global site tag (gtag.js) - Google Analytics