从oozie提交Pig作业

cgvd09ve  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(435)

我正在hadoop集群中使用oozie来实现Pig作业的自动化。
我能够从oozie运行一个示例pig脚本,但我的下一个要求是运行一个pig作业,其中pig脚本从shell脚本接收输入参数。请分享你的想法

jq6vz3qz

jq6vz3qz1#

更新:
好吧,把原来的问题弄清楚,如何从shell脚本输出中传递参数。以下是工作示例:
工作流.xml

  1. <workflow-app xmlns='uri:oozie:workflow:0.3' 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>so.sh</exec>
  14. <argument>A</argument>
  15. <argument>B</argument>
  16. <file>so.sh</file>
  17. <capture-output/>
  18. </shell>
  19. <ok to="shell2" />
  20. <error to="fail" />
  21. </action>
  22. <action name='shell2'>
  23. <shell xmlns="uri:oozie:shell-action:0.1">
  24. <job-tracker>${jobTracker}</job-tracker>
  25. <name-node>${nameNode}</name-node>
  26. <configuration>
  27. <property>
  28. <name>mapred.job.queue.name</name>
  29. <value>${queueName}</value>
  30. </property>
  31. </configuration>
  32. <exec>so2.sh</exec>
  33. <argument>${wf:actionData('shell1')['out']}</argument>
  34. <file>so2.sh</file>
  35. </shell>
  36. <ok to="end" />
  37. <error to="fail" />
  38. </action>
  39. <kill name="fail">
  40. <message>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  41. </kill>
  42. <end name='end' />
  43. </workflow-app>

所以,嘘

  1. echo "out=test"

二氧化硫.sh

  1. echo "I'm so2.sh and I get the following param:"
  2. echo $1

如果用pig操作替换第二个shell操作,并将参数传递给pig脚本,如下所示:

  1. ...
  2. <param>MY_PARAM=${wf:actionData('shell1')['out']}</param>
  3. ...

你原来的问题解决了。
关于sharelib问题,您必须确保在属性中配置lib\u path=where/you/jars/are并将此参数交给pig操作,

  1. <param>LIB_PATH=${LIB_PATH}</param>

不仅仅是从那里登记jar:

  1. REGISTER '$LIB_PATH/my_jar'

=========================================================================================您要找的是
map wf:actiondata(字符串节点)
此函数仅适用于在完成时生成输出数据的操作节点。
输出数据采用java属性格式,通过这个el函数,它可以作为一个Map。
文档这是一个很好的例子:http://www.infoq.com/articles/oozieexample (实际上,您必须按照samson在评论中所写的那样捕获输出)
更多细节:“如果存在capture output元素,则它指示oozie捕获shell命令执行的stdout的输出。shell命令输出必须是java属性文件格式,并且不能超过2kb。在工作流定义中,可以通过字符串访问shell操作节点的输出action:output(字符串节点,字符串键)函数(请参阅“4.2.6动作el函数”一节)
或者您可以使用一个不太好但简单的工作轮,在pig中执行shell脚本,并将其结果保存在一个变量中,然后使用它。这样地:

  1. %DEFINE MY_VAR `echo "/abc/cba'`
  2. A = LOAD '$MY_VAR' ...

但这一点都不好,第一个解决方案是建议的。

展开查看全部

相关问题