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

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

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只支持 mysql(azkaban提交的任务提交到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
13 2017/12/14 14:43:46.386 +0800 INFO [XmlUserManager] [Azkaban] Loading user metrics
14 2017/12/14 14:43:46.386 +0800 INFO [XmlUserManager] [Azkaban] Loading user admin
15 2017/12/14 14:43:46.811 +0800 INFO [AzkabanWebServer] [Azkaban] Loading JDBC for project management
16 2017/12/14 14:43:46.815 +0800 INFO [ProjectManager] [Azkaban] Project version retention is set to 3
17 2017/12/14 14:43:46.816 +0800 INFO [ExecutorManager] [Azkaban] Cleaning old logs from execution_logs
18 2017/12/14 14:43:47.013 +0800 INFO [ExecutorManager] [Azkaban] Cleaning old log files before 2017-09-21T14:43:46.853+08:00
19 2017/12/14 14:43:47.019 +0800 INFO [ExecutorManager] [Azkaban] Cleaned up 0 log entries.
20 2017/12/14 14:43:47.056 +0800 INFO [TriggerManager] [Azkaban] TriggerManager loaded.
21 2017/12/14 14:43:47.057 +0800 INFO [AzkabanWebServer] [Azkaban] Loading built-in checker and action types
22 2017/12/14 14:43:47.064 +0800 INFO [CheckerTypeLoader] [Azkaban] Registering checker BasicTimeChecker
23 2017/12/14 14:43:47.064 +0800 INFO [CheckerTypeLoader] [Azkaban] Registering checker SlaChecker
24 2017/12/14 14:43:47.064 +0800 INFO [CheckerTypeLoader] [Azkaban] Registering checker ExecutionChecker
25 2017/12/14 14:43:47.064 +0800 INFO [ActionTypeLoader] [Azkaban] Registering action ExecuteFlowAction
26 2017/12/14 14:43:47.065 +0800 INFO [ActionTypeLoader] [Azkaban] Registering action KillExecutionAction
27 2017/12/14 14:43:47.065 +0800 INFO [ActionTypeLoader] [Azkaban] Registering action AlertAction
28 2017/12/14 14:43:47.065 +0800 INFO [ActionTypeLoader] [Azkaban] Registering action CreateTriggerAction
29 2017/12/14 14:43:47.065 +0800 INFO [AzkabanWebServer] [Azkaban] Loading trigger based scheduler
30 2017/12/14 14:43:47.069 +0800 INFO [AzkabanWebServer] [Azkaban] Loading plug-in checker and action types
31 2017/12/14 14:43:47.069 +0800 ERROR [AzkabanWebServer] [Azkaban] plugin path plugins/triggers doesn't exist!
32 2017/12/14 14:43:47.069 +0800 INFO [AzkabanWebServer] [Azkaban] Setting timezone to Asia/Shanghai
33 2017/12/14 14:43:47.069 +0800 INFO [AzkabanWebServer] [Azkaban] Registering MBeans...
34 2017/12/14 14:43:47.157 +0800 INFO [AzkabanWebServer] [Azkaban] Bean azkaban.jmx.JmxJettyServer registered.
35 2017/12/14 14:43:47.163 +0800 INFO [AzkabanWebServer] [Azkaban] Bean azkaban.jmx.JmxTriggerManager registered.
36 2017/12/14 14:43:47.172 +0800 INFO [AzkabanWebServer] [Azkaban] Bean azkaban.jmx.JmxExecutorManager registered.
37 2017/12/14 14:43:47.175 +0800 INFO [AzkabanWebServer] [Azkaban] Setting up web resource dir web/
38 2017/12/14 14:43:47.249 +0800 INFO [JdbcTriggerLoader] [Azkaban] Loading all triggers from db.
39 2017/12/14 14:43:47.308 +0800 INFO [JdbcTriggerLoader] [Azkaban] Loaded 0 triggers.
40 2017/12/14 14:43:47.308 +0800 INFO [log] [Azkaban] jetty-6.1.26
41 2017/12/14 14:43:47.991 +0800 INFO [log] [Azkaban] Started SslSocketConnector@0.0.0.0:8443
42 2017/12/14 14:43:47.993 +0800 INFO [AzkabanWebServer] [Azkaban] Server running on ssl port 8443.

 然后启动执行服务器,在执行服务器目录下执行启动命令:bin/azkaban-executor-start.sh,关闭命令:[root@master executor]# bin/azkaban-executor-shutdown.sh注:只能要执行服务器根目录运行;

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

 [root@master executor]# bin/azkaban-executor-start.sh

出现和启动web一样的错误,这里自己解决一下即可:

[root@master executor]# vim bin/azkaban-executor-start.sh

解决完错误以后接着启动即可:

 1 [root@master executor]# bin/azkaban-executor-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 Starting AzkabanExecutorServer on port 12321 ...
 7 [root@master executor]# 2017/12/14 14:52:31.724 +0800 ERROR [AzkabanExecutorServer] [Azkaban] Starting Jetty Azkaban Executor...
 8 2017/12/14 14:52:31.751 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban settings file from bin/../conf
 9 2017/12/14 14:52:31.752 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban private properties file
10 2017/12/14 14:52:31.753 +0800 INFO [AzkabanServer] [Azkaban] Loading azkaban properties file
11 2017/12/14 14:52:31.776 +0800 INFO [AzkabanExecutorServer] [Azkaban] Setting timezone to Asia/Shanghai
12 2017/12/14 14:52:31.805 +0800 INFO [log] [Azkaban] Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
13 2017/12/14 14:52:31.882 +0800 INFO [FlowRunnerManager] [Azkaban] Execution dir retention set to 86400000 ms
14 2017/12/14 14:52:31.894 +0800 INFO [FlowRunnerManager] [Azkaban] Cleaning recently finished
15 2017/12/14 14:52:31.895 +0800 INFO [FlowRunnerManager] [Azkaban] Cleaning old projects
16 2017/12/14 14:52:31.896 +0800 INFO [FlowRunnerManager] [Azkaban] Cleaning old execution dirs
17 2017/12/14 14:52:31.922 +0800 INFO [AzkabanExecutorServer] [Azkaban] Registering MBeans...
18 2017/12/14 14:52:31.993 +0800 INFO [AzkabanExecutorServer] [Azkaban] Bean azkaban.jmx.JmxJettyServer registered.
19 2017/12/14 14:52:32.003 +0800 INFO [AzkabanExecutorServer] [Azkaban] Bean azkaban.jmx.JmxFlowRunnerManager registered.
20 2017/12/14 14:52:32.003 +0800 INFO [log] [Azkaban] jetty-6.1.26
21 2017/12/14 14:52:32.108 +0800 INFO [log] [Azkaban] Started SocketConnector@0.0.0.0:12321
22 2017/12/14 14:52:32.108 +0800 INFO [AzkabanExecutorServer] [Azkaban] Azkaban Executor Server started on port 12321

最后可以进行浏览器访问查看,如下所示(账号密码是azkaban-users.xml配置文件里面配置的):

由于访问https,浏览器会拦截,这里添加可信任即可:

 

9:Azkaban的简单实用,Azkaba内置的任务类型支持command、java;

Command类型单一job示例:

 第一步:创建job描述文件:

1 #command.job
2 type=command                                                    
3 command=echo 'hello world !'

第二步:将job资源文件打包成zip文件(在window打包):

第三步:通过azkaban的web管理平台创建project并上传job压缩包,首先呢,需要创建project:

然后上传你的zip包,必须是zip包,如果是rar包会报如下的错误,如下所示:

页面也提示如下错误:Installation Failed. Error unzipping file.

 1 azkaban.project.ProjectManagerException: Error unzipping file.
 2     at azkaban.project.ProjectManager.uploadProject(ProjectManager.java:318)
 3     at azkaban.webapp.servlet.ProjectManagerServlet.ajaxHandleUpload(ProjectManagerServlet.java:1389)
 4     at azkaban.webapp.servlet.ProjectManagerServlet.handleUpload(ProjectManagerServlet.java:1414)
 5     at azkaban.webapp.servlet.ProjectManagerServlet.handleMultiformPost(ProjectManagerServlet.java:163)
 6     at azkaban.webapp.servlet.LoginAbstractAzkabanServlet.doPost(LoginAbstractAzkabanServlet.java:240)
 7     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
 8     at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
 9     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
10     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
11     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
12     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
13     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
14     at org.mortbay.jetty.Server.handle(Server.java:326)
15     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
16     at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
17     at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
18     at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
19     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
20     at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
21     at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:713)
22     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
23 Caused by: java.util.zip.ZipException: error in opening zip file
24     at java.util.zip.ZipFile.open(Native Method)
25     at java.util.zip.ZipFile.<init>(ZipFile.java:215)
26     at java.util.zip.ZipFile.<init>(ZipFile.java:145)
27     at java.util.zip.ZipFile.<init>(ZipFile.java:159)
28     at azkaban.project.ProjectManager.unzipFile(ProjectManager.java:402)
29     at azkaban.project.ProjectManager.uploadProject(ProjectManager.java:312)
30     ... 20 more

如果Mysql的图形化工具无法查看自己的创建的hive或者azkaban数据表,应该是没有权限的问题,赋予一下权限即可:

如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
    mysql -uroot -p123456
    #(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

红色区域内本应该存在上传的文件的,可是这里死活不出来,不知道什么问题。百度好像也没有说怎么解决,这里先记一下,看看日后解决的时候再贴一下。好难受。

此时此刻,离上句的好难受已经过去大约30分钟了,突然想到一件事情,然后就解决这个问题了,开始呢,我搞了一个txt文件,写上上面的命令,然后打成zip包,不是rar包,然后提交死活,页面不显示,感觉学习新东西,自己脑残一样,最后发现文件格式必须是.job格式的,然后打成的.zip包的。(azkaban上传的zip包页面不显示,No FlowsNo flows have been uploaded to this project yet.如果你搜索这些关键字的话,看到这些话,希望可以帮助到你,最后注意文件的格式必须为UTF-8);

然后呢,可以看看summary可以看看最后一次运行状态,正在运行的状态等等。看看Graph工作流图;可以点击Execute Flow进行任务调度,如下所示:

然后出现下面界面:

最后如下所示:

到此结束,复杂案例,以后有机会再脑补吧。

azkaban后台启动,偶尔会报这个错误,这里先不解决了,以后真正实在不行再来解决它,网上好多方法,没去测试是否可行。先留一下吧。

 1 2017/12/14 17:40:55.147 +0800 WARN [log] [Azkaban] EXCEPTION 
 2 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
 3     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946)
 4     at sun.security.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1705)
 5     at sun.security.ssl.HandshakeOutStream.flush(HandshakeOutStream.java:122)
 6     at sun.security.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:972)
 7     at sun.security.ssl.ServerHandshaker.sendChangeCipherAndFinish(ServerHandshaker.java:1532)
 8     at sun.security.ssl.ServerHandshaker.clientHello(ServerHandshaker.java:671)
 9     at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:167)
10     at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
11     at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
12     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
13     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
14     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
15     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
16     at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)
17     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
18 Caused by: java.io.EOFException: SSL peer shut down incorrectly
19     at sun.security.ssl.InputRecord.read(InputRecord.java:482)
20     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
21     ... 14 more
22 2017/12/14 17:40:55.153 +0800 WARN [log] [Azkaban] EXCEPTION 
23 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
24     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946)
25     at sun.security.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1705)
26     at sun.security.ssl.HandshakeOutStream.flush(HandshakeOutStream.java:122)
27     at sun.security.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:972)
28     at sun.security.ssl.ServerHandshaker.sendChangeCipherAndFinish(ServerHandshaker.java:1532)
29     at sun.security.ssl.ServerHandshaker.clientHello(ServerHandshaker.java:671)
30     at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:167)
31     at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
32     at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
33     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
34     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
35     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
36     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
37     at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)
38     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
39 Caused by: java.io.EOFException: SSL peer shut down incorrectly
40     at sun.security.ssl.InputRecord.read(InputRecord.java:482)
41     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
42     ... 14 more
43 2017/12/14 17:41:06.377 +0800 WARN [log] [Azkaban] EXCEPTION 
44 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
45     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946)
46     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
47     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
48     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
49     at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:708)
50     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
51 Caused by: java.io.EOFException: SSL peer shut down incorrectly
52     at sun.security.ssl.InputRecord.read(InputRecord.java:482)
53     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
54     ... 5 more

 待续.......

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
SQL 分布式计算 Hadoop
Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)
【2月更文挑战第6天】Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)
73 0
|
5月前
|
分布式计算 Hadoop Java
65 Hadoop工作流调度系统
65 Hadoop工作流调度系统
66 0
|
消息中间件 存储 监控
五分钟快速了解Airflow工作流
简介 Airflow是一个以编程方式创作、调度和监控工作流的平台。 使用 Airflow 将工作流创作为有向无环图(DAG)任务。 Airflow 调度程序按照你指定的依赖项在一组workers上执行您的任务。同时,Airflow拥有丰富的命令行实用程序使得在DAG上进行复杂的诊断变得轻而易举。并且提供了丰富的用户界面使可视化生产中运行的工作流、监控进度和需要排查问题时变得非常容易。 当工作流被定义为代码时,它们变得更易于维护、可版本化、可测试和协作。
|
4月前
|
消息中间件 Kubernetes 调度
k8s教程(pod篇)-批处理调度
k8s教程(pod篇)-批处理调度
67 0
|
数据可视化 API 调度
Ansible最佳实践之 AWX 高级作业工作流的创建和调度
写在前面 分享一些 AWX 高级作业工作流的创建和调度的笔记 博文内容涉及: 创建和启动工作流模板 Demo 工作流调度和通知的相关介绍 食用方式: 需要了解 Ansible 理解不足小伙伴帮忙指正
260 0
Ansible最佳实践之 AWX 高级作业工作流的创建和调度
powerjob配置工作流
powerjob工作流内配置依赖关系及判断节点
780 0
powerjob配置工作流
|
调度
第9章:工作流调度框架Oozie
第9章:工作流调度框架Oozie
181 0
|
存储 弹性计算 监控
浅析数据工作流Prefect
简述 Prefect 是一种新的工作流管理系统,专为现代基础设施而设计,由开源的 Prefect Core 工作流引擎提供支持。 用户只需将任务组织成流程,Prefect 负责其余的工作,可让您非常容易使用数据工作流并添加重试、日志记录、动态映射、缓存、失败通知等语义。
|
SQL 监控 JavaScript
基于Quartz编写一个可复用的分布式调度任务管理WebUI组件
创业小团队,无论选择任何方案,都优先考虑节省成本。关于分布式定时调度框架,成熟的候选方案有XXL-JOB、Easy Scheduler、Light Task Scheduler和Elastic Job等等,其实这些之前都在生产环境使用过。但是想要搭建高可用的分布式调度平台,这些框架(无论是否去中心化)都需要额外的服务器资源去部署中心调度管理服务实例,甚至有时候还会依赖一些中间件如Zookeeper。
203 0
基于Quartz编写一个可复用的分布式调度任务管理WebUI组件
|
分布式计算 监控 搜索推荐
【Airflow】工作流自动化和调度系统
2014年,Airbnb创造了一套工作流调度系统:Airflow。Airflow是灵活可扩展的工作流自动化和调度系统 。2019年成为Apache的顶级项目。它可以让程序员通过编程实现:编写、调度、监控工作流,主要针对有大量数据进行传递的场景,不适合解决流式任务(如spark streaming和Flink)。
837 0
【Airflow】工作流自动化和调度系统