Azkaban 工作流调度器

1 概述

  1.1 为什么需要工作流调度系统

    a)一个完整的数据分析系统通常都是由大量任务单元组成,shell脚本程序,java程序,mapreduce程序、hive脚本等。

    b)各任务单元之间存在时间先后及前后依赖关系。

    c)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。

  1.2  工作流调度实现方式

    简单的任务调度:直接使用linux的crontab来定义;

    复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban等。

  1.3 常见工作流调度系统

    在hadoop领域,常见的工作流调度器有Oozie, Azkaban,Cascading,Hamake等。

  1.4 Azkaban 与 Oozie对比

    对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。

2 Azkaban 介绍

  Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

  功能特点:

     Web用户界面

     方便上传工作流

     方便设置任务之间的关系

    调度工作流

    认证/授权(权限的工作)

    能够杀死并重新启动工作流

    模块化和可插拔的插件机制

    项目工作区

    工作流和任务的日志记录和审计

  2.1 Azkaban 安装部署

    2.1.1 准备工作:

      azkaban-web-server-2.5.0.tar.gz

      azkaban-executor-server-2.5.0.tar.gz

      MYSQL

    2.1.2 安装

      1)分别解压webserver和executorServer

      2)创建SSL配置      

 keytool -keystore keystore -alias jetty -genkey -keyalg RSA

      3) 在mysql数据库中创建azkaban库,执行sql脚本create-all-sql-3.39.0-12-gb44c688.sql(注意:该脚本在db模块中,要讲mysql引擎改为innoDB)

    2.1.3 配置文件:

       2.1.3.1  先配置好服务器节点上的时区

        a) 先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可。

        b) 拷贝该时区文件,覆盖系统本地时区配置

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
      2.1.3.2  azkaban web服务器配置

        conf目录下文件

           

# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=keystore
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=keystore
jetty.trustpassword=123456
# Azkaban Executor settings
executor.port=12321
# mail settings
mail.sender=xxx@126.com
mail.host=smtp.126.com
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
mail.user=xxxxxxxx
mail.password=**********
job.failure.email=xxxxxxxx@163.com
job.success.email=xxxxxxxx@163.com
lockdown.create.projects=false
cache.directory=cache

azkaban.properties

 <azkaban-users>
<user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
<user password="metrics" roles="metrics" username="metrics"/>
<user username="admin" password="admin" roles="admin,metrics" />
<role name="admin" permissions="ADMIN"/>
<role name="metrics" permissions="METRICS"/>
</azkaban-users>

azkaban-users.xml

      2.1.3.3  azkaban 执行器配置
# Azkaban Personalization Settings
default.timezone.id=Asia/Shanghai
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# 数据库配置
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
#执行服务器配置
executor.port=12321
executor.connector.stats=true
executor.maxThreads=50
executor.flow.threads=30
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes

azkaban.properties

    详细配置请参考:http://azkaban.github.io/azkaban/docs/latest/     (3.0版本编译完后web和exec中没有配置文件 需要将solo中的配置文件复制过去)

      2.1.4 启动

        在azkaban web服务器目录下执行启动命令

        bin/azkaban-web-start.sh

        注:在web服务器根目录运行

  

        在执行服务器目录下执行启动命令

        bin/azkaban-executor-start.sh

        注:只能要执行服务器根目录运行

        启动完成后,在浏览器(建议使用谷歌浏览器)中输入https://服务器IP地址:8443 ,即可访问azkaban服务了.在登录中输入刚才新的户用名及密码,点击 login.

3 实战

  Azkaba内置的任务类型支持command、java。

  3.1 Command类型单一job示例

    a) 创建job描述文件

      vi command.job      

#command.job
type=command
command=echo 'hello'

    b)将job资源文件打包成zip文件   

zip command.job

    c) 通过azkaban的web管理平台创建project并上传job压缩包

    首先创建project

    

    上传zip

    

    d)启动执行该job

   

  3.2 Command类型多job工作流flow

    a)创建有依赖关系的多个job描述

      第一个job:foo.job

# foo.job
type=command
command=echo foo

      第二个job:bar.job依赖foo.job

# bar.job
type=command
dependencies=foo
command=echo bar

    b)将所有job打成一个zip包

    

    c) 在azkaban 的web管理界面创建工程并上传zip包

    d)启动工作流flow

  3.3 HDFS操作任务

# fs.job
type=command
command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop fs -mkdir /azaz

  3.4 MapReduce任务

# mrwc.job
type=command
command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop jar hadoop-mapreduce-examples-2.6.1.jar wordcount /wordcount/input /wordcount/azout

   将所有资源打包成zip

  

  3.5 HIVE脚本任务

    Hive脚本: test.sql

use 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.job
type=command
command=/home/hadoop/apps/hive/bin/hive -f 'test.sql'

 

最新文章

  1. GIT之旅【第一篇】
  2. jsp页面路径问题
  3. azure存储压测的问题(农码主观意识太强被坑了)
  4. Nginx使用的php-fpm的两种进程管理方式及优化(转)
  5. Maven中多模块的编译顺序
  6. MySQL计算时间差
  7. “requireJs前传”之为什么要用前端模块化?
  8. jenkins集成自动化部署插件(一) deploy-plugin
  9. 阿基米德项目ALS矩阵分解算法应用案例
  10. 《SDN核心技术剖析和实战指南》3.1控制器核心技术读书笔记
  11. 添加xml文件编辑语法提示
  12. 通过.NET实现后台自动发送Email功能的代码示例
  13. sgu194 Reactor Cooling【无源汇有上下界可行流】
  14. 关于js-angularJS的路由传参
  15. SqlServer跨集群升级
  16. vue动态class——实现tag的选中状态
  17. PHP工厂方法模式
  18. PySpider 爬虫系统
  19. 【代码审计】五指CMS_v4.1.0 后台存在SQL注入漏洞分析
  20. 让WordPress支持google AMP

热门文章

  1. BZOJ3769:BST again(记忆化搜索DP)
  2. ROS2 MAC OS Install
  3. ionic 入门创建第一个应用demo
  4. vlc源码分析(四) 调用libts接收TS流
  5. EF Core 2.1 支持数据库一对一关系
  6. win10 切换网卡的bat
  7. 关于iOS Block当中为什么要用weakSelf和strongSelf的思考
  8. jQuery.validate.js表单验证插件
  9. 利用node中的内置模块fs实现对简单文件的读取 拷贝 创建等功能
  10. PHP 扩展 trie-tree, swoole过滤敏感词方案