@Arslan6and6
2016-08-29T02:23:02.000000Z
字数 4977
阅读 1150
第十二章、大数据协作框架之Oozie
---Oozie WorkFlow中Action练习及Coordinate使用
作业描述:
依据课堂讲解和官方 Reference,一步一步搭建 Oozie 环境和测试,详细记录整个过程,旨在培
养大家学习能力和动手能力,Oozie 的学习,重点在于前面 Hadoop 2.x 生态系统中常用框架的
掌握和细节,以下几点要着重注意:
1)Hadoop 2.x 生态系统中常见几种开源的调度框架,各自优势
2)Oozie 工作流调度框架的三大功能及架构
3)完成 Oozie 安装部署测试
4)认真阅读 Oozie 官方文档,提升英文阅读能力,细节决定成败
Azkaban是由Linkedin开源的一个批量工作流任务调度器。Azkaban来自LinkedIn公司,用于管理他们的Hadoop批处理工作流。日常生产环境中,为了得到想要的数据,通常需要执行很多作业,一批作业执行完毕,再将中间结果进一步处理,最后得到有价值的数据,因此作业之间执行有先后顺序和依赖关系。这样的一组作业称为一个工作流,Azkaban就是用来构建、运行和管理工作流的工具,它提供友好的Web用户界面来维护和跟踪用户的工作流程。Azkaban已经在LinkedIn运行了好几年,管理着很多Hadoop和数据仓库作业流,具有很强的可用性。
简单来讲,它有几个特点:
兼容各个版本的hadoop
用户可通过web页面提交工作流,方便上传工作流,方便设置任务之间的关系
工作流调度
系统模块化和可插拔的插件机制
用户认证和权限验证
用户操作追踪
任务执行结果邮件报警
按照SLA执行报警和杀作业
失败作业重试,能够杀死并重新启动工作流
项目工作区
工作流和任务的日志记录和审计
Azkaban目前有2个大版本,azkaban1.x和azkaban2.x,1系结构比较简单,不需要依赖数据库,执行器和调度器以及webServer都集成在一起,缺点是没有用户和权限管理,其它功能不够丰富,随着用户规模增大和系统健壮性需求,azkaban系统演进到最新2.x版本。
Azkaban 2由三个重要的组件组成
Azkaban Web Server:Azkaban使用Jetty作为Web服务器,除了提供web页面响应服务,还负责项目管理,认证,调度,监控和发起执行,它是azkaban的大脑。
Azkaban Executor Server:负责作业的执行,对执行过程及结果进行监控,并将执行状况汇报给Azkaban Web Server,两者采用http接口进行通信。
MySQL: 负责存储azkaban系统的数据,包括用户上传的工作流文件、作业执行的日志等。Executor Server和Web Server都通过jdbc频繁地对其操作。
Azkaban里面除了按时间指定任务何时启动,还可以指定任务周期:就是任务的重复执行频率。这对于那些需要每天或每小时重复执行的任务很有用。除了设置时间,还能设置任务的失败策略和报警机制。比如可以选择是第一次失败就报警,还是整个流完成后报警。对于工作流中的单个任务还可以设置是否启动。
Azkaban支持可插拔的扩展插件,以便提供更多功能,更好的支持其他系统。例如hdfs查看插件可以查看hadoop上的文件。而job类型插件则能够定义具体的任务的启动和执行方式,包括hive,pig等。用户可以方便的扩展插件来支持不同的hadoop版本,或者支持其他的系统。
一个登陆用户对一个项目可以有以下五种权限:
ADMIN:最高权限,可以胡作非为,包括添加其它用户权限和删除项目
READ:查看作业、工作流、和相关日志
WRITE:上传、修改项目工作流文件
EXECUTE:执行、暂停、取消作业。execute, pause, cancel jobs
SCHEDULE:添加、修改、删除工作流调度命令
一个基于工作流引擎的开源框架,是由Cloudera公司贡献给Apache的,它能够提供对HadoopMapReduce和PigJobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。
Oozie工作流定义,同JBoss jBPM提供的jPDL一样,也提供了类似的流程定义语言hPDL,通过XML文件格式来实现流程的定义。对于工作流系统,一般都会有很多不同功能的节点,比如分支、并发、汇合等等。
Oozie定义了控制流节点(Control Flow Nodes)和动作节点(Action Nodes),其中控制流节点定义了流程的开始和结束,以及控制流程的执行路径(Execution Path),如decision、fork、join等;而动作节点包括Hadoop map-reduce、Hadoop文件系统、Pig、SSH、HTTP、eMail和Oozie子流程。
Workflow:顺序执行流程节点
Coordinator:定时触发workflow
Bundle Job:绑定多个coordinator
###Zeus
宙斯是一个完整的Hadoop的作业平台
从Hadoop任务的调试运行到生产任务的周期调度 宙斯支持任务的整个生命周期
宙斯系统具有强大的功能,包括但不限于一下一些内容:
Hadoop MapReduce任务的调试运行
Hive任务的调试运行
Shell任务的运行
Hive元数据的可视化查询与数据预览
Hadoop任务的自动调度
完整的文档管理
完善的权限管理系统
完善的报警机制
分布式设计,水平扩展
Oozie三大实现功能:
Workflow:顺序执行流程节点
Coordinator:定时触发workflow
Bundle Job:绑定多个coordinator
控制流节点(Control Flow Nodes)简易流程图
下图同样为流节点流程图,根据图中显示oozie 支持MR job 、Pig job 、Hive jog,以及分支合并流程。
下图为 wordcount 简单 workflow 配置
workflow定义了各个工作流的执行顺序,而 coordinator 定义了 workflow 的 起始时间 及周期。
1、安装hadoop
2、下载解压oozie的安装包
3、添加配置core-site.xml
<property>
<name>hadoop.proxyuser.beifeng.hosts</name>
<value>hadoop-senior.ibeifeng.com</value>
</property>
<property>
<name>hadoop.proxyuser.beifeng.groups</name>
<value>*</value>
</property>
4.解压hadooplibs,在oozie安装目录下并创建libext
tar -zxf oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz -C /opt/modules/
5.拷贝hadooplibs/hadooplib-2.5.0-cdh5.3.6.oozie-4.0.0-cdh5.3.6下jar到libext
6.ExtJS压缩包拷贝到libext
7.安装mysql数据库(已安装),并创建数据库,命名为oozie,然后拷贝mysql驱动包到oozie-4.0.0-cdh5.3.6/libext
修改oozie-site.conf
<property>
<name>oozie.service.JPAService.jdbc.driver</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>oozie.service.JPAService.jdbc.url</name>
<value>jdbc:mysql://hadoop-senior.ibeifeng.com:3306/oozie</value>
</property>
<property>
<name>oozie.service.JPAService.jdbc.username</name>
<value>root</value>
</property>
<property>
<name>oozie.service.JPAService.jdbc.password</name>
<value>123</value>
</property>
<property>
<name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
<value>*=/opt/modules/hadoop-2.5.0-cdh5.3.6/etc/hadoop</value>
</property>
8.执行以下命令
bin/oozie-setup.sh prepare-war 生成war包供tomcat访问
bin/oozie-setup.sh db create -run oozie.sql 创建数据库
bin/oozie-setup.sh sharelib create -fs hdfs://hadoop-senior.ibeifeng.com:8020 -locallib oozie-sharelib-4.0.0-cdh5.3.6-yarn.tar.gz 把sharelib分享到HDFS
9.启动oozie
bin/oozied.sh start
10.定义一个workflow
解压/opt/modules/oozie-4.0.0-cdh5.3.6/oozie-examples.tar.gz得到 examples 文件夹
修改/opt/modules/oozie-4.0.0-cdh5.3.6/examples/apps/map-reduce/job.properties
nameNode=hdfs://hadoop-senior.ibeifeng.com:8020
jobTracker=hadoop-senior.ibeifeng.com:8032
不必修改/opt/modules/oozie-4.0.0-cdh5.3.6/examples/apps/map-reduce/workflow.xml
然后上传examples 文件夹到HDFS
[beifeng@hadoop-senior hadoop-2.5.0-cdh5.3.6]$ bin/hdfs dfs -put /opt/modules/oozie-4.0.0-cdh5.3.6/examples/ examples
11.运行一个简单的workflow
$ bin/oozie job -oozie http://hadoop-senior.ibeifeng.com:11000/oozie -config examples/apps/map-reduce/job.properties -run
Error: E0501 : E0501: Could not perform authorization operation, Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.; Host Details : local host is: "hadoop-senior.ibeifeng.com/192.168.5.130"; destination host is: "hadoop-senior.ibeifeng.com":8088;
[beifeng@hadoop-senior oozie-4.0.0-cdh5.3.6]$ bin/oozie job -oozie http://hadoop-senior.ibeifeng.com:11000/oozie -config examples/apps/map-reduce/job.properties -run
job: 0000000-160602172105408-oozie-beif-W