[关闭]
@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 官方文档,提升英文阅读能力,细节决定成败

1)Hadoop 2.x 生态系统中常见几种开源的调度框架,各自优势

Azkaban

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由三个重要的组件组成
image_1ak65ao0r1e7p1fuq117s11rt1k5p9.png-23.5kB
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:添加、修改、删除工作流调度命令


Oozie

一个基于工作流引擎的开源框架,是由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子流程。

Oozie三大实现功能:

Workflow:顺序执行流程节点
Coordinator:定时触发workflow
Bundle Job:绑定多个coordinator


###Zeus
宙斯是一个完整的Hadoop的作业平台
从Hadoop任务的调试运行到生产任务的周期调度 宙斯支持任务的整个生命周期

宙斯系统具有强大的功能,包括但不限于一下一些内容:

Hadoop MapReduce任务的调试运行
Hive任务的调试运行
Shell任务的运行
Hive元数据的可视化查询与数据预览
Hadoop任务的自动调度
完整的文档管理
完善的权限管理系统
完善的报警机制
分布式设计,水平扩展

2)Oozie 工作流调度框架的三大功能及架构

Oozie三大实现功能:
Workflow:顺序执行流程节点
Coordinator:定时触发workflow
Bundle Job:绑定多个coordinator

控制流节点(Control Flow Nodes)简易流程图
image_1ak8ntltjtfktvkoqbj9p9ht2a.png-96kB

下图同样为流节点流程图,根据图中显示oozie 支持MR job 、Pig job 、Hive jog,以及分支合并流程。
image_1ak8ofshb1fuk1aej9eua0td7134.png-58.2kB

下图为 wordcount 简单 workflow 配置
image_1ak8o112m1mgf1pnq1lr91158sf02n.png-223.9kB

workflow定义了各个工作流的执行顺序,而 coordinator 定义了 workflow 的 起始时间 及周期。
image_1ak8otcabiloqqvcb0156ae313h.png-59.4kB

3)完成 Oozie 安装部署测试

1、安装hadoop
2、下载解压oozie的安装包
3、添加配置core-site.xml

  1. <property>
  2. <name>hadoop.proxyuser.beifeng.hosts</name>
  3. <value>hadoop-senior.ibeifeng.com</value>
  4. </property>
  5. <property>
  6. <name>hadoop.proxyuser.beifeng.groups</name>
  7. <value>*</value>
  8. </property>

4.解压hadooplibs,在oozie安装目录下并创建libext

  1. 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

  1. <property>
  2. <name>oozie.service.JPAService.jdbc.driver</name>
  3. <value>com.mysql.jdbc.Driver</value>
  4. </property>
  5. <property>
  6. <name>oozie.service.JPAService.jdbc.url</name>
  7. <value>jdbc:mysql://hadoop-senior.ibeifeng.com:3306/oozie</value>
  8. </property>
  9. <property>
  10. <name>oozie.service.JPAService.jdbc.username</name>
  11. <value>root</value>
  12. </property>
  13. <property>
  14. <name>oozie.service.JPAService.jdbc.password</name>
  15. <value>123</value>
  16. </property>
  17. <property>
  18. <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
  19. <value>*=/opt/modules/hadoop-2.5.0-cdh5.3.6/etc/hadoop</value>
  20. </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

  1. nameNode=hdfs://hadoop-senior.ibeifeng.com:8020
  2. jobTracker=hadoop-senior.ibeifeng.com:8032

不必修改/opt/modules/oozie-4.0.0-cdh5.3.6/examples/apps/map-reduce/workflow.xml
然后上传examples 文件夹到HDFS

  1. [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

image_1ak8jmclc14mddhk1alq13a2cu29.png-47kB

11.运行一个简单的workflow

  1. $ bin/oozie job -oozie http://hadoop-senior.ibeifeng.com:11000/oozie -config examples/apps/map-reduce/job.properties -run
  2. 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;
  3. [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
  4. job: 0000000-160602172105408-oozie-beif-W

image_1ak8mihj59v2jq611bq4l9nqnm.png-19.9kB

image_1ak8msdl9117srk017sl1d6pvcj13.png-89.4kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注