Oozie分布式工作流——Action节点

前篇讲述了下什么是流控制节点,本篇继续来说一下什么是 Action Nodes操作节点。Action节点有一些比较通用的特性:

Action节点是远程的

所有oozie创建的计算和处理任务都是异步的,没有任何应用是工作在oozie内部的。基本上都是创建一个oozie任务,oozie任务会以map的形式,在各个节点再创建相应的任务。因此当你执行spark任务的时候,就会发现yarn集群监控列表里面会同时有两个任务出现。

Action节点是异步的

oozie创建的任务都是异步的,对于大多数的任务来说,oozie都是创建action,然后一直等到这个action完成,才退出。对于fs的异常操作来说,是同步的。

oozie可以通过两种方式检测任务是否完成——回调和轮训。

当oozie创建一个任务时,会提供一个唯一的回调url,当任务完成时,会调用该url通知完成。当无法回调时,也可以采用轮训的机制,检测是否完成。

Action有两种状态,ok和error

如果任务异常退出,那么需要明确的提供error-code,这个信息可以用于decision控制节点进行决策选择。每个工作流都应该清晰的定义errorcode

Action的恢复机制

oozie对于不同的错误有不同的处理方式:

  • 对于那些偶然的错误,比如网络原因或者远程系统暂时不能访问,oozie会根据预先设置的参数进行重试。这个参数可以在action中进行重写。
  • 对于那些非偶然的错误,oozie会挂起任务,直到管理员或者外部系统手动解决。

一些常用的Action

FS Action

fs Action允许操作hdfs上的文件或者目录,比如move,delete,mkdir,chmod,touchz,chgrp等等。

这个FS命令都是同步执行的,只有节点完成该命令操作,才会继续往下执行。

如果使用了路径,那么路径可以使用EL表达式参数化,但是一定要是绝对路径才行。对于move,delete,chmod,chgrp命令来说,可以使用通配符。但是对于move命令,只能给源路径使用通配。

语法规则如下:

<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.5">
    ...
    <action name="[NODE-NAME]">
        <fs>
            <delete path='[PATH]'/>
            ...
            <mkdir path='[PATH]'/>
            ...
            <move source='[SOURCE-PATH]' target='[TARGET-PATH]'/>
            ...
            <chmod path='[PATH]' permissions='[PERMISSIONS]' dir-files='false' />
            ...
            <touchz path='[PATH]' />
            ...
            <chgrp path='[PATH]' group='[GROUP]' dir-files='false' />
        </fs>
        <ok to="[NODE-NAME]"/>
        <error to="[NODE-NAME]"/>
    </action>
    ...
</workflow-app>

delete命令可以删除指定的路径的内容,如果目标是一个目录,那么会级联删除下面的所有内容。

mkdir命令会创建指定的路径内容,如果路径上缺少父级目录,也会自动创建。如果目录已经存在,那么什么都不会做。

move命令中,source路径必须要指定。下面是使用move的一些场景:

  • 文件系统URI(比如hdfs://{namenode})可以在target中省略,因为系统会默认使用source的URI。
  • target路径的父级目录都必须存在
  • 如果target目录已经存在,那么将会替换目标文件

chmod命令可以改变路径的权限。权限跟linux类似,都是-rwxrw-rw-或者755的形式。默认的情况下权限会应用到目标目录以及其子文件。如果只想应用到目录而不影响它的文件,可以把dir-files属性设置为false.如果想要级联修改内部的所有文件,可以内部嵌套一个recursive元素.

touchz命令在该文件不存在的时候会创建一个长度为0的文件。如果文件已经存在,那么仅会更新一下该文件的修改时间。touchz命令仅支持绝对路径。

chgrp命令可以修改路径的所有组。属性跟chmod是一样的。

举个例子:

<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.5">
    ...
    <action name="hdfscommands">
         <fs>
            <delete path='hdfs://foo:8020/usr/tucu/temp-data'/>
            <mkdir path='archives/${wf:id()}'/>
            <move source='${jobInput}' target='archives/${wf:id()}/processed-input'/>
            <chmod path='${jobOutput}' permissions='-rwxrw-rw-' dir-files='true'><recursive/></chmod>
            <chgrp path='${jobOutput}' group='testgroup' dir-files='true'><recursive/></chgrp>
        </fs>
        <ok to="myotherjob"/>
        <error to="errorcleanup"/>
    </action>
    ...
</workflow-app>

在其他的工作流节点中,也可以使用fs操作:

<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.4">
    ...
    <action name="hdfscommands">
        <fs>
           <name-node>hdfs://foo:8020</name-node>
           <job-xml>fs-info.xml</job-xml>
           <configuration>
             <property>
               <name>some.property</name>
               <value>some.value</value>
             </property>
           </configuration>
           <delete path='/usr/tucu/temp-data'/>
        </fs>
        <ok to="myotherjob"/>
        <error to="errorcleanup"/>
    </action>
    ...
</workflow-app>

这个功能在其他的工作流节点中是非常常用的,像我们平时使用的sqoop操作都需要实现执行以下delete删除目标数据。

本文转自博客园xingoo的博客,原文链接:Oozie分布式工作流——Action节点,如需转载请自行联系原博主。

时间: 2024-10-24 18:37:28

Oozie分布式工作流——Action节点的相关文章

Oozie分布式工作流——从理论和实践分析使用节点间的参数传递

Oozie支持Java Action,因此可以自定义很多的功能.本篇就从理论和实践两方面介绍下Java Action的妙用,另外还涉及到oozie中action之间的参数传递. 本文大致分为以下几个部分: Java Action教程文档 自定义Java Action实践 从源码的角度讲解Java Action与Shell Action的参数传递. 如果你即将或者想要使用oozie,那么本篇的文章将会为你提供很多参考的价值. Java Action文档 java action会自动执行提供的jav

Oozie分布式工作流——流控制

最近又开始捅咕上oozie了,所以回头还是翻译一下oozie的文档.文档里面最重要就属这一章了--工作流定义. 一提到工作流,首先想到的应该是工作流都支持哪些工作依赖关系,比如串式的执行,或者一对多,或者多对一,或者条件判断等等.Oozie在这方面支持的很好,它把节点分为控制节点和操作节点两种类型,控制节点用于控制工作流的计算流程,操作节点用于封装计算单元.本篇就主要描述下它的控制节点... 背景 先看看oozie工作流里面的几个定义: action,一个action是一个独立的任务,比如map

Oozie分布式任务的工作流——邮件篇

在大数据的当下,各种spark和hadoop的框架层出不穷.各种高端的计算框架,分布式任务如乱花般迷眼.你是否有这种困惑!--有了许多的分布式任务,但是每天需要固定时间跑任务,自己写个调度,既不稳定,又没有可靠的通知. 想要了解Oozie的基础知识,可以参考这里 那么你应该是在找--Oozie. Oozie是一款支持分布式任务调度的开源框架,它支持很多的分布式任务,比如map reduce,spark,sqoop,pig甚至shell等等.你可以以各种方式调度它们,把它们组成工作流.每个工作流节

Oozie分布式任务的工作流——脚本篇

继前一篇大体上翻译了Email的Action配置,本篇继续看一下Shell的相关配置. Shell Action Shell Action可以执行Shell脚本命令,工作流会等到shell完全执行完毕后退出,再执行下一个节点.为了运行shell,必须配置job-tracker以及name-node,并且设置exec来执行shell. Shell既可以使用job-xml引用一个配置文件,也可以在shell action内直接配置.shell action中的配置会覆盖job-xml中的配置. EL

Oozie分布式任务的工作流——Spark篇

Spark是现在应用最广泛的分布式计算框架,oozie支持在它的调度中执行spark.在我的日常工作中,一部分工作就是基于oozie维护好每天的spark离线任务,合理的设计工作流并分配适合的参数对于spark的稳定运行十分重要. Spark Action 这个Action允许执行spark任务,需要用户指定job-tracker以及name-node.先看看语法规则: 语法规则 <workflow-app name="[WF-DEF-NAME]" xmlns="uri

Oozie分布式任务的工作流——Sqoop篇

Sqoop的使用应该是Oozie里面最常用的了,因为很多BI数据分析都是基于业务数据库来做的,因此需要把mysql或者oracle的数据导入到hdfs中再利用mapreduce或者spark进行ETL,生成报表信息. 因此本篇的Sqoop Action其实就是运行一个sqoop的任务而已. 同样action会等到sqoop执行成功后,才会执行下一个action.为了运行sqoop action,需要提供job-tracker,name-node,command或者arg元素. sqoop act

大数据学习之路(持续更新中...)

在16年8月份至今,一直在努力学习大数据大数据相关的技术,很想了解众多老司机的学习历程.因为大数据涉及的技术很广需要了解的东西也很多,会让很多新手望而却步.所以,我就在自己学习的过程中总结一下学到的内容以及踩到的一些坑,希望得到老司机的指点和新手的借鉴. 前言 在学习大数据之前,先要了解他解决了什么问题,能给我们带来什么价值.一方面,以前IT行业发展没有那么快,系统的应用也不完善,数据库足够支撑业务系统.但是随着行业的发展,系统运行的时间越来越长,搜集到的数据也越来越多,传统的数据库已经不能支撑

单节点伪分布式spark安装

问题描述 单节点伪分布式spark安装 wordcount.take()括号中的参数怎么确定??? 解决方案 安装单节点伪分布式 CDH hadoop 集群Linux下单节点Hadoop伪分布式安装单节点伪分布式hadoop的安装与配置

Oozie工作流程定义详解

Oozie工作流程定义是一个DAG(Directed Acyclical Graphs)图,它由控制流节点(Control Flow Nodes)或动作节点(Action Nodes)组成,各个节点又是通过表征转移的箭线(transitions arrows)互相连通.对于工作流一般对应存在流程定义语言,例如jBPM是jPDL,大多数都是基于XML定义的,Oozie流程定义语言也是基于XML定义的,称为hPDL(Hadoop Process Definition Language). 下面,我们