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

doinxwow  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(773)

我想知道为什么在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
h6my8fg2

h6my8fg21#

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

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

hadoop CLASSNAME

hadoop脚本可以用来调用任何类。
以上这些命令是在做两件事。
1) 将hadoop安装库目录中的所有jar添加到运行jar或类的类路径中。
2) 将hadoop安装的配置目录添加到类路径中。
因此,运行的jar或类将获得hadoop安装类路径中的所有类以及安装的所有配置文件。
如果您使用simple Java CLASSNAME 命令您必须将上述两个组件分别添加到java类路径中。

相关问题