hadoop工作流引擎之azkaban [转]

介绍

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负责根据作业的依赖关系完成作业的解析和调度

安装步骤

首先准备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

安装及配置数据库(目前仅支持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

下载安装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 ./

下载安装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

安装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)

使用说明及举例。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 ‘[email protected];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

      }

时间: 2024-10-18 14:44:36

hadoop工作流引擎之azkaban [转]的相关文章

Hadoop工作流引擎之Azkaban与Oozie对比(四)

Azkaban是什么?(一) Azkaban的功能特点(二) Azkaban的架构(三) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/938837.html 目前,市面上最流行的两种Hadoop工作流引擎调度器Azkaban与Oozie. 具体,可以进一步看我的博客. Azkaban概念学习系列http://www.cnblogs.com/zlslch/category/938837.html 和Oozie概念学习系列http://www.

Alex 的 Hadoop 菜鸟教程: 第20课 工作流引擎 Oozie

本文基于 Centos6.x + CDH5.x Oozie是什么 简单的说Oozie是一个工作流引擎.只不过它是一个基于Hadoop的工作流引擎,在实际工作中,遇到对数据进行一连串的操作的时候很实用,不需要自己写一些处理代码了,只需要定义好各个action,然后把他们串在一个工作流里面就可以自动执行了.对于大数据的分析工作非常有用 安装Oozie Oozie分为服务端和客户端,我现在选择host1作为服务端,host2作为客户端. 所以在host1上运行 yum install oozie 在h

工作流引擎Oozie(一):workflow

1. Oozie简介 Yahoo开发工作流引擎Oozie(驭象者),用于管理Hadoop任务(支持MapReduce.Spark.Pig.Hive),把这些任务以DAG(有向无环图)方式串接起来.Oozie任务流包括:coordinator.workflow:workflow描述任务执行顺序的DAG,而coordinator则用于定时任务触发,相当于workflow的定时管理器,其触发条件包括两类: 数据文件生成 时间条件 Oozie定义了一种基于XML的hPDL (Hadoop Process

Hadoop工作流概念学习系列总述(一)

不多说,这里,直接上干货!从这篇博客起,逐步分享如下: 1.工作流 2.Hadoop工作流(内置) 3.第三方框架--Azkaban(推荐外安装)

工作流调度系统Azkaban的简介和使用

1 概述 1.1 为什么需要工作流调度系统 l 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 l 各任务单元之间存在时间先后及前后依赖关系 l 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行: 例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示: 1.  通过Hadoop先将原始数据同步到HDFS上: 2.  借助MapReduce计算框

工作流调度器azkaban概述

一.概述 1. 为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等; 各任务单元之间存在时间先后及前后依赖关系; 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行: 例如: 我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示: 1.通过Hadoop先将原始数据同步到HDFS上: 2.借助MapReduce计算框架对原始数据进行

微型工作流引擎-功能设计

我的微型工作流引擎-功能设计解析及使用示例 一.前言 上一篇我给大家介绍了我的工作流的模型和基本的设计,这篇我想详细说明下我这款工作流的功能及使用示例.这款工作流主要是面向开发者设计的,为了先让大家有个全局的认识,局部功能的设计实现就不细说了,后续有时间我会继续写文章向大家介绍. 二.功能详解及使用示例代码 1.配置流程引擎,一般在程序启动过程中调用(Global.asax.cs中) //初始化流程引擎 BpmConfiguration .Instance() .Config(@"C:\Conf

几种开源工作流引擎的简单比较(转)

摘要:目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 目前开源工作流引擎用的最多的是jbpm , 各种特性都不错, 文档也比较多, 下面只简单列举一下 其他几种工作流引擎的特性.   Apache ODE Enhydra Shark Bonita Open Business Engine Eclipse JWT  支持的流程建模标准  WS-BPEL 2.0,流程定义必须使用该标准编写才能执行 WfMC和OMG标准 符合WfMC规范 遵循WfMC

《程序猿闭门造车》之NBPM工作流引擎 - 项目整体架构

前言: 又是一年一度的圣诞节,可这关我什么事呢 :( ,好不容易周末了,还是说说其他的吧,前不久我发布了一篇关于工作流的文章:<程序猿闭门造车>之NBPM工作流引擎 - 开篇,很多爱好工作流的小伙伴对该组件表示感兴趣,所以我打算写一个系列文章来介绍该组件的一些情况,给关心该组件的小伙伴们一些参考和帮助. 先列个目录吧(由于我工作比较忙,只能周末抽空来分享相关资料,进度上还希望大家理解): 01.<程序猿闭门造车>之NBPM工作流引擎 - 开篇02.<程序猿闭门造车>之N