e、 g.我有一个hadoop字数计算程序(来自互联网),wordcount.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中的类名。
java的公共类总是wordcount,这是java标准,对吗?
那打电话有什么意义
setJarByClass(WordCount.class)
在我看来这是多余的。为什么需要这份声明?谢谢
1条答案
按热度按时间a14dhokn1#
你可以有不止一个
main
方法,因此类名是必需的,除非您向jar中添加清单文件。还有你的
job.set
类不需要与main
方法,但hadoop无法自动知道要为作业运行哪个类,因此还需要在代码中设置该类你可以这样做
Class.forName(args[2])
但是,如果确实要从cli获取类