博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oozie分布式任务的工作流——脚本篇
阅读量:6965 次
发布时间:2019-06-27

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

继前一篇大体上翻译了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表达式同样适用于shell action。

注意,mapred.job.tracker以及fs.default.name属性不能再shell action中直接配置。

在mapreduce任务中可以处理一些资源,这样shell就可以使用了。更多的内容参考[WorkflowFunctionalSpec#FilesAchives]``[Adding Files and Archives for the Job]章节。

shell的输出可以被后面的工作流任务使用,这些信息可以用来配置一些关键的信息。如果shell的输出想要对整个工作流任务可用,那么必须满足

  • 输出的格式是标准的java属性文件
  • 输出的内容不能超过2KB

语法

...
[JOB-TRACKER]
[NAME-NODE]
...
...
[SHELL SETTINGS FILE]
[PROPERTY-NAME]
[PROPERTY-VALUE]
...
[SHELL-COMMAND]
[ARG-VALUE]
...
[ARG-VALUE]
[VAR1=VALUE1]
...
[VARN=VALUEN]
[FILE-PATH]
...
[FILE-PATH]
...
...
  • prepare元素,经常用于创建一系列的目录或者删除目录。注意目录必须是hdfs://host:port这种格式的。
  • job-xml元素,指定shell任务的配置。在0.2的schema中,job-xml元素允许指定多个job-xml文件。
  • configuration元素,包含了shell任务的配置信息。
  • exec元素,这个是必填项。包含了shell脚本的路径,并执行它。参数可以设置0个或者多个argument元素。
  • argument元素,用于传递给shell脚本。
  • env-var元素,可以设置环境变量,传递给shell脚本。env-var需要包含键值对这种的信息。比如包含$PATH这种信息,那么需要设置PATH=$PATH:mypath这种格式。不要使用${}这种语法,因为它会被认为是Oozie的EL表达式。
  • shell action也可以创建hadoop的配置。shell应用可以直接读取配置文件。
  • capture-output元素,用来指定输出端。shell命令输出必须是java属性这种格式,并且小于2kb.通过工作流的定义,输出也可以通过string action实现。

上面这些元素都支持EL表达式。

例子

如何运行shell或者perl脚本。

${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
${EXEC}
A
B
${EXEC}#${EXEC}
Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]

用于提交oozie工作的参数有

oozie.wf.application.path=hdfs://localhost:8020/user/kamrul/workflows/script#Execute is expected to be in the Workflow directory.#Shell Script to runEXEC=script.sh#CPP executable. Executable should be binary compatible to the compute node OS.#EXEC=hello#Perl script#EXEC=script.pljobTracker=localhost:8021nameNode=hdfs://localhost:8020queueName=default

如何运行java程序并添加jar包

${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
java
-classpath
./${EXEC}:$CLASSPATH
Hello
${EXEC}#${EXEC}
Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]

提交的相关参数

oozie.wf.application.path=hdfs://localhost:8020/user/kamrul/workflows/script#Hello.jar file is expected to be in the Workflow directory.EXEC=Hello.jarjobTracker=localhost:8021nameNode=hdfs://localhost:8020queueName=default

shell Action日志

shell action标准输出和错误输出都可以直接输出到oozie的mapreduce任务控制台上。

通过oozie web控制台,也可以看到它的执行日志。

shell action的限制

尽管shell可以执行任何的脚本命令,但是还是有一些限制的。

  • 不支持交互式的命令
  • 命令不能使用不同的用户执行
  • 用户必须严格控制上传的jar包。oozie会把他上传到分布式环境中进行缓存
  • 尽管oozie在hadoop的计算节点执行shell命令,但是可能有一些默认安装的工能是不支持的。因此需要了解,oozie可以支持安装在计算节点的命令。

实战分析

shell可以输出java properties格式的数据,并且可以配合EL表达式,在其他的action中使用。因此它可以作为工作流的初始化任务,以及配置服务。

比如,在脚本中:

#!/bin/sha=1b=2echo "a=$a"echo "b=$b"

在其他的节点中就可以通过EL表达式来使用了。

本文转自博客园xingoo的博客,原文链接:,如需转载请自行联系原博主。
你可能感兴趣的文章
ImportError: No module named extern;
查看>>
asyncio 学习
查看>>
vs2010的一个opencv插件
查看>>
Layer中自定义属性的动画
查看>>
网络传输基础
查看>>
read和readFully的区别! .
查看>>
[LeetCode]: 121: Best Time to Buy and Sell Stock
查看>>
演示一个使用db vault进行安全控制的示例
查看>>
快速入门系列--Log4net日志组件
查看>>
数据结构与算法面试题80道(33)
查看>>
SaaS客服的难点和坑点全解析
查看>>
Yenista光学发布新型无源器件测试平台CTP10
查看>>
在MAC平台下使用Eclipse出现了中文乱码
查看>>
redis字典结构
查看>>
第一记: JS变量类型判断(VUE源码解读)
查看>>
es6之扩展运算符...
查看>>
find 命令详解
查看>>
世纪之战
查看>>
NOT NULL列用IS NULL也能查到数据?
查看>>
利用单臂路由实现VLAN间路由
查看>>