Oozie shell Action - 从shell问题运行配置单元

时间:2013-02-20 13:09:02

标签: shell hadoop hive oozie

基于条件为真我在shell脚本中执行hive -e。它工作正常。当我在Oozie中将此脚本放入Shell操作并运行时,我得到一个scriptName.sh:第42行:hive:命令没有发现异常。

我试过传递< env-var> PATH = / usr / lib / hive< / env的-VAR>在shell动作中,但我想我在那里犯了一些错误,因为我得到了同样的错误scriptName.sh:第42行:hive:命令未找到

编辑: 我在shell脚本中使用了which hive。它的输出不一致。我得到两种输出变化:
1. /usr/bin/hive以及Delegation token can be issued only with kerberos or web authentication Java IOException。“

2. which : hive not in {.:/sbin:/usr/bin:/usr/sbin:...}

2 个答案:

答案 0 :(得分:5)

好吧最后我明白了。对于壳牌专家来说,这可能是一件微不足道的事情,但可以帮助有人开始。

<强> 1。 hive:找不到命令这不是类路径问题。这是一个shell问题。我运行的环境是一个korn shell(echo $ SHELL找出来)。但是hive脚本(/usr/lib/hive/bin/hive.sh)是一个bash shell。所以我在我的脚本中更改了shebang(#!/ bin / bash)并且它有效。

2.Delegation令牌只能通过kerberos或网络身份验证发出。 在我的hive脚本中,我添加了SET mapreduce.job.credentials.binary = ${HADOOP_TOKEN_FILE_LOCATION} HADOOP_TOKEN_FILE_LOCATION是一个保存jobToken位置的变量。需要传递此令牌以验证对HDFS数据的访问(在我的情况下,HDFS读取操作,通过Hive Select查询)在安全群集中。Know more on Delegation Token Here

答案 1 :(得分:1)

显然,你会错过shell环境变量。

要确认,请在oozie的被叫shell中使用export

如果您使用oozie call shell,一种简单的方法是使用/bin/bash -l your_script

PS。 PATH是一个目录列表,因此您需要将${HIVE_HOME}/bin附加到PATH而不是${HIVE_HOME}/bin/hive