2013-02-20 50 views
2

基于条件成立,我在shell脚本中执行配置单元-e。它工作正常。当我将此脚本放在Oozie的Shell操作中并运行时,我得到一个scriptName。 sh:第42行:hive:命令未找到异常。我试着在shell操作中传递了< env-var> PATH =/usr/lib/hive </env-var>,但我想我在那里犯了一些错误,因为我得到了同样的错误scriptName。 SH:线42:配置单元:命令未找到Oozie shell操作 - 从shell问题运行配置单元问题

被修改: 我在外壳脚本中使用which hive。它的输出是不consistent.I获取输出的两个变化:
1. /usr/bin/hiveDelegation token can be issued only with kerberos or web authentication的Java IOException异常沿着”

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

+1

您正处于正确的轨道上。你缺少环境变量。 shell将使用set命令向您显示变量的完整列表。我相信oozie运行在一个单独的环境中,所以它可能与你的shell命令行有不同的设置。 – 2013-02-20 13:15:34

+0

一个问题是Oozie的环境变量PATH被中的条目取代......我复制了Oozie PATH变量值并在其后添加了:/ usr/lib/hive。然后我得到了同样的错误。 – himanshu 2013-02-21 13:50:44

+0

它不是一个变量就是问题。在命令行中键入命令集。设置显示所有变量。工作,但你需要有哪些你的设置为oozie工作。 – 2013-02-21 15:12:47

回答

1

显然,U错过shell环境变量

要。确认,通过Oozie的使用export在壳子。

如果u使用Oozie的通话外壳,一个简单的方法是使用/bin/bash -l your_script

012 PS:

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

5

好吧,我终于明白了。对于壳牌专家来说,这可能是一件小事,但可以帮助某人开始。

1. hive:command not found这不是classpath问题。它是一个shell问题。我运行的环境是一个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读取操作,通过Hive Select查询)安全集群。 Know more on Delegation Token Here

+0

感谢您的解决方案,但我仍然无法通过“配置单元:命令未找到异常。”任何指针如何调试? – dpsdce 2014-12-07 17:21:29

+2

这是因为Oozie可以在任何数据节点上运行shell操作。配置单元cli保证只在edgenode上运行,而不是在所有数据节点上运行。因此,当Oozie在没有配置单元的节点上运行shell脚本时,我得到了“hive:command not found”。从shell中运行配置单元(或者应该只存在于hadoop的edgenode中的任何应用程序)并不是一个好习惯。 – himanshu 2015-01-13 16:22:39