Oozie shell action
2014-04-14 08:26
417 查看
Shell action运行一个shell命令,需要配置的有job-tracker,name-node和一些必要的参数。
经过配置,在启动Shell Action之前可以创建或删除HDFS文件夹。
可以通过配置文件(通过job-xml元素)给定配置信息,或者是用内嵌的configuration元素进行配置。
可以在内嵌的configuration里面使用EL表达式,在configuration里面配置的信息会覆盖job-xml里面相同的值。
语法:
prepare元素里面配置启动job前要删除或者创建的文件夹,文件夹路径必须是以hdfs://host:port开头.
job-xml指定一个存在的配置文件.
configuration里面配置传递给sqoop job的参数
exec元素包含要执行的shell命令的路径.可以给shell命令添加参数.
arguments元素指定要传递给shell脚本的参数.
env-var包含传递给shell命令的环境变量.env-var 只能包含一个环境变量和值,如果这个环境变量包含像$PATH一样的,那它必须写成PATH=$PATH:mypath.不用${PATH},因为它会被EL解析.
capture-output 元素指定用来捕获shell脚本的标准输出,可以通过String action:output(String node,String key)函数[EL函数]来获得输出.
<file>属性会复制指定的文件到运行该脚本的及其上.当提示找不到文件的时候,试试file
例子:
其中,job属性文件如下:
运行jar里面的java程序:
<file>属性会复制指定的文件到运行该脚本的机器上。当提示找不到文件的时候,试试file
对应的属性文件是:
除了在Oozie的web网页上可以看到少部分日志,还可以在hadoop的job-tracker的网页上看到详细的日志信息。
不支持交互命令。
不能通过sudo来让不同用户执行命令。
用户必须明确的上传所需要的第三方库。Oozie通过Hadoop的分布式缓冲来上传、打标签、使用。
Shell命令会在任意一个hadoop 计算节点上运行,但是计算节点上默认安装的工具集可能会不一样。不过在所有的计算节点上,通常都装有大部分普通的unix工具。因此需要明确的很重要的一点是:Oozie只支持有被安装到计算节点上的命令或者通过分布式缓存上传的命令。也就是说,我们必须通过file上传我们要用到的文件。
转载自:
http://jyd.me/
经过配置,在启动Shell Action之前可以创建或删除HDFS文件夹。
可以通过配置文件(通过job-xml元素)给定配置信息,或者是用内嵌的configuration元素进行配置。
可以在内嵌的configuration里面使用EL表达式,在configuration里面配置的信息会覆盖job-xml里面相同的值。
语法:
<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.2"> ... <action name="[NODE-NAME]"> <shell xmlns="uri:oozie:shell-action:0.1"> <job-tracker>[JOB-TRACKER]</job-tracker> <name-node>[NAME-NODE]</name-node> <prepare> <delete path="[PATH]"/> ... <mkdir path="[PATH]"/> ... </prepare> <job-xml>[SHELL SETTINGS FILE]</job-xml> <configuration> <property> <name>[PROPERTY-NAME]</name> <value>[PROPERTY-VALUE]</value> </property> ... </configuration> <exec>[SHELL-COMMAND]</exec> <argument>[ARG-VALUE]</argument> ... <argument>[ARG-VALUE]</argument> <env-var>[VAR1=VALUE1]</env-var> ... <env-var>[VARN=VALUEN]</env-var> <file>[FILE-PATH]</file> ... <archive>[FILE-PATH]</archive> ... <capture-output/> </shell> <ok to="[NODE-NAME]"/> <error to="[NODE-NAME]"/> </action> ... </workflow-app>
prepare元素里面配置启动job前要删除或者创建的文件夹,文件夹路径必须是以hdfs://host:port开头.
job-xml指定一个存在的配置文件.
configuration里面配置传递给sqoop job的参数
exec元素包含要执行的shell命令的路径.可以给shell命令添加参数.
arguments元素指定要传递给shell脚本的参数.
env-var包含传递给shell命令的环境变量.env-var 只能包含一个环境变量和值,如果这个环境变量包含像$PATH一样的,那它必须写成PATH=$PATH:mypath.不用${PATH},因为它会被EL解析.
capture-output 元素指定用来捕获shell脚本的标准输出,可以通过String action:output(String node,String key)函数[EL函数]来获得输出.
<file>属性会复制指定的文件到运行该脚本的及其上.当提示找不到文件的时候,试试file
例子:
<workflow-app xmlns='uri:oozie:workflow:0.2' name='shell-wf'> <start to='shell1' /> <action name='shell1'> <shell xmlns="uri:oozie:shell-action:0.1"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> </configuration> <exec>${EXEC}</exec> <argument>A</argument> <argument>B</argument> <file>${EXEC}#${EXEC}</file> <!--Copy the executable to compute node's current working directory --> </shell> <ok to="end" /> <error to="fail" /> </action> <kill name="fail"> <message>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name='end' /> </workflow-app>
其中,job属性文件如下:
oozie.wf.application.path=hdfs://localhost:8020/user/kamrul/workflows/script#Execute is expected to be in the Workflow directory. #Shell Script to run EXEC=script.sh #CPP executable. Executable should be binary compatible to the compute node OS. #EXEC=hello #Perl script #EXEC=script.pl jobTracker=localhost:8021 nameNode=hdfs://localhost:8020 queueName=default
运行jar里面的java程序:
<workflow-app xmlns='uri:oozie:workflow:0.2' name='shell-wf'> <start to='shell1' /> <action name='shell1'> <shell xmlns="uri:oozie:shell-action:0.1"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> </configuration> <exec>java</exec> <argument>-classpath</argument> <argument>./${EXEC}:$CLASSPATH</argument> <argument>Hello</argument> <file>${EXEC}#${EXEC}</file> <!--Copy the jar to compute node current working directory --> </shell> <ok to="end" /> <error to="fail" /> </action> <kill name="fail"> <message>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name='end' /> </workflow-app>
<file>属性会复制指定的文件到运行该脚本的机器上。当提示找不到文件的时候,试试file
对应的属性文件是:
oozie.wf.application.path=hdfs://localhost:8020/user/kamrul/workflows/script#Hello.jar file is expected to be in the Workflow directory. EXEC=Hello.jar jobTracker=localhost:8021 nameNode=hdfs://localhost:8020 queueName=default
Shell Action 日志
shell action的stdout和stderr输出被重定向到运行该脚本的oozie执行器上的map-reduce任务的stdout。除了在Oozie的web网页上可以看到少部分日志,还可以在hadoop的job-tracker的网页上看到详细的日志信息。
Shell Action 限制
虽然Shell Action可以执行任意的shell命令,但是有以下几个限制:不支持交互命令。
不能通过sudo来让不同用户执行命令。
用户必须明确的上传所需要的第三方库。Oozie通过Hadoop的分布式缓冲来上传、打标签、使用。
Shell命令会在任意一个hadoop 计算节点上运行,但是计算节点上默认安装的工具集可能会不一样。不过在所有的计算节点上,通常都装有大部分普通的unix工具。因此需要明确的很重要的一点是:Oozie只支持有被安装到计算节点上的命令或者通过分布式缓存上传的命令。也就是说,我们必须通过file上传我们要用到的文件。
转载自:
http://jyd.me/
相关文章推荐
- Oozie shell script action
- oozie框架案例之shellAction
- Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
- Basics of Oozie and Oozie SHELL action
- Oozie-自定义实现WorkFlow中shell action
- Oozie Shell Action 配置
- Oozie调用shell脚本
- Oozie原理 以及 Action执行模型简单分析
- oozie调度shell脚本总结(生产)
- HUE通过oozie工作流执行shell脚本
- sqoop+hive+shell+oozie 示例
- oozie 学习笔记 action
- oozie.action.ActionExecutorException: Could not locate Oozie sharelib
- oozie调用shell脚本报脚本找不到的错误
- Oozie分布式工作流——Action节点
- shell下action:command not found
- OOzie调度sqoop1 Action 从mysql导入数据到hive
- oozie hive action注意事项
- Main class [org.apache.oozie.action.hadoop.HiveMain], exit code [10]
- oozie ssh action获取日志