2013-02-20 101 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