2013-08-01 59 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中的路径来引用该文件。