我试图通过shell操作实现一个简单的ls命令,但我遇到了一个错误,
确切问题: 脚本:
#!/bin/bash
ls /home/my-directory
stdout日志:
>>> 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
stderr日志:
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/my,它也有子目录。
如果有人能为我提供一个解决方案,那就太好了。
您无法控制集群中Oozie在哪个节点上运行shell操作。因此,您的脚本永远不应该引用集群中任何特定节点的本地文件系统。
例如,假设您的集群包含两个节点NODE1和NODE2,并且您的脚本引用了NODE1的FS上的一个文件。当Oozie运行您的脚本时,它可以从NODE1或NODE2运行它(记住——您将脚本job.properties、workflow.xml放入HDFS中,HDFS分布在NODE1和NODE2之间)。如果脚本是从NODE2运行的,那么您将得到No such file或directory错误,因为该文件不在NODE2的本地FS上。
重要的一点是,通过Oozie运行的任何脚本都必须仅引用HDFS中的路径和文件。如果您需要引用一个节点的本地FS中的文件,请将其放在HDFS中,并使用HDFS中的路径来引用该文件。