azkaban工作流调度器

azkaban简介

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

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

它有如下功能特点:

  • Web用户界面
  •  方便上传工作流
  •  方便设置任务之间的关系
  •  调度工作流
  • 认证/授权(权限的工作)
  • 能够杀死并重新启动工作流
  •  模块化和可插拔的插件机制
  •  项目工作区
  • 工作流和任务的日志记录和审计

azkaban安装部署

首先下载azkaban安装包:

 1.Azkaban Web服务器:azkaban-web-server-2.5.0.tar.gz  

 2.Azkaban执行服务器:azkaban-executor-server-2.5.0.tar.gz

 3.Azkaban的sql建表脚本:azkaban-sql-script-2.5.0.tar.gz

将安装文件上传到集群,最好上传到安装 hive、sqoop的机器上,方便命令的执行

root@s100:~/Downloads# mkdir  /root/azkaban

root@s100:~/Downloads# tar  xf  azkaban-web-server-2.5.0.tar.gz -C  /root/azkaban/
root@s100:~/Downloads# tar  xf  azkaban-executor-server-2.5.0.tar.gz -C  /root/azkaban/

root@s100:~# cd azkaban/
root@s100:~/azkaban# mv  azkaban-web-2.5.0  server
root@s100:~/azkaban# mv  azkaban-executor-2.5.0  executor

创建zakaban数据库,将azkaban建表sql导入到azkaban数据库中,目前azkaban只支持 mysql,这里使用外部的mysql数据库

#进入mysql
mysql> create database azkaban;
mysql> use azkaban;
Database changed
mysql> source d:\azkaban-2.5.0\create-all-sql-2.5.0.sql;

因为azkaban需要使用https协议来连接,所以这里需要使用ssl配置来创建安全连接证书

root@s100:~/azkaban# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password:  
Re-enter new password: 
What is your first and last name?
  [Unknown]:  goser
What is the name of your organizational unit?
  [Unknown]:  tech
What is the name of your organization?
  [Unknown]:  ruinan
What is the name of your City or Locality?
  [Unknown]:  Shanghai
What is the name of your State or Province?
  [Unknown]:  shanghai
What is the two-letter country code for this unit?
  [Unknown]:  CN
Is CN=goser, OU=tech, O=ruinan, L=Shanghai, ST=shanghai, C=CN correct?
  [no]:  y

Enter key password for <jetty>
        (RETURN if same as keystore password):  

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".

#完成上述工作后,将在当前目录生成 keystore 证书文件拷贝到 azkaban web服务器根目录中.
root@s100:~/azkaban# cp  keystore server/

由于azkaban需要根据系统的计划安排来做调度,就需要配置时区

root@s100:~/azkaban# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#如果/Asia/Shanghai时区不存在,就需要使用用交互式命令 tzselect来创建

azkaban web服务器配置

root@s100:~/azkaban/server/conf# vim  azkaban.properties 

#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=192.168.1.3
mysql.database=azkaban
mysql.user=root
mysql.password=123
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=
mail.host=
job.failure.email=
job.success.email=

lockdown.create.projects=false

cache.directory=cache

azkaban web用户配置

root@s100:~/azkaban/server/conf# vim  azkaban-users.xml 

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

azkaban 执行服务器配置

root@s100:~/azkaban/executor/conf# vim  azkaban.properties 

#Azkaban
default.timezone.id=Asia/Shanghai

# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects

database.type=mysql
mysql.port=3306
mysql.host=192.168.1.3
mysql.database=azkaban
mysql.user=root
mysql.password=123
mysql.numconnections=100

# Azkaban Executor settings
executor.maxThreads=50

启动azkaban的web服务和执行服务

root@s100:~/azkaban/executor# bin/azkaban-web-start.sh 
root@s100:~/azkaban/executor# bin/azkaban-executor-start.sh 

通过https://192.168.1.100:8443来连接azkaban服务,使用admin用户,admin密码登录azkaban服务,界面如下:

登录azkaban后就可以创建project,在project下就可以创建job了,例如创建一个操作hdfs的job

# fs.job
#job的类型为command命令
type=command
#command命令可以直接写命令,也可以写shell脚本,如command=/bin/bash test.sh
#如果有脚本的话,这个脚本要和job文件一起打包成一个zip文件
command=/home/hadoop/app/hadoop-2.6.4/bin/hadoop fs -mkdir /azaz

  然后将这个job文件打包成一个zip文件上传到azkaban项目中,最后执行这个job即可

  job执行成功后就可以到hadoop上验证是否执行成功

下面运行一个job,让azkaban来调用hive处理数据

  首先创建一个job

# hivef.job
type=command
command=/soft/hive/bin/hive -f 'test.sql'

  根据job定义的command还需要一个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; 

  准备需要上传到表aztest中的数据,在hadoop上创建两个目录

root@s100:/soft/flume/conf# hadoop fs  -mkdir  -p  /aztest/hiveinput
root@s100:/soft/flume/conf# hadoop fs  -mkdir  -p  /aztest/hiveoutput
root@s100:~# hadoop fs  -put  az.data  /aztest/hiveinput

  最后将hivef.job和test.sql打包成一个zip文件hive.zip上传到azkaban执行即可。执行的结果就是在hadoop的/aztest/hiveoutput/下生成了一个统计数据

当然也可以通过azkaban来调用mr的操作,只要写个mr的job即可。。。。

posted @ 2018-05-12 17:57  goser  阅读(220)  评论(0)    收藏  举报