2

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

我尝试在 shell 操作中传递 < env-var >PATH=/usr/lib/hive</env-var> ,但我想我在那里犯了一些错误,因为我得到了相同的错误 scriptName.sh: line 42 : hive: 找不到命令

编辑:which hive在shell脚本中使用。它的输出不一致。我得到了两种不同的输出:
1./usr/bin/hive还有一个Delegation token can be issued only with kerberos or web authenticationJava IOException。”

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

4

2 回答 2

6

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

1. hive : command not found 这不是类路径问题。这是 shell 问题。我运行的环境是 korn shell(回显 $SHELL 以查找)。但是 hive 脚本(/usr/lib/hive/bin/hive.sh)是一个 bash shell。所以我在我的脚本中更改了 shebang(#!/bin/bash)并且它起作用了。

2.Delegation Token 只能通过kerberos 或web 认证来颁发。 在我的 hive 脚本中,我添加了SET mapreduce.job.credentials.binary = ${HADOOP_TOKEN_FILE_LOCATION}HADOOP_TOKEN_FILE_LOCATION 是一个保存 jobToken 位置的变量。需要传递此令牌以在安全集群中对 HDFS 数据的访问(在我的情况下,HDFS 读取操作,通过 Hive Select 查询)进行身份验证。在此处了解有关委派令牌的更多信息

于 2013-03-13T12:55:57.533 回答
1

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

要确认它,export请在 oozie 调用的 shell 中使用。

如果你使用 oozie 调用 shell,一个简单的方法是使用/bin/bash -l your_script.

PS。PATH 是一个目录列表,所以你需要附加${HIVE_HOME}/bin到你的 PATH 不是${HIVE_HOME}/bin/hive

于 2013-02-23T16:33:27.430 回答