0

我正在尝试通过 shell 操作实现一个简单的 ls 命令,但我遇到了一个错误,

确切问题: 脚本:

#!/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/my-directory ,它也有子目录。

如果有人可以为我提供解决方案,那就太好了。

4

1 回答 1

3

您无法控制集群中 Oozie 在哪个节点上运行 shell 操作。因此,您的脚本不应引用集群中任何特定节点的本地文件系统。

例如,假设您的集群包含两个节点 NODE1 和 NODE2,并且您的脚本引用了 NODE1 FS 上的文件。当 Oozie 运行您的脚本时,它可以从 NODE1 或 NODE2 运行它(请记住——您将脚本、job.properties、workflow.xml 放入 HDFS,它分布在 NODE1 和 NODE2 上)。如果脚本是从 NODE2 运行的,那么您将收到 No such file or directory 错误,因为该文件不在 NODE2 的本地 FS 上。

重要的一点是,您通过 Oozie 运行的任何脚本都只能引用 HDFS 中的路径和文件。如果您需要从 FS 本地到一个节点的文件进行引用,请将其放入 HDFS 并使用 HDFS 内的路径来引用该文件。

于 2013-10-10T18:11:49.360 回答