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