【问题标题】:hadoop submits job with class name, why is job.setJarByClass() necessary?hadoop用类名提交作业,为什么需要job.setJarByClass()?
【发布时间】:2018-08-25 05:39:50
【问题描述】:

例如我有一个 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?
    }
}

C 编译成 jar 并像这样提交给 yarn:

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

在这个命令中,我们指定了:

(1) jar 名 (2) 类名

只要

  1. hadoop 已经从其命令行中知道“WordCount”是 wordcount.jar 中的类名。

  2. WordCount.java的公共类总是WordCount,这是java标准吧?

那打电话有什么意义

setJarByClass(WordCount.class)

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

【问题讨论】:

    标签: java class hadoop jobs


    【解决方案1】:

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

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

    如果您确实想从 CLI 获取课程,则可以执行 Class.forName(args[2]) 之类的操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      相关资源
      最近更新 更多