Oozie 快速入门

设想一下,当你的系统引入了spark或者hadoop以后,基于Spark和Hadoop已经做了一些任务,比如一连串的Map Reduce任务,但是他们之间彼此右前后依赖的顺序,因此你必须要等一个任务执行成功后,再手动执行第二个任务。是不是很烦! 这个时候Oozie(驯象人,典故来自评论一楼)就派上用场了,它可以把多个任务组成一个工作流,自动完成任务的调用。

简介

Oozie是一个基于工作流引擎的服务器,可以在上面运行Hadoop的Map Reduce和Pig任务。它其实就是一个运行在Java Servlet容器(比如Tomcat)中的Javas Web应用。

对于Oozie来说,工作流就是一系列的操作(比如Hadoop的MR,以及Pig的任务),这些操作通过有向无环图的机制控制。这种控制依赖是说,一个操作的输入依赖于前一个任务的输出,只有前一个操作完全完成后,才能开始第二个。

Oozie工作流通过hPDL定义(hPDL是一种XML的流程定义语言)。工作流操作通过远程系统启动任务。当任务完成后,远程系统会进行回调来通知任务已经结束,然后再开始下一个操作。

Oozie工作流包含控制流节点以及操作节点

控制流节点定义了工作流的开始和结束(start,end以及fail的节点),并控制工作流执行路径(decision,fork,join节点)。操作节点是工作流触发计算\处理任务的执行,Oozie支持不同的任务类型——hadoop map reduce任务,hdfs,Pig,SSH,eMail,Oozie子工作流等等。Oozie可以自定义扩展任务类型。

Oozie工作流可以参数化的方式执行(使用变量${inputDir}定义)。当提交工作流任务的时候就需要同时提供参数。如果参数合适的话(使用不同的目录)就可以定义并行的工作流任务。

总结来说

  • Oozie是管理Hadoop作业的工作流调度系统
  • Oozie的工作流是一系列的操作图
  • Oozie协调作业是通过时间(频率)以及有效数据触发当前的Oozie工作流程
  • Oozie是针对Hadoop开发的开源工作流引擎,专门针对大规模复杂工作流程和数据管道设计
  • Oozie围绕两个核心:工作流和协调器,前者定义任务的拓扑和执行逻辑,后者负责工作流的依赖和触发。

WordCount工作流例子

hPDL流程的定义:

<workflow-app name='wordcount-wf' xmlns="uri:oozie:workflow:0.1">
    <start to='wordcount'/>
    <action name='wordcount'>
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.myorg.WordCount.Map</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.myorg.WordCount.Reduce</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>${inputDir}</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>${outputDir}</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to='end'/>
        <error to='end'/>
    </action>
    <kill name='kill'>
        <message>Something went wrong: ${wf:errorCode('wordcount')}</message>
    </kill/>
    <end name='end'/>
</workflow-app>

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaMelody监控spring、struts

    前言  前面讲过了Javamelody的基本配置,如何使用Javamelody来监控JDBC以及SQL。   这里继续讲解一下如何监控struts和sp...

    用户1154259
  • 【Spring开发】—— AOP之方法级拦截

    前言: 前面介绍了Spring的核心模块以及相关的依赖注入等概念。这篇讲解一下spring的另一个重点,AOP面向切面编程。   说道AOP不得不提到几...

    用户1154259
  • Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统

    今天大部分时间都在写业务代码,然后算是从无到有的配置了下spring与mybatis的集成。 SpringMVC+Mybatis Web开发流程 配置数据...

    用户1154259
  • CMD命令下修改和查看ip地址,DNS,网关

    明哥的运维笔记
  • Jenkins部署码云SpringBoot项目

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 (以...

    dalaoyang
  • 在k8s集群部署SonarQube

    Sonar可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。

    山山仙人
  • Go Web框架gin的入门教程

    目前,基于Go的web框架也可谓是百花齐放了,之所以选择gin ,没其他原因,就只是因为其在github上的star数是最多的,而且仅仅从README看,其文件...

    会呼吸的Coder
  • 机器学习|第一周:单变量线性回归例子

    机器视觉CV
  • python实现多变量线性回归(Linear Regression with Multiple Variables)

    本文介绍如何使用python实现多变量线性回归,文章参考NG的视频和黄海广博士的笔记 现在对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型...

    用户1177380
  • SSM项目集成mybatis-plus

    似水的流年

扫码关注云+社区

领取腾讯云代金券