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



基于条件为true,我在shell脚本中执行hive-e。它运行良好。当我把这个脚本放在Oozie的Shell操作中并运行时,我得到了一个scriptName.sh:行42:hive:command not found异常。

我试着通过<env-var>PATH=/usr/lib/hive<env-var>在shell操作中,但我想我在那里犯了一些错误,因为我得到了相同的错误scriptName.sh:行42:hive:command not found

编辑:我在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:...}

好吧,我终于明白了。对于壳牌的专家来说,这可能是一件微不足道的事情,但可以帮助一些人起步。

1.hive:找不到命令这不是类路径问题。这是一个空壳问题。我运行的环境是一个korn-shell(echo$shell查找)。但是hive脚本(/usr/lib/hive/bin/hive.sh)是一个bash shell。所以我更改了脚本中的shebang(#!/bin/bash),它起了作用。

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

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

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

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

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

最新更新