工作流调度器azkaban(以及各种工作流调度器比对)

Posted --->别先生<---

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工作流调度器azkaban(以及各种工作流调度器比对)相关的知识,希望对你有一定的参考价值。

1:工作流调度系统的作用:

(1):一个完整的数据分析系统通常都是由大量任务单元组成:比如,shell脚本程序,java程序,mapreduce程序、hive脚本等;
(2):各任务单元之间存在时间先后及前后依赖关系;
(3):为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;

(4):举例说明工作流调度系统的具体作用:

  我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:
    a、通过Hadoop先将原始数据同步到HDFS上;
    b、借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
    c、需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
    d、将明细数据进行复杂的统计分析,得到结果报表信息;
    e、需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。

(5):工作流调度实现方式:

  a:简单的任务调度:直接使用linux的crontab来定义;
  b:复杂的任务调度:开发调度平台,或使用现成的开源调度系统,比如ooize、azkaban等

(6):常见工作流调度系统:

  市面上目前有许多工作流调度器:
    在hadoop领域,常见的工作流调度器有Oozie, Azkaban,Cascading,Hamake等

 2:各种调度工具特性对比:

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

特性

Hamake Oozie Azkaban Cascading
 工作流描述语言  XML  XML (xPDL based)  text file with key/value pairs  Java API
 依赖机制  data-driven  explicit  explicit  explicit
 是否要web容器  No  Yes  Yes  No
 进度跟踪  console/log messages  web page  web page  Java API
 Hadoop job调度支持  no  yes  yes  yes
 运行模式  command line utility  daemon  daemon  API
 Pig支持  yes  yes  yes  yes
 事件通知  no  no  no  yes
 需要安装  no  yes  yes  no
 支持的hadoop版本  0.18+  0.20+  currently unknown  0.18+
 重试支持  no  workflownode evel  yes  yes
 运行任意命令  yes  yes  yes  yes
 Amazon EMR支持  yes  no  currently unknown  yes

 3:Azkaban与Oozie对比:

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

(2):功能:
  两者均可以调度mapreduce,pig,java,脚本工作流任务
  两者均可以定时执行工作流任务

(3):工作流定义
  Azkaban使用Properties文件定义工作流
  Oozie使用XML文件定义工作流

(4):工作流传参
  Azkaban支持直接传参,例如${input}
  Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}

(5):定时执行
  Azkaban的定时执行任务是基于时间的
  Oozie的定时执行任务基于时间和输入数据

(6):资源管理
  Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
  Oozie暂无严格的权限控制

(7):工作流执行
  Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)
  Oozie作为工作流服务器运行,支持多用户和多工作流

(8):工作流管理
  Azkaban支持浏览器以及ajax方式操作工作流
  Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流;

 4:Azkaban介绍:

  Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
  它有如下功能特点:
     Web用户界面,方便上传工作流,方便设置任务之间的关系,调度工作流,认证/授权(权限的工作),能够杀死并重新启动工作流,模块化和可插拔的插件机制,项目工作区,工作流和任务的日志记录和审计。

5:Azkaban安装部署:

   (1) 请提前将,Azkaban Web服务器,azkaban-web-server-2.5.0.tar.gz;Azkaban执行服务器 ,azkaban-executor-server-2.5.0.tar.gz上传到自己的机器,过程省略。由于目前azkaban只支持 mysqlazkaban提交的任务提交到mysql里面,因为是提交的任务是定时执行的,具有时间调度的,azkaban重启以后任务还存在),需安装mysql服务器,之前写过安装linux下面安装mysql,这里不叙述:

 Azkaban的下载官网网址:https://azkaban.github.io/downloads.html

   (2)安装建议:将安装文件上传到集群,最好上传到安装 hive、sqoop的机器上,方便命令的执行,在当前用户目录下新建 azkabantools目录,用于存放源安装文件.新建azkaban目录,用于存放azkaban运行程序;

   (3)azkaban web服务器安装(提供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 ../azkaban
                 cd ../azkaban
                mv azkaban-web-server-2.5.0  server

    azkaban 执行服器(调用job执行的)安装:

      第一步:解压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  ../azkaban
          cd ../azkaban
          mv azkaban-executor-server-2.5.0  executor

    azkaban脚本导入:

      azkaban 在mysql里面创建表具有表结构,不像hive会自动执行创建mysql表结构,所以azkaban 需要手动执行azkaban脚本导入,创建mysql的表结构。
      第一步:解压: azkaban-sql-script-2.5.0.tar.gz
        命令:tar –zxvf azkaban-sql-script-2.5.0.tar.gz
        将解压后的mysql 脚本,导入到mysql中:
        进入mysql
        mysql> create database azkaban;
          mysql> use azkaban;
          Database changed
          mysql> source /home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql;


具体安装过程如下所示:

 1 <!--创建文件夹相应的文件夹-->
 2 [root@master hadoop]# mkdir azkabantools
 3 [root@master hadoop]# mkdir azkaban
 4 [root@master hadoop]# cd package/
 5 
 6 <!--解压缩的操作-->
 7 [root@master package]# tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /home/hadoop/azkabantools/
 8 [root@master package]# ll /home/hadoop/azkabantools/
 9 [root@master package]# tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /home/hadoop/azkabantools/
10 [root@master package]# ll /home/hadoop/azkabantools/
11 [root@master package]# tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /home/hadoop/azkabantools/
12 [root@master package]# ll /home/hadoop/azkabantools/
13 [root@master package]# cd /home/hadoop/azkabantools/
14 [root@master azkabantools]# ls
15 [root@master azkabantools]# ll
16 
17 <!--修改azkaban的名称以及查看等等操作-->
18 [root@master azkabantools]# mv azkaban-web-2.5.0 server
19 [root@master azkabantools]# mv azkaban-executor-2.5.0 executor
20 [root@master azkabantools]# ll
21 
22 <!--手动执行mysql脚本创建数据表-->
23 [root@master hadoop]# mysql -uroot -p123456
24 mysql> create database azkaban;
25 mysql> use azkaban;
26 mysql> source /home/hadoop/azkabantools/azkaban-2.5.0/create-all-sql-2.5.0.sql

 6:完成以上操作以后,开始配置配置文件,因为azkaban的web页面是https访问的,所以服务端需要一个证书的。所以使用SSL来生成这个证书,下面创建SSL的配置:

 脑补一下:安装java,安装目录下就有keytool,如果输入的时候输错了,不要慌,按住ctrl+Backspace键即可清楚错误操作命令。

此命令生成证书:keytool -keystore keystore -alias jetty -genkey -keyalg RSA
 1 [root@master azkabantools]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
 2 Enter keystore password:输入密码  
 3 Re-enter new password:输入确认密码 
 4 What is your first and last name?
 5   [Unknown]:回车  
 6 What is the name of your organizational unit?
 7   [Unknown]:回车  
 8 What is the name of your organization?
 9   [Unknown]:回车  
10 What is the name of your City or Locality?
11   [Unknown]:回车  
12 What is the name of your State or Province?
13   [Unknown]:回车  
14 What is the two-letter country code for this unit?
15   [Unknown]:  CN      
16 Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN correct?
17   [no]:  y
18 
19 Enter key password for <jetty>
20     (RETURN if same as keystore password):回车(密码是否和上面的一样)  
21 [root@master azkabantools]# 

 完成上述工作后,将在当前目录生成 keystore 证书文件,将keystore 考贝到 azkaban web服务器根目录中.如:cp keystore azkaban/server,即完成生成证书操作;

 [root@master azkabantools]# cp keystore /home/hadoop/azkabantools/server/

 7:接下来配置azkaban的配置文件:

 注:先配置好服务器节点上的时区,由于是定时执行的,如果时区时间不对,azkaban将不会执行。
  1、先生成时区配置文件Asia/Shanghai,如果没有这个时区Asia/Shanghai,使用交互式命令 tzselect生成 即可,根据提示进行选择,这里省略。
  2、拷贝该时区文件,覆盖系统本地时区配置:
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

   3:修改自己的时间,然后写到硬件里面,不然只在本次生效:

    sudo date -s \'yyyy-dd-MM hh:mm:ss\'
    hwclock -w  

 azkaban web服务器配置,进入azkaban web服务器安装目录 conf目录,修改azkaban.properties文件:

[root@master azkabantools]# cd server/conf

[root@master conf]# vim azkaban.properties

 1 #Azkaban Personalization Settings
 2 azkaban.name=Test                           #服务器UI名称,用于服务器上方显示的名字
 3 azkaban.label=My Local Azkaban                               #描述
 4 azkaban.color=#FF3601                                                 #UI颜色
 5 azkaban.default.servlet.path=/index                         #
 6 web.resource.dir=web/                                                 #默认根web目录
 7 default.timezone.id=Asia/Shanghai                           #默认时区,已改为亚洲/上海 默认为美国
 8  
 9 #Azkaban UserManager class
10 user.manager.class=azkaban.user.XmlUserManager   #用户权限管理默认类
11 user.manager.xml.file=conf/azkaban-users.xml              #用户配置,具体配置参加下文
12  
13 #Loader for projects
14 executor.global.properties=conf/global.properties    # global配置文件所在位置
15 azkaban.project.dir=projects                                                #
16  
17 database.type=mysql                                                              #数据库类型
18 mysql.port=3306                                                                       #端口号
19 mysql.host=192.168.3.129                                                      #数据库连接IP
20 mysql.database=azkaban                                                       #数据库实例名
21 mysql.user=root                                                                 #数据库用户名
22 mysql.password=123456                                                         #数据库密码
23 mysql.numconnections=100                                                  #最大连接数
24  
25 # Velocity dev mode
26 velocity.dev.mode=false
27 # Jetty服务器属性.
28 jetty.maxThreads=25                                                               #最大线程数
29 jetty.ssl.port=8443                                                                   #Jetty SSL端口
30 jetty.port=8081                                                                         #Jetty端口
31 jetty.keystore=keystore                                                          #SSL文件名
32 jetty.password=123456                                                             #SSL文件密码
33 jetty.keypassword=123456                                                      #Jetty主密码 与 keystore文件相同
34 jetty.truststore=keystore                                                                #SSL文件名
35 jetty.trustpassword=123456                                                   # SSL文件密码
36  
37 # 执行服务器属性
38 executor.port=12321                                                               #执行服务器端口
39  
40 # 邮件设置
41 mail.sender=xxxxxxxx@163.com                                       #发送邮箱
42 mail.host=smtp.163.com                                                       #发送邮箱smtp地址
43 mail.user=xxxxxxxx                                       #发送邮件时显示的名称
44 mail.password=**********                                                 #邮箱密码
45 job.failure.email=xxxxxxxx@163.com                              #任务失败时发送邮件的地址
46 job.success.email=xxxxxxxx@163.com                            #任务成功时发送邮件的地址
47 lockdown.create.projects=false                                           #
48 cache.directory=cache                                                            #缓存目录

 然后配置azkaban 执行服务器executor配置,进入执行服务器安装目录conf,修改azkaban.properties:

 1 #Azkaban
 2 default.timezone.id=Asia/Shanghai                                              #时区
 3  
 4 # Azkaban JobTypes 插件配置
 5 azkaban.jobtype.plugin.dir=plugins/jobtypes                   #jobtype 插件所在位置
 6  
 7 #Loader for projects
 8 executor.global.properties=conf/global.properties
 9 azkaban.project.dir=projects
10  
11 #数据库设置
12 database.type=mysql                                                                       #数据库类型(目前只支持mysql)
13 mysql.port=3306                                                                                #数据库端口号
14 mysql.host=192.168.3.129                                                           #数据库IP地址
15 mysql.database=azkaban                                                                #数据库实例名
16 mysql.user=root                                                                       #数据库用户名
17 mysql.password=123456                                  #数据库密码
18 mysql.numconnections=100                                                           #最大连接数
19  
20 # 执行服务器配置
21 executor.maxThreads=50                                                                #最大线程数
22 executor.port=12321                                                               #端口号(如修改,请与web服务中一致)
23 executor.flow.threads=30                                                                #线程数

然后进行用户配置,进入azkaban web服务器conf目录,修改azkaban-users.xml,vi azkaban-users.xml 增加 管理员用户:

[root@master conf]# vim /home/hadoop/azkabantools/server/conf/azkaban-users.xml

1 <azkaban-users>
2         <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
3         <user username="metrics" password="metrics" roles="metrics"/>
4         <user username="admin" password="admin" roles="admin,metrics" />
5         <role name="admin" permissions="ADMIN" />
6         <role name="metrics" permissions="METRICS"/>
7 </azkaban-users>

 8:配置完成以后可以启动azkaban,可以先启动azkaban web服务器:

在azkaban web服务器目录下执行启动命令:bin/azkaban-web-start.sh

在azkaban web服务器目录下执行关闭命令:[root@master server]# bin/azkaban-web-shutdown.sh

  注意:在web服务器根目录运行或者启动到后台运行:
        nohup  bin/azkaban-web-start.sh  1>/tmp/azstd.out  2>/tmp/azerr.out &

 

 然后就报下面的错,出错了,就解决呗,错误和解决方法如下所示:

1 [root@master server]# bin/azkaban-web-start.sh 
2 Using Hadoop from /home/hadoop/hadoop-2.4.1
3 Using Hive from 
4 bin/..
5 :bin/../lib/azkaban-2.5.0.jar:bin/../lib/commons-collections-3.2.1.jar:bin/../lib/commons-configuration-1.8.jar:bin/../lib/commons-dbcp-1.4.jar:bin/../lib/commons-dbutils-1.5.jar:bin/../lib/commons-email-1.2.jar:bin/../lib/commons-fileupload-1.2.1.jar:bin/../lib/commons-io-2.4.jar:bin/../lib/commons-jexl-2.1.1.jar:bin/../lib/commons-lang-2.6.jar:bin/../lib/commons-logging-1.1.1.jar:bin/../lib/commons-pool-1.6.jar:bin/../lib/guava-13.0.1.jar:bin/../lib/h2-1.3.170.jar:bin/../lib/httpclient-4.2.1.jar:bin/../lib/httpcore-4.2.1.jar:bin/../lib/jackson-core-asl-1.9.5.jar:bin/../lib/jackson-mapper-asl-1.9.5.jar:bin/../lib/jetty-6.1.26.jar:bin/../lib/jetty-util-6.1.26.jar:bin/../lib/joda-time-2.0.jar:bin/../lib/jopt-simple-4.3.jar:bin/../lib/junit-4.8.jar:bin/../lib/log4j-1.2.16.jar:bin/../lib/mail-1.4.5.jar:bin/../lib/mysql-connector-java-5.1.28.jar:bin/../lib/servlet-api-2.5.jar:bin/../lib/slf4j-api-1.6.1.jar:bin/../lib/slf4j-log4j12-1.6.4.jar:bin/../lib/velocity-1.7.jar:bin/../lib/velocity-tools-2.0.jar:bin/../extlib/*.jar:bin/../plugins/*/*.jar:/home/hadoop/hadoop-2.4.1/conf:/home/hadoop/hadoop-2.4.1/*:/conf:/lib/*
6 [root@master server]# Invalid maximum heap size: -Xmx4G
7 The specified size exceeds the maximum representable size.
8 Error: Could not create the Java Virtual Machine.
9 Error: A fatal exception has occurred. Program will exit.

解决方法:
请修改文件如:vim azkaban\\azkaban-web-2.5.0\\bin\\azkaban-web-start.sh

打开文件使用命令搜索,在命令行模式下,按shift+:键打出冒号,然后输入/,然后输入想要搜索的内容,如:/-Xmx4G找到以后进行替换;

将文件中的  AZKABAN_OPTS="-Xmx4G" 修改为  AZKABAN_OPTS="-Xmx512M"

报错原因如:设置的大小按照机器的存储而定,如果设置太大可能无法启动,设置太小会内存溢出。否则启动报错。


启动过程如下即启动成功(按Enter键,即可继续输入linux命令进行操作executor,因为这只是打印一下启动日志,azkaban已经启动起来了,可以使用jps进行查看进程):

 1 [root@master server]# bin/azkaban-web-start.sh 
 2 Using Hadoop from /home/hadoop/hadoop-2.4.1
 3 Using Hive from 
 4 bin/..
 5 :bin/../lib/azkaban-2.5.0.jar:bin/../lib/commons-collections-3.2.1.jar:bin/../lib/commons-configuration-1.8.jar:bin/../lib/commons-dbcp-1.4.jar:bin/../lib/commons-dbutils-1.5.jar:bin/../lib/commons-email-1.2.jar:bin/../lib/commons-fileupload-1.2.1.jar:bin/../lib/commons-io-2.4.jar:bin/../lib/commons-jexl-2.1.1.jar:bin/../lib/commons-lang-2.6.jar:bin/../lib/commons-logging-1.1.1.jar:bin/../lib/commons-pool-1.6.jar:bin/../lib/guava-13.0.1.jar:bin/../lib/h2-1.3.170.jar:bin/../lib/httpclient-4.2.1.jar:bin/../lib/httpcore-4.2.1.jar:bin/../lib/jackson-core-asl-1.9.5.jar:bin/../lib/jackson-mapper-asl-1.9.5.jar:bin/../lib/jetty-6.1.26.jar:bin/../lib/jetty-util-6.1.26.jar:bin/../lib/joda-time-2.0.jar:bin/../lib/jopt-simple-4.3.jar:bin/../lib/junit-4.8.jar:bin/../lib/log4j-1.2.16.jar:bin/../lib/mail-1.4.5.jar:bin/../lib/mysql-connector-java-5.1.28.jar:bin/../lib/servlet-api-2.5.jar:bin/../lib/slf4j-api-1.6.1.jar:bin/../lib/slf4j-log4j12-1.6.4.jar:bin/../lib/velocity-1.7.jar:bin/../lib/velocity-tools-2.0.jar:bin/../extlib/*.jar:bin/../plugins/*/*.jar:/home/hadoop/hadoop-2.4.1/conf:/home/hadoop/hadoop-2.4.1/*:/conf:/lib/*
 6 [root@master server]# 2017/12/14 14:43:46.276 +0800 ERROR [AzkabanWebServer] [Azkaban] Starting Jetty Azkaban Executor...
 7 2017/12/14 14:43:46.292 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban settings file from bin/../conf
 8 2017/12/14 14:43:46.292 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban properties file
 9 2017/12/14 14:43:46.306 +0800 INFO [AzkabanWebServer] [Azkaban] Setting up Jetty Https Server with port:8443 and numThreads:25
10 2017/12/14 14:43:46.327 +0800 INFO [log] [Azkaban] Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
11 2017/12/14 14:43:46.357 +0800 INFO [AzkabanWebServer] [Azkaban] Loading user manager class azkaban.user.XmlUserManager
12 2017/12/14 14:43:46.384 +0800 INFO [XmlUserManager] [Azkaban] Loading user azkaban
Azkaban 工作流调度器

大数据高级开发工程师——工作流调度器Azkaban

工作流调度器azkaban的安装和使用

必知Hadoop工作流引擎调度器--Azkaban与Oozie的区别。

工作流调度器azkaban

工作流调度器azkaban