【问题标题】:How hadoop command works with javachadoop 命令如何与 javac 一起工作
【发布时间】:2015-04-10 04:05:37
【问题描述】:

我正在阅读 Apache mapreduce tutorial

我能够运行该示例并获得所需的结果。但是,我无法理解如何要求我们运行以下代码来编译 Java 文件。

$ bin/hadoop com.sun.tools.javac.Main WordCount.java

我通过了hapdoop command details。它在常规选项、用户命令和管理员命令下对所有 hadoop 交换机进行了分区。我没有找到 hadoop 命令页面中给出的javac 命令上面的位置。

。事实上,实际上我并没有明白上面的命令是如何工作的。我的意思是我们通常在命令前面指定连字符前缀的选项。然而,上面的这个命令要求以我以前从未见过的方式运行 javac。我平时习惯用javac filename.java直接编译java文件。为什么这里要求不要这样做?

。给定命令中的com.sun.tools.javac.Main 中还有.Main。这是什么意思?

我知道我必须对命令的一般工作原理有一些非常基本的了解。另外我对linux很陌生,所以可能这就是不理解的原因。

【问题讨论】:

    标签: java linux shell hadoop javac


    【解决方案1】:

    Javac 用于编译您的 java 代码。如果您注意到 WordCount 示例,则有很多 import 语句需要您在类路径中添加相应的 jar。

    当你运行hadoop com.sun.tools.javac.Main WordCount.java 时,hadoop 已经加载了所有这些依赖 jar 来编译你的程序。您可以通过运行 javac WordCount.java 对其进行测试,如果您的类路径中还没有这些必需的 jar,编译器会抛出 cannot find symbol 错误

    【讨论】:

    • 所以bin/hadoop 会自动添加这些依赖项,这就是区别?如果是,这些依赖项是在哪里定义的。我的意思是哪个文件hadoop 命令指的是查找和加载依赖项?必须有一些 xml,还是在 hadoop 命令脚本中定义?
    • 是的。检查 bin 目录中的文件 hadoop,该文件调用加载 jar 的 libexec 目录中的 hadoop-config.sh
    • 那么我们在eclipse中运行应用程序时如何通过hadoop.shhadoop_config.sh模拟依赖加载。我已经添加了 Eclipse 中所需的所有 JAR。现在 eclipse 没有给出任何编译时错误,但运行应用程序会给出运行时错误NoClassDefFoundError: org/apache/common/logging/LogFactory是否可以在 eclipse 中进行一些配置,以便调用Hadoop_config.sh 并加载所需的依赖项? 事实上这是正确的方法吗?或还有其他标准的 eclipse-hadoop 设置吗?
    • 不,不是。检查此链接blog.cloudera.com/blog/2011/01/…
    【解决方案2】:

    使用 Hadoop,您可以设置您希望它用于编译代码的编译器。

    com.sun.tools.javac.Main 是 Java 编程语言的编程接口

    执行bin/hadoop时,第一个参数为com.sun.tools.javac.Main,第二个参数为WordCount.java, 它使用com.sun.tools.javac.Main 编译WordCount.java

    More on com.sun.tools.javac.Main

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2016-08-21
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多