工作流调度器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只支持 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

待续.......

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维小白

18.11 LVS DR模式搭建

LVS DR模式搭建 DR模式搭建 – 准备工作 三台机器 分发器,也叫调度器(简写为dir) 133.130 rs1 133.132 rs2 133.133 ...

1939
来自专栏散尽浮华

zabbix问题记录

zabbix部署好,在使用一段时间后,出现了不少报错,在此简单做一记录。 1)Zabbix监控界面报错“Lack of free swap space”解决 公...

3338
来自专栏数据和云

【云端起舞】快速查找Oracle公有云服务上VM服务器的IP地址

编辑手记:在使用SSH连接数据库的时候,大多数的公有云服务通过IP地址与对应的VM服务器关联,这篇文章将会引导你查找Oracle公有云服务上连接到VM实例的IP...

3246
来自专栏杨建荣的学习笔记

DBCA静默建库中的两个小问题 (r9笔记第28天)

创建数据库,主要有手工建库,DBCA建库,OMF建库。手工建库会重新初始化数据字典,过程相对比较耗时,但是完全定制化;OMF建库的场景比较特别, 一般都是糅合在...

3434
来自专栏个人分享

hadoop-spark-hive-hbase配置相关说明

或者 ./runRemoteCmd.sh '~/och200/zookeeper/bin/zkServer-initialize.sh --myid=1' zo...

1062
来自专栏华仔的技术笔记

IPFS的配置安装

4987
来自专栏生信技能树

不可不知的基因组版本对应关系

不同版本对应关系 hg19,GRCH37和Ensembl75是三种国际生物信息学数据库资源收集存储单位,即NCBI,UCSC和ENSEMBL各自发布的基因组信息...

36910
来自专栏Netkiller

高级运维工程师面试题(更新中)

高级运维工程师 服务器硬件 RAID 磁盘阵列 简述 RAID? RAID 0 5 6 10 50 都适用于那些场景? 数据库适用那种 RAID? RAID 1...

5184
来自专栏别先生

一脸懵逼学习Nginx及其安装,Tomcat的安装

1:Nginx的相关概念知识:   1.1:反向代理:     反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然...

21210
来自专栏zhangdd.com

nginx每天自动切割日志脚本

nginx是现在应用比较广泛的轻量级web应用服务器,可做前端负载,也可以添加不同插件做应用服务器,比如直播 点播流媒体等

441

扫码关注云+社区