博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开源任务管理框架oozie学习
阅读量:5248 次
发布时间:2019-06-14

本文共 5245 字,大约阅读时间需要 17 分钟。

1、  oozie简介

应用背景:在工作中,可能需要好几个Hadoop作业(job)来协作完成,往往一个job的输出会被当做另一个job的输入来使用,这个时候就涉及到了数据流的处理。

我们不可能就盯着程序,等它运行完再去运行下一个程序,所以,一般的做法就是通过shell来做,但是如果涉及到的工作流很复杂(比方说有1,2,3,4四个作业,1的输出作为2 3 4的输入,然后2 3的结果运算之后再和1的结果进行某种运算……最后再输出)是很费时费力的。这里就用到了oozie——一个能把多个MR作业组合为一个逻辑工作单元(一个工作流),从而自动完成任务调用的工具。

 oozie字面释义为训象人,是一个基于Hadoop的开源工作流调度框架,运行在内置的Tomcat中,支持多种Hadoop类型作业调度,如常见的MapReduce、hive、spark、shell脚本等任务。

特点:1)、基于Hadoop的任务流的任务调度系统;(任务流基于workflow.xml配置文件去定义,主要围绕Hadoop的平台组件的任务调度);

2)  、工作流是由action组成的有向无环图(DAG);

3)、多个workflow(任务流)可以组成一个coordinator(协调器),多个coordinator可以抽象成bundle。coordinator job是由时间(频率)和数据可用性触发的重复的workflow jobs;

4)、支持Hadoop平台的多种任务类型,如Java map-reduce, Streaming map-reduce, Pig, Hive, Sqoop and Distcp,同时也支持Java 程序和shell脚本等;

5)、oozie是一个可伸缩、高可用、可扩展的系统;(基于Hadoop平台而言)

 oozie 安装:1)从Apache官网下载源码,通过maven编译生成安装包,mkdistro.sh脚本编译需要指定Hadoop、hive、spark等版本号,根据版本获取依赖包,生成安装文件;

 

2)、编译成功之后会在distro/target下生成一个oozie-4.3.1-distro.tar.gz 安装文件,解压安装文件,将oozie.war增加extjs 包和数据库jdbc连接包之后,从先打包成新的war包;

3)、通过oozie.sql 创建数据库,导入环境变量,执行oozie-run.sh,启动成功,界面为11000端口访问:

 

2、 oozie的架构及实现原理

组件架构图如下:

原理:oozie对工作流的编排,是基于workflow.xml文件来完成的,用户预先将工作流执行规则定制于workflow.xml文件中,并在job.properties配置相关的参数,然后由oozie server 向服务器提交一个JOB来启动工作流。

工作流由两种节点组成,分别为控制流节点和执行节点:

控制流节点(Control Flow Nodes):控制工作流的执行路径,包括start、end、kill、decision、fork、join等;

行为节点(Action Nodes):决定每个操作执行的任务类型,包括map-reduce,java,hive,shell,pig等;

3、工作流配置

一个oozie 的 job 一般由以下文件组成(文件需要上传到HDFS,不支持本地运行):

job.properties :记录了job的属性;

workflow.xml :定义任务的流程和分支;

lib目录:用来执行具体的任务,也就是我们需要执行的jar包或命令文件;

job.properties 配置文件:

nameNode=hdfs://127.0.0.1:8020    //HDFS 地址jobTracker=127.0.0.1:8032         // 配置resourcemanager地址queueName=default           //oozie队列名称(默认default)examplesRoot=examples       //全局目录(默认examples)oozie.use.system.libpath=true   //是否加载用户lib目录oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/spark//任务流地址(workflow.xml所在地址)//user.name 当前用户

workflow.xml 配置文件:

spark action:

...
[JOB-TRACKER]
[NAME-NODE]
//任务启动之前执行文件操作
...
...
[SPARK SETTINGS FILE]
//指定spark job的配置文件,多个配置文件可以配置多个标签
//需要对spark进行定义的配置属性,如name为mapred.compress.map.output,value为true
[PROPERTY-NAME]
[PROPERTY-VALUE]
...
[SPARK MASTER URL]
//yarn-cluster 、yarn-master等
[SPARK MODE]
//spark 运行模式client、cluster等
[SPARK JOB NAME]
//job name
[SPARK MAIN CLASS]
[SPARK DEPENDENCIES JAR / PYTHON FILE]
// jar包或python文件,多个以,分隔
[SPARK-OPTIONS]
//传递给driver的参数,如—conf,--driver-memory 等
[ARG-VALUE]
//指定spark job参数,如inputpath,value等 ...
//执行成功之后下一个执行action
//执行失败之后下一个执行action
...
hive action:
...
[JOB-TRACKER]
[NAME-NODE]
...
...
[HIVE SETTINGS FILE]
[PROPERTY-NAME]
[PROPERTY-VALUE]
...
[jdbc:hive2://HOST:10000/default]
[PASS]
//指定hive脚本的执行文件
[PARAM-VALUE] //对hive脚本中定义的变量进行值传递 ...
[PARAM-VALUE]
[ARG-VALUE]
//beeline 命令行的参数值传递 ...
...

4、例子

以自带的example为示例,配置job.properties:

public final class SparkFileCopy {    public static void main(String[] args) throws Exception {        if (args.length < 2) {            System.err.println("Usage: SparkFileCopy 
"); System.exit(1); } SparkConf sparkConf = new SparkConf().setAppName("SparkFileCopy"); JavaSparkContext ctx = new JavaSparkContext(sparkConf); JavaRDD
lines = ctx.textFile(args[0]); lines.saveAsTextFile(args[1]); System.out.println("Copied file from " + args[0] + " to " + args[1]); ctx.stop(); }}

任务提交命令:oozie job -oozie http://127.0.0.1:11000/oozie -config job.properties  -run

job.properties 配置:

nameNode=hdfs://127.0.0.1:8020jobTracker=127.0.0.1:8032master=yarn-clientqueueName=defaultexamplesRoot=examplesoozie.use.system.libpath=trueoozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/spark

转载于:https://www.cnblogs.com/lihao7/p/10268204.html

你可能感兴趣的文章
3.PHP 教程_PHP 语法
查看>>
Duilib扩展《01》— 双击、右键消息扩展
查看>>
利用Fiddler拦截接口请求并篡改数据
查看>>
python习题:unittest参数化-数据从文件或excel中读取
查看>>
在工程中要加入新的错误弹出方法
查看>>
PS 滤镜— — sparkle 效果
查看>>
网站产品设计
查看>>
代理ARP
查看>>
go 学习笔记(4) ---项目结构
查看>>
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>
Paper Reading: Relation Networks for Object Detection
查看>>
day22 01 初识面向对象----简单的人狗大战小游戏
查看>>
mybatis源代码分析:深入了解mybatis延迟加载机制
查看>>
Flask三剑客
查看>>
Hibernate-缓存
查看>>
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
提高PHP性能的10条建议
查看>>
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>
熟用TableView
查看>>