hadoop 提交带有类名的作业,为什么 job.setJarByClass() 是必需的?



例如,我有一个Hadoop字数统计程序(来自互联网( , 字数统计.java:

public static class WordCount{
public static void main(String[] args)throws Exception{
....
Job job = Job.getInstance(new Configuration(), "word count");
job.setJarByClass(WordCount.class); //Why?
}
}

把它编译成一个罐子,然后像这样提交给纱线:

hadoop jar wordcount.jar WordCount [input-hdfs] [output-hdfs]

在此命令中,我们指定了:

(1( 罐子名称 (2( 类名

只要

  1. Hadoop已经从它的命令行知道"WordCount"是wordcount.jar中的类名。

  2. WordCount
  3. 的公共类.java永远是WordCount,这是java标准,对吧?

那么打电话有什么意义

setJarByClass(WordCount.class)

在我看来这是多余的。为什么需要此声明?谢谢

您可以在单个 JAR 文件中有多个main方法,因此类名是必需的,除非您将清单文件添加到 JAR。

而且你的job.set类不需要与main方法是同一个类,但Hadoop不能自动知道你想为作业运行哪个类,因此你也需要在代码中设置类

。不过,如果您确实想从 CLI 获取类,您可以做类似Class.forName(args[2])

最新更新