java - hadoop 使用类名提交作业,为什么需要 job.setJarByClass()?

标签 java class hadoop jobs

例如我有一个 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) 类名

只要

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

  2. 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/

相关文章:

java - 我为了好玩而创建了一个类,但是它很快就耗尽了堆空间?

java - 无法初始化类 java.util.logging.LogManager 异常启动 JBoss

java - 你如何在java中使用一个音序器实现多个节奏

ios - swift 类别 : "Cannot convert value of type to expected argument type ' AnyObject! '

hadoop - 逐步遵循 Hive apache wiki 时出现 Hive 安装问题

java - hadoop-enum.valueOf-java.lang.IllegalArgumentException:没有枚举常量

java - 跳过 33/31/32 帧,尽管我使用的是 runOnUiThread

asp.net - 使用 t4 从另一个程序集读取 web.config

c++ - 在 C++ 中创建一个类

Hadoop Streaming 1.0.3 无法识别的 -D 命令