需要使用 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。
全部,
希望将变量从 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。