Oozie Shell Action 配置
来源:互联网 发布:office2010数据透视表 编辑:程序博客网 时间:2024/05/30 22:50
Shell Action
Shell action运行一个shell命令,需要配置的有job-tracker,name-node和一些必要的参数。
经过配置,在启动Shell Action之前可以创建或删除HDFS文件夹。
可以通过配置文件(通过job-xml元素)给定配置信息,或者是用内嵌的configuration元素进行配置。
可以在内嵌的configuration里面使用EL表达式,在configuration里面配置的信息会覆盖job-xml里面相同的值。
需要注意的是,Hadoop的mapred.job.tracker和fs.default.name属性不可以在内嵌的configuration里面配置。
跟hadoop的map-reduce jobs一样,可以添加附件到sqoop job里面。具体参见【http://archive.cloudera.com/cdh/3/oozie/WorkflowFunctionalSpec.html#a3.2.2.1_Adding_Files_and_Archives_for_the_Job】
shell任务的标准输出(STDOUT)在shell运行结束之后是可用的。这些信息可以被决策结点使用。如果shell job的输出被配置成可用的,那shell命令必须包含以下两个参数:
- 输出的格式必须是合法的java属性文件。
- 输出的大小不能超过2KB。
语法:
1
<
workflow-app
name
=
"[WF-DEF-NAME]"
xmlns
=
"uri:oozie:workflow:0.2"
>
2
...
3
<
action
name
=
"[NODE-NAME]"
>
4
<
shell
xmlns
=
"uri:oozie:shell-action:0.1"
>
5
<
job-tracker
>[JOB-TRACKER]</
job-tracker
>
6
<
name-node
>[NAME-NODE]</
name-node
>
7
<
prepare
>
8
<
delete
path
=
"[PATH]"
/>
9
...
10
<
mkdir
path
=
"[PATH]"
/>
11
...
12
</
prepare
>
13
<
job-xml
>[SHELL SETTINGS FILE]</
job-xml
>
14
<
configuration
>
15
<
property
>
16
<
name
>[PROPERTY-NAME]</
name
>
17
<
value
>[PROPERTY-VALUE]</
value
>
18
</
property
>
19
...
20
</
configuration
>
21
<
exec
>[SHELL-COMMAND]</
exec
>
22
<
argument
>[ARG-VALUE]</
argument
>
23
...
24
<
argument
>[ARG-VALUE]</
argument
>
25
<
env-var
>[VAR1=VALUE1]</
env-var
>
26
...
27
<
env-var
>[VARN=VALUEN]</
env-var
>
28
<
file
>[FILE-PATH]</
file
>
29
...
30
<
archive
>[FILE-PATH]</
archive
>
31
...
32
<
capture-output
/>
33
</
shell
>
34
<
ok
to
=
"[NODE-NAME]"
/>
35
<
error
to
=
"[NODE-NAME]"
/>
36
</
action
>
37
...
38
</
workflow-app
>
prepare元素里面配置启动job前要删除或者创建的文件夹,文件夹路径必须是以hdfs://HOST:PORT开头。
job-xml指定一个存在的配置文件。
configuration里面配置传递给sqoop job的参数。
exec元素包含要执行的shell命令的路径。可以给shell命令添加参数。
argument元素指定要传递给shell脚本的参数。
env-var包含传递给shell命令的环境变量。env-var只能包含一个环境变量和值。如果这个环境变量包含像$PATH一样的,那它必须写成PATH=$PATH:mypath。不能用${PATH},因为它将会被EL解析。
capture-output元素指定用来捕获shell脚本的标准输出。可以通过String action:output(String node, String key)函数【EL函数】来获得输出。
例子:
1
<
workflow-app
xmlns
=
'uri:oozie:workflow:0.2'
name
=
'shell-wf'
>
2
<
start
to
=
'shell1'
/>
3
<
action
name
=
'shell1'
>
4
<
shell
xmlns
=
"uri:oozie:shell-action:0.1"
>
5
<
job-tracker
>${jobTracker}</
job-tracker
>
6
<
name-node
>${nameNode}</
name-node
>
7
<
configuration
>
8
<
property
>
9
<
name
>mapred.job.queue.name</
name
>
10
<
value
>${queueName}</
value
>
11
</
property
>
12
</
configuration
>
13
<
exec
>${EXEC}</
exec
>
14
<
argument
>A</
argument
>
15
<
argument
>B</
argument
>
16
<
file
>${EXEC}#${EXEC}</
file
>
<!--Copy the executable to compute node's current working directory -->
17
</
shell
>
18
<
ok
to
=
"end"
/>
19
<
error
to
=
"fail"
/>
20
</
action
>
21
<
kill
name
=
"fail"
>
22
<
message
>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</
message
>
23
</
kill
>
24
<
end
name
=
'end'
/>
25
</
workflow-app
>
其中,job属性文件如下:
1
oozie.wf.application.path=hdfs://localhost:8020/user/kamrul/workflows/script
#Execute is expected to be in the Workflow directory.
2
#Shell Script to run
3
EXEC=script.sh
4
#CPP executable. Executable should be binary compatible to the compute node OS.
5
#EXEC=hello
6
#Perl script
7
#EXEC=script.pl
8
jobTracker=localhost:8021
9
nameNode=hdfs://localhost:8020
10
queueName=default
运行jar里面的java程序:
1
<
workflow-app
xmlns
=
'uri:oozie:workflow:0.2'
name
=
'shell-wf'
>
2
<
start
to
=
'shell1'
/>
3
<
action
name
=
'shell1'
>
4
<
shell
xmlns
=
"uri:oozie:shell-action:0.1"
>
5
<
job-tracker
>${jobTracker}</
job-tracker
>
6
<
name-node
>${nameNode}</
name-node
>
7
<
configuration
>
8
<
property
>
9
<
name
>mapred.job.queue.name</
name
>
10
<
value
>${queueName}</
value
>
11
</
property
>
12
</
configuration
>
13
<
exec
>java</
exec
>
14
<
argument
>-classpath</
argument
>
15
<
argument
>./${EXEC}:$CLASSPATH</
argument
>
16
<
argument
>Hello</
argument
>
17
<
file
>${EXEC}#${EXEC}</
file
>
<!--Copy the jar to compute node current working directory -->
18
</
shell
>
19
<
ok
to
=
"end"
/>
20
<
error
to
=
"fail"
/>
21
</
action
>
22
<
kill
name
=
"fail"
>
23
<
message
>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</
message
>
24
</
kill
>
25
<
end
name
=
'end'
/>
26
</
workflow-app
>
<file>属性会复制指定的文件到运行该脚本的机器上。当提示找不到文件的时候,试试file
对应的属性文件是:
1
oozie.wf.application.path=hdfs://localhost:8020/user/kamrul/workflows/script
#Hello.jar file is expected to be in the Workflow directory.
2
EXEC=Hello.jar
3
jobTracker=localhost:8021
4
nameNode=hdfs://localhost:8020
5
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://archive.cloudera.com/cdh/3/oozie/DG_ShellActionExtension.html
转载请注明: 转载自http://jyd.me/
- Oozie Shell Action 配置
- Oozie shell action
- Oozie shell script action
- Oozie中Shell action的配置及应用
- Basics of Oozie and Oozie SHELL action
- oozie 中添加 shell action
- Oozie MapReduce Action配置的要点
- oozie action配置retry-max失效
- Oozie中Hive action配置时的注意事项
- oozie hive action注意事项
- oozie 学习笔记 action
- Oozie Sqoop Action Extension
- oozie扩展action
- Oozie调用shell脚本
- Oozie Ssh Action问题排查
- oozie ssh action获取日志
- oozie ssh action获取日志
- Oozie安装配置手册
- ES6新特性
- ajaxfileupload.js 可以正常使用的版本
- 说说高斯过程回归
- java 和 json
- more命令
- Oozie Shell Action 配置
- [美剧赏析] 权力的游戏<Game of Thrones>完全赏析 (45-46)
- 【操作系统】C语言模拟操作系统实现动态分区分配算法
- OpenStack云端的资源调度和优化剖析
- MySQL查询优化-explain
- 移动App架构设计(常用)
- JMS和ActiveMQ学习笔记
- mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间
- php.ini 文件上传时的参数设置 post_max_size upload_max_filesize