例如我有一个 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?
}
}
像这样将它编译成一个 jar 并提交给 yarn:
hadoop jar wordcount.jar WordCount [input-hdfs] [output-hdfs]
在这个命令中,我们指定了:
(1) jar 名 (2) 类名
只要
hadoop 已经从其命令行中知道“WordCount”是来自 wordcount.jar 的类名。
WordCount.java 的公共(public)类始终是 WordCount,这是 java 标准,对吧?
那调用的意义何在
setJarByClass(WordCount.class)
在我看来这是多余的。为什么需要这个声明?谢谢
最佳答案
您可以在一个 JAR 文件中有多个 main
方法,因此类名是必需的,除非您将 list 文件添加到 JAR 中。
而且您的job.set
类不需要与main
方法是同一个类,但是Hadoop 无法自动知道您想要哪个类求职,所以你也需要在代码中设置类
不过,如果您确实想从 CLI 获取类,则可以执行类似 Class.forName(args[2])
的操作
关于java - hadoop 使用类名提交作业,为什么需要 job.setJarByClass()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52014370/