2013-08-01 96 views
0

我想實現一個簡單的LS通過殼行動的命令,但我面臨一個錯誤,Oozie的外殼程序操作問題

精確問題: 腳本:

#!/bin/bash 
ls /home/my-directory 

標準輸出日誌:

>>> Invoking Shell command line now >> 
Exit code of the Shell command 2 
<<< Invocation of Shell command completed <<< 
<<< Invocation of Main class completed <<< 
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1] 
Oozie Launcher failed, finishing Hadoop job gracefully 
Oozie Launcher ends 

標準錯誤日誌:

ls: cannot access /home/my-directory: No such file or directory 
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1] 

有一個目錄/ home /我的目錄,它也有子目錄。

如果有人能爲我提供解決方案,這將是非常好的。

+0

Hadoop文件系統中的/ home/my-directory還是「真實」文件系統? 'ls'不知道Hadoop。 – chepner

+0

該目錄位於我的linux文件系統中。 – Kasa

+0

你解決了嗎? – CruncherBigData

回答

1

您無法控制集羣中的哪個節點Oozie運行shell操作。因此,您的腳本不應該引用羣集中任何特定節點的本地文件系統。例如,您的羣集包含兩個節點NODE1和NODE2,並且您的腳本引用了一個位於NODE1的FS上的文件。當Oozie運行腳本時,它可以從NODE1或NODE2運行它(請記住 - 將腳本,job.properties,workflow.xml放入HDFS,它分佈在NODE1和NODE2中)。如果腳本是從NODE2運行的,那麼你會得到No such file or directory error,因爲該文件不存在於NODE2的本地FS上。

重要的一點是,您通過Oozie運行的任何腳本都必須僅引用HDFS中的路徑和文件。如果您需要從FS本地文件引用一個節點,請將其放入HDFS中,並使用HDFS中的路徑來引用該文件。