Oozie Hive Action使用-i init脚本

时间:2017-01-12 12:37:55

标签: hadoop hive oozie

如何使用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:添加了工作流程操作

1 个答案:

答案 0 :(得分:2)

[回顾上面的评论帖子,回顾一些额外的东西]

Oozie文档声明您的Action中可能有多个<argument>元素,这些元素暗示必须单独提供参数。
回想起来,它是有意义的 - 在命令行上, shell 会将参数列表解析为 args[] 数组Java可执行文件,但Oozie不是shell解释器......

经验表明,Beeline为其命令行args接受两种语法变体......

  • -xValue(一个arg)表示选项-x与关联Value
  • -x后跟Value(两个args)意味着同样的事情


所以你有两种正确的方法可以通过Oozie将命令行参数传递给Beeline:

  • <argument>-xValue</argument>
  • <argument>-x</argument> <argument>Value</argument>

另一方面,<argument>-x Value</argument>会失败,因为在单arg语法中,Beeline认为分隔符空间应该是值的一部分......!