需要使用 Hive 将变量从 Shell Action 传递到 Oozie Shell

Need to pass Variable from Shell Action to Oozie Shell using Hive

全部,

希望将变量从 shell 操作传递给 oozie shell。我在我的脚本中 运行ning 这样的命令:

#!/bin/sh
evalDate="hive -e 'set hive.execution.engine=mr; select     max(cast(create_date as int)) from db.table;'"
evalPartition=$(eval $evalBaais)
echo "evaldate=$evalPartition"

技巧在于它是 shell 中的配置单元命令。

然后我运行将其放入 oozie 中:

${wf:actionData('getPartitions')['evaldate']}

但是每次都是空白!我可以 运行 我的 shell 中的那些命令很好,它似乎可以工作,但 oozie 没有。同样,如果我 运行 群集其他盒子上的命令,它们 运行 也很好。有什么想法吗?

您的问题的解决方案是在 hive 命令中使用“-S”开关进行静默输出。 (见下文)

另外,"evalBaais"是什么?您可能需要将其替换为 "evalDate"。所以你的代码应该是这样的 -

#!/bin/sh
evalDate="hive -S -e 'set hive.execution.engine=mr; select            max(cast(create_date as int)) from db.table;'"
evalPartition=$(eval $evalDate)
echo "evaldate=$evalPartition"

现在你应该可以捕获了。

问题是关于我的集群的配置。当我 运行 作为 oozie 用户时,我对 /tmp/yarn 有写权限问题。这样,我将命令更改为 运行 为:

baais="export HADOOP_USER_NAME=functionalid; hive yarn -hiveconf hive.execution.engine=mr -e 'select max(cast(create_date as int)) from db.table;'"

hive 允许我 运行 作为 yarn。