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

ijnw1ujt  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(852)

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)

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

a14dhokn

a14dhokn1#

你可以有不止一个 main 方法,因此类名是必需的,除非您向jar中添加清单文件。
还有你的 job.set 类不需要与 main 方法,但hadoop无法自动知道要为作业运行哪个类,因此还需要在代码中设置该类
你可以这样做 Class.forName(args[2]) 但是,如果确实要从cli获取类

相关问题