为什么需要工作流调度系统
一个完整的数据分析系统通常都是由大量任务单元组成:
shell脚本程序,java程序,mapreduce程序、hive脚本等
各任务单元之间存在时间先后及前后依赖关系
为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;
例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:
1、通过Hadoop先将原始数据同步到HDFS上;
2、借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
3、需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
4、将明细数据进行复杂的统计分析,得到结果报表信息;
5、需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
下载还jar包
我这里使用的是
azkaban-executor-server-2.5.0.tar.gz
azkaban-sql-script-2.5.0.tar.gz
azkaban-web-server-2.5.0.tar.gz
1.将jar包上传到linux下
2.创建目录azkaban
3.将三个半解压到azkaban目录下
[root@mini1 ~]# mkdir azkaban
[root@mini1 ~]# tar -zxvf azkaban-web-server-2.5.0.tar.gz -C usr/local/azkaban
[root@mini1 ~]# tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C usr/local/azkaban
[root@mini1 ~]# tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C usr/local/azkaban
[root@mini1 ~]# cd usr/local/azkaban/
[root@mini1 azkaban]# ll
总用量 12
drwxr-xr-x. 2 root root 4096 10月 19 16:27 azkaban-2.5.0
drwxr-xr-x. 7 root root 4096 10月 19 16:26 azkaban-executor-2.5.0
drwxr-xr-x. 8 root root 4096 10月 19 16:26 azkaban-web-2.5.0
[root@mini1 azkaban]# mv azkaban-web-2.5.0/ server
[root@mini1 azkaban]# mv azkaban-executor-2.5.0/ executor
[root@mini1 azkaban]# ll
总用量 12
drwxr-xr-x. 8 root root 4096 10月 19 16:26 azkaban-2.5.0
drwxr-xr-x. 7 root root 4096 10月 19 16:26 executor
drwxr-xr-x. 2 root root 4096 10月 19 16:27 server
将azkaban-2.5.0下的sql脚本 create-all-sql-2.5.0.sql 导入到mysql
create-all-sql-2.5.0.sql是一堆建表语句,如下
mysql -u root -p
mysql> create database azkaban;
Query OK, 1 row affected (0.01 sec)
mysql> use azkaban;
Database changed
mysql> source /usr/local/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
mysql> show tables;
±-----------------------+
| Tables_in_azkaban |
±-----------------------+
| active_executing_flows |
| active_sla |
| execution_flows |
| execution_jobs |
| execution_logs |
| project_events |
| project_files |
| project_flows |
| project_permissions |
| project_properties |
| project_versions |
| projects |
| properties |
| schedules |
| triggers |
±-----------------------+
[root@mini1 server]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
输入密钥库口令: //123456
再次输入新口令: //123456
您的名字与姓氏是什么?//可以不输入直接回车
[Unknown]:
您的组织单位名称是什么?//可以不输入直接回车
[Unknown]:
您的组织名称是什么?//可以不输入直接回车
[Unknown]:
您所在的城市或区域名称是什么?//可以不输入直接回车
[Unknown]:
您所在的省/市/自治区名称是什么?//可以不输入直接回车
[Unknown]: CN
该单位的双字母国家/地区代码是什么?//可以不输入直接回车
[Unknown]: CN
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=CN, C=CN是否正确?
[否]: y
输入 的密钥口令
(如果和密钥库口令相同, 按回车): //直接回车
[root@mini1 server]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp:是否覆盖"/etc/localtime"? y
[root@mini1 server]# date
2017年 10月 19日 星期四 16:47:57 CST
//需要让每台机器时间一致
完成上述工作后,将在当前目录生成 keystore 证书文件,将keystore 拷贝到 azkaban web服务器(server)根目录中.
[root@mini1 azkaban]# ll
总用量 16
drwxr-xr-x. 2 root root 4096 10月 19 16:53 azkaban-2.5.0
drwxr-xr-x. 7 root root 4096 10月 19 16:26 executor
-rw-r--r--. 1 root root 2224 10月 19 16:37 keystore
drwxr-xr-x. 8 root root 4096 10月 19 16:26 server
[root@mini1 azkaban]# cp keystore server/
azkaban web服务器(server)配置
进入azkaban web服务器安装目录 conf目录,修改azkaban.properties文件
[root@mini1 azkaban]# cd server/
[root@mini1 server]# ll
总用量 32
-rw-r--r--. 1 root root 105 4月 22 2014 azkaban.version
drwxr-xr-x. 2 root root 4096 4月 22 2014 bin
drwxr-xr-x. 2 root root 4096 10月 19 16:26 conf
drwxr-xr-x. 2 root root 4096 4月 22 2014 extlib
-rw-r--r--. 1 root root 2224 10月 19 16:55 keystore
drwxr-xr-x. 2 root root 4096 10月 19 16:26 lib
drwxr-xr-x. 2 root root 4096 4月 22 2014 plugins
drwxr-xr-x. 6 root root 4096 10月 19 16:26 web
-rw-r--r--. 1 root root 1022 4月 22 2014 azkaban.properties
-rw-r--r--. 1 root root 266 4月 22 2014 azkaban-users.xml
[root@mini1 conf]# vi azkaban.properties
#Azkaban Personalization Settings
azkaban.name=Test #服务器UI名称,用于服务器上方显示的名字
azkaban.label=My Local Azkaban #描述
azkaban.color=#FF3601 #UI颜色
azkaban.default.servlet.path=/index #
web.resource.dir=/root/azkaban/server/web/
#默认根web目录 建议最好写绝对路径,以免出现找不到文件错误
default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海 默认为美国
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager #用户权限管理默认类
user.manager.xml.file=/root/azkaban/server/conf/azkaban-users.xml
#用户配置,具体配置参加下文
#Loader for projects
executor.global.properties=/root/azkaban/serverconf/global.properties # global配置文件所在位置
azkaban.project.dir=projects #
database.type=mysql #数据库类型
mysql.port=3306 #端口号
mysql.host=localhost #数据库连接IP
mysql.database=azkaban #数据库实例名
mysql.user=root #数据库用户名
mysql.password=123456 #数据库密码
mysql.numconnections=100 #最大连接数
# Velocity dev mode
velocity.dev.mode=false # Jetty服务器属性.
jetty.maxThreads=25 #最大线程数
jetty.ssl.port=8443 #Jetty SSL端口
jetty.port=8081 #Jetty端口
jetty.keystore=/root/azkaban/server/keystore
#SSL文件名
jetty.password=123456 #SSL文件密码
jetty.keypassword=123456 #Jetty主密码 与 keystore文件相同
jetty.truststore=/root/azkaban/server/keystore
#SSL文件名
jetty.trustpassword=123456 # SSL文件密码
# 执行服务器属性
executor.port=12321 #执行服务器端口
# 邮件设置
[email protected] #发送邮箱
mail.host=smtp.163.com #发送邮箱smtp地址
mail.user=xxxxxxxx #发送邮件时显示的名称
mail.password= #邮箱密码
job.failure.email= #任务失败时发送邮件的地址
job.success.email= #任务成功时发送邮件的地址
lockdown.create.projects=false #
cache.directory=cache #缓存目录
[root@mini1 conf]# vi azkaban-users.xml
配置的只有第三行,是用来登录的用户名和密码
进入执行服务器安装目录conf,修改azkaban.properties
[root@mini1 azkaban]# cd executor/
[root@mini1 executor]# ll
总用量 24
-rw-r--r--. 1 root root 105 4月 22 2014 azkaban.version
drwxr-xr-x. 2 root root 4096 4月 22 2014 bin
drwxr-xr-x. 2 root root 4096 10月 19 16:26 conf
drwxr-xr-x. 2 root root 4096 4月 22 2014 extlib
drwxr-xr-x. 2 root root 4096 10月 19 16:26 lib
drwxr-xr-x. 2 root root 4096 4月 22 2014 plugins
[root@mini1 executor]# cd conf
[root@mini1 conf]# ll
总用量 8
-rw-r--r--. 1 root root 55 4月 22 2014 azkaban.private.properties
-rw-r--r--. 1 root root 469 4月 22 2014 azkaban.properties
-rw-r--r--. 1 root root 0 4月 22 2014 global.properties
[root@mini1 conf]# vi azkaban.properties
#Azkaban
default.timezone.id=Asia/Shanghai
# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes
#Loader for projects
executor.global.properties=executor.global.properties=/root/azkaban/executor/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
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
[root@mini1 bin]# ll
总用量 52
-rw-r--r--. 1 root root 9348 10月 19 17:51 azkaban-access.log
-rw-r--r--. 1 root root 18031 10月 19 17:51 azkaban-webserver.log
-rwxr-xr-x. 1 root root 161 4月 22 2014 azkaban-web-shutdown.sh
-rwxr-xr-x. 1 root root 1277 10月 19 17:18 azkaban-web-start.sh
-rwxr-xr-x. 1 root root 116 4月 22 2014 schedule2trigger.sh
-rwxr-xr-x. 1 root root 118 4月 22 2014 start-web.sh
drwxr-xr-x. 2 root root 4096 10月 19 17:48 temp
[root@mini1 bin]# ./azkaban-web-start.sh
...
2017/10/25 20:02:50.071 +0800 INFO [log] [Azkaban] Started [email protected]:8443
2017/10/25 20:02:50.071 +0800 INFO [AzkabanWebServer] [Azkaban] Server running on ssl port 8443.
[root@mini1 bin]# jps
1626 ResourceManager
2149 Jps
1520 NameNode
2125 AzkabanWebServer
进入executor的bin目录
[root@mini1 executor]# cd bin
[root@mini1 bin]# ll
总用量 28
-rw-r--r--. 1 root root 0 10月 19 17:36 azkaban-access.log
-rwxr-xr-x. 1 root root 305 4月 22 2014 azkaban-executor-shutdown.sh
-rwxr-xr-x. 1 root root 1347 10月 19 17:35 azkaban-executor-start.sh
-rw-r--r--. 1 root root 600 10月 19 17:38 azkaban-webserver.log
drwxr-xr-x. 3 root root 4096 10月 19 17:50 executions
drwxr-xr-x. 3 root root 4096 10月 19 17:50 projects
-rwxr-xr-x. 1 root root 130 4月 22 2014 start-exec.sh
drwxr-xr-x. 2 root root 4096 10月 19 17:50 temp
[root@mini1 bin]# ./azkaban-executor-start.sh
...
2017/10/25 20:03:19.505 +0800 INFO [AzkabanExecutorServer] [Azkaban] Azkaban Executor Server started on port 12321
2017/10/25 20:05:19.291 +0800 INFO [FlowRunnerManager] [Azkaban] Cleaning recently finished
启动出错主要就两种,刚好都让我遇到了,反正我每次安装各种服务都能遇到错。
Invalidmaximumheapsize:-Xmx4G
1
这种错是设置内存太大了,修改下启动脚本azkaban-web-start.sh,azkaban-executor-start.sh,将 AZKABAN_OPTS=”-Xmx4G” 修改为 AZKABAN_OPTS=”-Xmx512M”
这时候在启动又出现各种文件不存在的异常,这是我当时配置的时候都写的相对路径而且写错了,后来改成绝对路径就行了。上面的就是正确的绝对路径。