基于条件为真我在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:...}
答案 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
。