如何使用init脚本运行Oozie Hive或Hive2 Action?
在CLI中,这通常可以通过-i init.hive
参数完成;但是,当通过<argument>-i init.hive</argument>
在Oozie Action中使用它时,工作流会因错误而停止。
我将init.hive文件与<file>init.hive#init.hive</file>
属性相关联,并且可以在本地appcache目录中找到。
$ ll appcache/application_1480609892100_0274/container_e55_1480609892100_0274_01_000001/ | grep init
> lrwxrwxrwx 1 root root 42 Jan 12 12:24 init.hive -> /hadoop/yarn/local/filecache/519/init.hive
错误(在本地appcache中)是以下
Connecting to jdbc:hive2://localhost:10000/
Connected to: Apache Hive (version 1.2.1000.2.4.0.0-169)
Driver: Hive JDBC (version 1.2.1000.2.4.0.0-169)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Running init script init.hive
init.hive (No such file or directory)
hive2动作看起来像这样(完整的工作流程可以在Github上找到https://github.com/chaosmail/oozie-bugs/tree/master/simple-hive-init/simple-hive-init-wf)
<action name="test-action">
<hive2 xmlns="uri:oozie:hive2-action:0.1">
<jdbc-url>${jdbcURL}</jdbc-url>
<script>query.hive</script>
<argument>-i init.hive</argument>
<file>init.hive#init.hive</file>
</hive2>
<ok to="end"/>
<error to="fail"/>
</action>
编辑1:添加了工作流程操作
答案 0 :(得分:2)
[回顾上面的评论帖子,回顾一些额外的东西]
Oozie文档声明您的Action中可能有多个<argument>
元素,这些元素暗示必须单独提供参数。
回想起来,它是有意义的 - 在命令行上, shell 会将参数列表解析为 args[]
数组Java可执行文件,但Oozie不是shell解释器......
经验表明,Beeline为其命令行args接受两种语法变体......
-xValue
(一个arg)表示选项-x
与关联Value
-x
后跟Value
(两个args)意味着同样的事情
<argument>-xValue</argument>
<argument>-x</argument> <argument>Value</argument>
另一方面,<argument>-x Value</argument>
会失败,因为在单arg语法中,Beeline认为分隔符空间应该是值的一部分......!