java - hadoop用类名提交作业,为什么需要job.setJarByClass()?
问题描述
例如,我有一个 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 中的类名。
WordCount.java 的公共类总是 WordCount,这是 java 标准,对吧?
那打电话有什么意义
setJarByClass(WordCount.class)
在我看来这是多余的。为什么需要此声明?谢谢
解决方案
一个 JAR 文件中可以有多个main
方法,因此类名是必需的,除非您将清单文件添加到 JAR。
而且你的job.set
类不需要和main
方法是同一个类,但是Hadoop不能自动知道你想为这个工作运行哪个类,因此你还需要在代码中设置类
Class.forName(args[2])
不过,如果您确实想从 CLI 获取课程,您可以做类似的事情
推荐阅读
- python-3.x - 使用 Python Selenium 单击按钮
- python - 使用 matplotlib 绘制图像
- flutter - 如何在 Widget 之间传递数据
- geometry - 带有 Python 乌龟图形的特定大小的三角形
- python - Python Selenium - 使用javascript更快输入时文本消失
- java - 如何配置 Helidon MP 安全性
- ios - UITableVIewCell ,在滑动时显示编辑联系人按钮
- azure - 使用 Ionic 的 Azure 通信服务
- c - 在 C 中的 for 循环中使用结构指针时出现一些分段错误
- date - 如何计算Stata中多个日期之间的差异?