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



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

    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 文件。用户可以将他们的 Map Reduce 代码捆绑在一个 jar 文件中,并使用此命令执行它。

 hadoop CLASSNAME 

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

上面的这些命令正在做两个思考。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新