java - 为什么在 hadoop 中执行 MapReduce 代码时需要 jar 文件,但在 hadoop 中执行任何其他非 MapReduce Java 代码时不需要 jar 文件

标签 java hadoop jar mapreduce

我想知道为什么在 hadoop 中执行 MapReduce 代码需要 jar 文件而不是 .class 文件。那么,如果使用 Jar 文件,那么为什么在 hadoop 中执行任何其他非 MapReduce Java 代码时没有执行相同的操作呢?另外,在 hadoop 中执行任何其他非 MapReduce Java 代码时,为什么在命令行中直接提及编译类和 hadoop 关键字,例如:如果我有一个程序使用 url 在 hadoop 中显示文件,即。对于 FileSystemCat 类

    public class FileSystemCat {
    public static void main(String[] args) throws Exception {
    String uri = args[0];
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(URI.create(uri), conf);
    InputStream in = null;
    try {
    in = fs.open(new Path(uri));
    IOUtils.copyBytes(in, System.out, 4096, false);
    } finally {
    IOUtils.closeStream(in);

}
}
}

编译程序后执行程序的命令是“hadoop FileSystemCat”而不是“hadoop Java FileSystemCat”。在常见环境中,执行程序的步骤是:

Javac FileSystemCat.java
Java FileSystemCat.class

最佳答案

 hadoop jar <jar> [mainClass] args... 

运行 jar 文件。用户可以将 MapReduce 代码捆绑在 jar 文件中,并使用此命令执行它。

 hadoop CLASSNAME 

hadoop脚本可用于调用任何类。

上面的命令做了两个思考。

1)将Hadoop安装lib目录下的所有jar添加到正在运行的jar或类的类路径中。

2)将hadoop安装的配置目录添加到类路径中。

因此运行的JAR或CLASS将获取hadoop安装类路径中的所有类以及安装的所有配置文件。

如果您使用简单的 Java CLASSNAME 命令运行 JAR 或 CLASS,则必须将上述两个组件分别添加到 java 类路径中。

关于java - 为什么在 hadoop 中执行 MapReduce 代码时需要 jar 文件,但在 hadoop 中执行任何其他非 MapReduce Java 代码时不需要 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22873975/

相关文章:

java - 我需要找到合适的数据结构

java - 如何在Java OpenCV中将Blob转换为Mat?

java - 从数组中的关键字搜索字符串

shell - 如何确定HDFS中的文件夹是否存在以及其中是否有文件?

java - 即使图像存在,可运行的 jar 文件也找不到图像

java - 毕业生 :appengineEnhance fails

amazon-ec2 - 使用 s3 作为 fs.default.name 或 HDFS?

hadoop - 如何扩展行中的数组值!!使用配置单元 SQL

java - 未找到 json-simple.jar

java - 在.jar上运行音频文件