2015-06-19 86 views
4

全部,需要将变量从Shell Action传递到使用Hive的Oozie Shell

寻找将shell动作传递给oozie shell的变量。我在我的脚本中运行如下命令:

#!/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不。同样,如果我在群集的其他框上运行命令,它们也可以很好地运行。有任何想法吗?

+0

我不确定您是否可以从shell操作调用配置单元查询。我建议你对配置单元查询使用配置单元操作,然后传递可以捕获的参数。另外不要忘记使用 KKa

+1

嗯,我不认为你可以保存Hive动作的输出。从我的研究看来,你可以为shell/ssh/java操作,但Hive不能像写入磁盘那样操作。我之前为Sqoop运行过类似的操作 - 为什么它对于Sqoop而不是Hive? – theMJof91

回答

1

问题是关于我的集群的配置。当我作为oozie用户运行时,我有权限写入/ tmp/yarn。因此,我改变了命令运行:

baais =“export HADOOP_USER_NAME = functionalid; hive yarn -hiveconf hive.execution.engine = mr -e'从db中选择max(cast(create_date as int))。 ';'

蜂巢让我可以像纱一样运行。

0

解决您的问题的方法是在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" 

现在你应该能够捕捉出来。