- 一个完整的数据分析系统一般都是由大量任务单元组成:shell 脚本程序,java 程序,mapreduce 程序、hive 脚本等
- 各任务单元之间存在时间前后及先后依赖关系
- 为了很好地组织起这样的复杂执行计划,须要一个工做流调度系统来调度执行 html
在 hadoop 领域,常见的工做流调度器有 Oozie, Azkaban,Cascading,Hamake 等 。java
目前企业中最流行的两种调度器是Oozie与Azkaban。总的来讲ooize 相比 azkaban 是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。若是能够不在乎某些功能的缺失,轻量级调度器 azkaban 是很不错的候选对象。
两者的区别能够从如下的几个方面进行描述:
功能
二者都可以调度 mapreduce,pig,java,脚本工做流任务二者都可以定时执行工做流任务
工做的定义
Azkaban 使用 Properties 文件定义工做流
Oozie 使用 XML 文件定义工做流
工做流传参
Azkaban 支持直接传参,例如${input}
Oozie 支持参数和 EL 表达式,例如${fs:dirSize(myInputDir)} strust2(ONGL)
定时执行
Azkaban 的定时执行任务是基于时间的
Oozie 的定时执行任务基于时间和输入数据
资源管理
Azkaban 有较严格的权限控制,如用户对工做流进行读/写/执行等操做
Oozie 暂无严格的权限控制
工做流执行
Azkaban 有两种运行模式,分别是 solo server mode(executor server 和 web server 部署在同一台节点)和 multi server mode(executor server 和 web server 能够部署在不一样节点)
Oozie 做为工做流服务器运行,支持多用户和多工做流
工做流管理
Azkaban 支持浏览器以及 ajax 方式操做工做流
Oozie 支持命令行、HTTP REST、Java API、浏览器操做工做流mysql
Azkaban 是由 Linkedin 开源的一个批量工做流任务调度器。用于在一个工做流内以一个特定的顺序运行一组工做和流程。Azkaban 定义了一种 KV 文件(properties)格式来创建任务之间的依赖关系,并提供一个易于使用的 web 用户界面维护和跟踪你的工做流。
Azkaban的功能特色git
Azkaban的实战安装:
安装包:
Azkaban Web 服务器:azkaban-web-server-2.5.0.tar.gz
Azkaban Excutor 执行服务器:azkaban-executor-server-2.5.0.tar.gz
Azkaban 初始化脚本文件:azkaban-sql-script-2.5.0.tar.gz
下载地址:http://azkaban.github.io/downloads.html
① 解压安装包github
[root@hadoop03 ~]# tar -zxvf azkaban-web-server-2.5.0.tar.gz -C apps/ azkaban/ [root@hadoop03 ~]# tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C apps/ azkaban/ [root@hadoop03 ~]# tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C apps/ azkaban/
②安装 Azkaban 脚本导入web
[root@hadoop03 ~]# tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C apps/ azkaban/ #进入MySQL执行脚本: mysql> create database azkaban; Query OK, 1 row affected (0.01 sec) mysql> use azkaban; Database changed mysql> source /home/hadoop/apps/azkaban/azkaban-script-2.5.0/create-all-sql-2.5.0.sql;
③建立 SSL 配置ajax
#最好是在azkaban 目录下: [root@hadoop03 ~]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
#此命令执行以后会提示输入当前生成 keystore 的密码及相应信息,输入密码请劳记,信息以下:
而后将在当前目录生成 keystore 证书文件,将 keystore 拷贝到 azkaban web 服务器根目录中.如:sql
[root@hadoop03 ~]#cp keystore azkaban/azkaban-web-2.5.0
④修改配置文件shell
#先配置好服务器节点上的时区 先生成时区配置文件 Asia/Shanghai,用交互式命令 tzselect 便可 拷贝该时区文件,覆盖系统本地时区配置 [hadoop@hadoop03 ~]$ sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #azkaban web 服务器配置进入 azkaban web 服务器安装目录 conf 目录 [hadoop@hadoop03 ~]$ cd apps/azkaban/azkaban-web-2.5.0/conf/
#修改 azkaban.properties 文件数据库
#用户配置,具体配置参加下文 #Loader for projects # global 配置文件所在位置 executor.global.properties=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/conf/global.properties azkaban.project.dir=projects #数据库类型 database.type=mysql #端口号 mysql.port=3306 #数据库链接 IP mysql.host=hadoop03 #数据库实例名 mysql.database=azkaban #数据库用户名 mysql.user=root #数据库密码 mysql.password=root #最大链接数 mysql.numconnections=100 #Velocity dev mode velocity.dev.mode=false #Jetty 服务器属性. #最大线 程数 jetty.maxThreads=25 #Jetty SSL 端口 jetty.ssl.port=8443 #Jetty 端口 jetty.port=8081 #SSL 文件名 jetty.keystore=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/keystore #SSL 文件密码 jetty.password=hadoop #Jetty 主密码 与 keystore 文件相同 jetty.keypassword=hadoop #SSL 文件名 jetty.truststore=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/keystore # SSL 文件密码 jetty.trustpassword=hadoop # 执行服务器属性 executor.port=12321 #执行服务器端口 # 邮件设置(可选项) mail.sender=xxxxxxxx@163.com #发送邮箱 mail.host=smtp.163.com #发送邮箱 smtp 地址 mail.user=xxxxxxxx #发送邮件时显示的名称 mail.password=********** #邮箱密码 job.failure.email=xxxxxxxx@163.com #任务失败时发送邮件的地址 job.success.email=xxxxxxxx@163.com #任务成功时发送邮件的地址 lockdown.create.projects=false # cache.directory=cache #缓存目录
#进入 azkaban web 服务器 conf 目录,修改 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 执行服务器 executor 配置,进入执行服务器安装目录 conf,修改 azkaban.properties
#Azkaban default.timezone.id=Asia/Shanghai #时区 #Azkaban JobTypes 插件配置,插件所在位置 azkaban.jobtype.plugin.dir=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/plugins/jobtypes #Loader for projects executor.global.properties=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/conf/global.properties azkaban.project.dir=projects #数据库设置 #数据库类型(目前只支持 mysql) database.type=mysql #数据库端口号 mysql.port=3306 #数据库 IP 地址 mysql.host=hadoop03 #数据库实例名 mysql.database=azkaban #数据库用 户名 mysql.user=root #数据库密码 mysql.password=root #最大链接数 mysql.numconnections=100 #执行服务器配置 #最大线程数 executor.maxThreads=50 #端口号(如修改,请与 web 服务中一致) executor.port=12321 #线程数 executor.flow.threads=30
⑤配置环境变量
[hadoop@hadoop03 ~]$ vim /etc/profile
#/etc/profile export AZKABAN_WEB_HOME=/home/hadoop/apps/azkaban/azkaban-web-2.5.0 export AZKABAN_EXE_HOME=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0 export PATH=$PATH:$AZKABAN_WEB_HOME/bin:$AZKABAN_EXE_HOME/bin
⑥启动
#启动 web 服务器
nohup azkaban-web-start.sh 1>/home/hadoop/azwebstd.out 2>/home/hadoop/azweberr.out &
#启动执行服务器
nohup azkaban-executor-start.sh 1>/home/hadoop/azexstd.out 2>/home/hadoop/azexerr.out &
⑥验证是否登陆成功
在浏览器中输入:https://hadoop03:8443/
看到以上界面表示安装成功!!!!
小编这里建议将Azkaban 的web、executor配置文件,全部的相对路径都换成绝对路径,否则常常会报出文件找不到的问题!!!!
缘由是:在azkaban的server和executor中缺乏一个叫derby.jar的包
解决:在已经安装的JDK中:
cp $JAVA_HOME/db/lib/derby.jar $AZKABAN_WEB_HOME/extlib cp $JAVA_HOME/db/lib/derby.jar $AZKABAN_EXE_HOME/extlib
若是遇到与MySQL的权限问题:
请参考:http://www.javashuo.com/article/p-hgffexae-dd.html 文章。
①建立job :command.job
#command.job type=command command=echo 'hello'
②将 job 资源文件打包
[hadoop hadoop03@~ ]$ zip command.job
③经过 azkaban web 管理平台建立 project 并上传压缩包