设为首页 收藏本站
查看: 1830|回复: 0

[经验分享] Oozie和Azkaban的技术选型和对比

[复制链接]

尚未签到

发表于 2017-3-2 08:41:14 | 显示全部楼层 |阅读模式
1 两种调度工具功能对比图
  下面的表格对上述2种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在区别

  特性

  Oozie

  Azkaban

  工作流描述语言

  XML (xPDL based)

  text file with key/value pairs

  依赖机制

  explicit

  explicit

  是否要web容器

  Yes

  Yes

  进度跟踪

  web page

  web page

  Hadoop job调度支持

  yes

  yes

  运行模式

  daemon

  daemon

  Pig支持

  yes

  yes

  事件通知

  no

  no

  需要安装

  yes

  yes

  支持的hadoop版本

  0.20+

  currently unknown

  重试支持

  workflownode evel

  yes

  运行任意命令

  yes

  yes

  Amazon EMR支持

  no

  currently unknown


1   Azkaban与Oozie对比
  对市面上最流行的两种调度器,给出以下详细对比。知名度比较高的应该是Apache Oozie,但是其配置工作流的过程是编写大量的XML配置,而且代码复杂度比较高,不易于二次开发。ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象
  l  功能
  两者均可以调度linux命令、mapreduce、spark、pig、java、hive、java程序、脚本工作流任务
  两者均可以定时执行工作流任务
  l  工作流定义
  Azkaban使用Properties文件定义工作流
  Oozie使用XML文件定义工作流
  l  工作流传参
  Azkaban支持直接传参,例如${input}
  Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
  l  定时执行
  Azkaban的定时执行任务是基于时间的
  Oozie的定时执行任务基于时间和输入数据
  l  资源管理
  Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
  Oozie暂无严格的权限控制
  l  工作流执行
  Azkaban有三种运行模式:
  1 solo server mode:最简单的模式,数据库内置的H2数据库,管理服务器和执行服务器都在一个进程中运行,任务量不大项目可以采用此模式。
  2       two server mode:数据库为mysql,管理服务器和执行服务器在不同进程,这种模式下,管理服务器和执行服务器互不影响
  3 multiple executor mode:该模式下,执行服务器和管理服务器在不同主机上,且执行服务器可以有多个
  我这次采用第二种模式,管理服务器、执行服务器分进程,但在同一台主机上。
  Oozie作为工作流服务器运行,支持多用户和多工作流
  l  工作流管理
  Azkaban支持浏览器以及ajax方式操作工作流
  Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流

3     Azkaban简介
  Azkaban是一种类似于Oozie的工作流控制引擎,可以用来解决多个Hadoop(或Spark等)离线计算任务之间的依赖关系问题。
  也可以用其代替crontab来对周期性任务进行调度,并且更为直观,可靠,同时提供了美观的可视化管理界面。
  l  azkaban由三部分构成:
  l  Relational Database(Mysql)
  l  azkaban将大多数状态信息都存于MySQL中,Azkaban Web Server 和 Azkaban Executor Server也需要访问DB。
  l  Azkaban Web Server
  l  提供了Web UI,是azkaban的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。
  l  Azkaban Executor Server
  l  调度工作流和任务,纪录工作流活任务的日志,之所以将AzkabanWebServer和AzkabanExecutorServer分开,主要是因为在某个任务流失败后,可以更方便的将重新执行。而且也更有利于Azkaban系统的升级
DSC0000.png


a)   安装
  参考
  http://blog.csdn.net/bbaiggey/article/details/50775568

i. 上传解压重命名



mkdir  /home/hadoop/azkaban
  将主要的3个jar先上传 解压
DSC0001.png

  解压,重命名(不是必要的步骤为了方便我选择重命名)



mv azkaban-web-2.5.0   / server
mv azkaban-executor-2.5.0  / executor
进入mysql
mysql -uroot -proot
mysql> create database azkaban;
mysql> use azkaban;
Database changed
#执行创建表的脚本
mysql> source /home/hadoop/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql ;
i. 创建SSL配置



命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA
  运行此命令后,会提示输入当前生成 keystore的密码及相应信息,输入的密码请劳记,信息如下:
  输入keystore密码:
  再次输入新密码:
  您的名字与姓氏是什么?
  [Unknown]:
  您的组织单位名称是什么?
  [Unknown]:
  您的组织名称是什么?
  [Unknown]:
  您所在的城市或区域名称是什么?
  [Unknown]:
  您所在的州或省份名称是什么?
  [Unknown]:
  #以上内容只需回车不用填写
  该单位的两字母国家代码是什么
  [Unknown]:  CN
  CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确吗?
  [否]:  y
  输入<jetty>的主密码
  (如果和 keystore 密码相同,按回车):
  再次输入新密码:
  完成上述工作后,将在当前目录生成 keystore 证书文件,将keystore 拷贝到 azkaban web服务器根目录中.如:



cp keystore server/
  i. 配置文件
  注:先配置好服务器节点上的时区(或者先date一下看看自己的时区是不是CST时区,如果是的话这一步可以省去)
  1、先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可
DSC0002.png

DSC0003.png

DSC0004.png

DSC0005.png

  1、拷贝该时区文件,覆盖系统本地时区配置



cp  /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
  azkaban web服务器配置
  进入azkaban web服务器安装目录 conf目录
  v  修改azkaban.properties文件
  命令vi azkaban.properties
  内容说明如下:



1. 修改时区和首页名称:
#Azkaban Personalization Settings
azkaban.name=Test                           #服务器UI名称,用于服务器上方显示的名字
azkaban.label=My Local Azkaban                               #描述
azkaban.color=#FF3601                                                 #UI颜色
azkaban.default.servlet.path=/index                         #
web.resource.dir=web/                                                 #默认根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    # global配置文件所在位置
azkaban.project.dir=projects                                                #
2. 修改 MySql 数据库配置
database.type=mysql                                                              #数据库类型
mysql.port=3306                                                                       #端口号
mysql.host=hadoop03                                                      #数据库连接IP
mysql.database=azkaban                                                       #数据库实例名
mysql.user=root                                                                 #数据库用户名
mysql.password=root                                                          #数据库密码
mysql.numconnections=100                                                  #最大连接数

# Velocity dev mode
velocity.dev.mode=false
3. 修改 Jetty 服务器属性,包括 keystore 的相关配置
# Jetty服务器属性.
jetty.maxThreads=25                                                               #最大线程数
jetty.ssl.port=8443                                                                   #Jetty SSL端口
jetty.port=8081                                                                         #Jetty端口
jetty.keystore=keystore                                                          #SSL文件名
jetty.password=123456                                                          #SSL文件密码, 创建keystore的密码
jetty.keypassword=123456                                                      #Jetty主密码 与 keystore文件相同
jetty.truststore=keystore                                                                #SSL文件名
jetty.trustpassword=123456                                                   # SSL文件密码

# 执行服务器属性
executor.host=slave1                                    #执行服务器ip,集群模式
executor.port=12321                                                               #执行服务器端口
4. 修改邮件设置(可选)
# 邮件设置
mail.sender=a8589781@163.com                                       #发送邮箱
mail.host=smtp.163.com                                                       #发送邮箱smtp地址
mail.user=xxxxxxxx                                       #发送邮件时显示的名称
mail.password=**********                                                 #邮箱密码
job.failure.email=a8589781@163.com                              #任务失败时发送邮件的地址
job.success.email=a8589781@163.com                            #任务成功时发送邮件的地址
lockdown.create.projects=false                                           #
cache.directory=cache                                                            #缓存目录
  v  azkaban 执行服务器配置
  进入执行服务器安装目录conf,修改azkaban.properties
  vi azkaban.properties



#Azkaban
default.timezone.id=Asia/Shanghai                                              #时区

# Azkaban JobTypes 插件配置
#azkaban.jobtype.plugin.dir=plugins/jobtypes                   #jobtype 插件所在位置(如果下载jobtypes插件 就配置对应文件,参考:http://blog.itpub.net/29754888/viewspace-1418203/)

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

#数据库设置
database.type=mysql                                                                       #数据库类型(目前只支持mysql)
mysql.port=3306                                                                                #数据库端口号
mysql.host=192.168.20.200                                                           #数据库IP地址
mysql.database=azkaban                                                                #数据库实例名
mysql.user=azkaban                                                                         #数据库用户名
mysql.password=oracle                                                                   #数据库密码
mysql.numconnections=100                                                           #最大连接数

# 执行服务器配置
executor.maxThreads=50                                                                #最大线程数
executor.port=12321                                                               #端口号(如修改,请与web服务中一致)
executor.flow.threads=30                                                                #线程数
  v  用户配置
  进入azkaban web服务器conf目录,修改azkaban-users.xml
  vi 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>
  注意:检查安载包web和executor的lib文件下是否有mysql驱动,若不存在,则拷贝一个

启动

1. web服务器
  在azkaban web服务器目录下执行启动命令



cd /home/hadoop/azkaban/server/
bin/azkaban-web-start.sh
  注:在web服务器根目录运行(一定要在根目录下执行因为配置文件中有一个conf/xxx 在其他目录下会找不到conf目录的)
  或者启动到后台



nohup bin/azkaban-web-start.sh  1>/tmp/azstd.out  2>/tmp/azerr.out & 或者 (nohup ./bin/azkaban-web-start.sh &  )
2.  执行服务器
  在执行服务器目录下执行启动命令



cd /home/hadoop/azkaban/executor/
bin/azkaban-executor-start.sh
  注:只能在执行服务器根目录运行
  也可以在后台运行:nohup ./bin/azkaban-executor-start.sh &  
  启动完成后,在浏览器(建议使用谷歌浏览器)中输入https://服务器IP地址:8443 ,即可访问azkaban服务了.在登录中输入刚才新的户用名及密码,点击 login.

a)   实例demo
  参考
  http://blog.csdn.net/lsshlsw/article/details/50831239


  • 创建工作任务

    创建.job为后缀的文件,type是工作任务类型执行会输出 Hello World



vim hello.job
type=command
command=sh hello.sh


#!/bin/bash
echo 'hello' > /home/hadoop/hello.txt
  放到同一个目录下然后进行压缩,目前只支持.zip格式的压缩文件


  • 创建工作流

    两个工作任务,通过dependencies进行关联



vim foo.job
type=command
command=echo foo


vim bar.job
type=command
dependencies=foo
command=echo bar
  工作流如下:

将会先调用foo再调用bar。
DSC0006.png


a)   调度hive



# hive.job
type=command
command=hive -f 'test.sql'


vim test.sql
use default;
drop table aztest if exists;
create table aztest(id int,name string) row format delimited fields terminated by ',';
load data inpath '/tmp/hadoop/aztest/' into table aztest;
create table az2 as select * from aztest;
  调度Spark任务Demo
  创建一个新的project
DSC0007.png




编写代码
写一段简单的Spark代码,将程序打包
package com.test
import org.apache.spark.{SparkConf, SparkContext}
object AzkabanTest extends App{
val conf = new SparkConf()
.setMaster("local[2]")
.setAppName("azkabanTest")
val sc = new SparkContext(conf)
val data = sc.parallelize(1 to 10)
data.map{_ * 2}.foreach(println)
}


编写调度命令
vim test.job
type=command
command=/usr/install/spark/bin/spark-submit --class com.test.AzkabanTest test-1.0-SNAPSHOT.jar
将这两个文件以zip的形式打包在一起
zip -r xxx.zip azkabanTest  
  上传工程
  目前azkaban只支持zip包,其中要包括.job文件以及一些需要的工程文件。
DSC0008.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-349036-1-1.html 上篇帖子: nginx初步尝试 下篇帖子: 技术分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表