【问题标题】:Oozie-- java: command not found - shell actionOozie--java:找不到命令 - shell 操作
【发布时间】:2017-03-09 13:17:53
【问题描述】:

我正在通过 Oozie 从 shell 脚本运行 java 程序,但出现以下错误

java: command not found

当我从边缘节点运行 shell 脚本时,我没有发现任何问题,并且 java 类运行时没有任何错误,我也得到了所需的输出。但是,无法运行 java 命令的是 oozie 作业。

oozie 中的所有其他操作都被正确执行,但是当它遇到java 行时,它会抛出上述错误。我知道Hadoop集群中的所有节点都安装了Java,那为什么会出现这个错误? 下面是我的 shell 脚本中的 java 命令

...
...    
java -cp $LOCAL_DIR/libs/integration-tools.jar com.audit.reporting.GenerateExcelReport $LOCAL_DIR/input.txt $LOCAL_DIR/
...

请提供您的想法。

【问题讨论】:

  • java: command not found一般表示你的PATH不包含java命令的位置。对比一下这个环境下的echo "$PATH"和可以成功调用JVM的环境下的echo "$PATH"
  • ...当然,Java 可能已安装,但问题是它的安装位置是否当前在手头进程的 PATH 中我>。许多操作系统将 JVM 安装在 /usr/lib/jvm/java8-jre-bin 之类的位置,而守护进程可能在其 PATH 中没有该位置(无论确切的相关/正确位置是什么)。
  • 顺便说一句——全大写的名字用于对操作系统或shell有意义的变量,而至少有一个小写字符的名字保留给应用程序使用,以防止应用程序覆盖有意义的变量错误的名字。请参阅pubs.opengroup.org/onlinepubs/9699919799/basedefs/… 上的相关 POSIX 规范

标签: shell hadoop oozie


【解决方案1】:

“问题已解决”

后来我和我的 DevOps 交谈,发现 Java 的类路径没有在集群中的几个数据节点中设置。这是停止 shell 操作以在这些数据节点上调用 JVM。 修复 Classpath 后,作业成功运行。 @Charles Duffy 提到的所有 cmets 都是有效的。

【讨论】:

    【解决方案2】:

    您的 integration-tools.jar 和您的代码 jar 是否位于 hdfs 位置? Oozie 可以选择任何节点来运行 java 操作,它会在该位置查找这些 jar。

    【讨论】:

    • 这似乎是找不到 JVM 本身,而不是找不到 JAR。
    • 我第二个@CharlesDuffy,因为错误清楚地表明java: command found,这清楚地表明没有安装java或者java的位置没有在类路径中设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多