在Hadoop API文档中给出了
那
setJarByClass
public void setJarByClass(Class<?> cls)
Set the Jar by finding where a given class came from.
这个解释究竟是什么意思?它是否从上面方法中指定的类文件参数创建了一个JAR文件?是否为MapReduce任务执行了该jar文件。?
答案 0 :(得分:24)
此方法设置jar文件,其中每个节点将查找Mapper和Reducer类。
它不会从给定的类创建一个jar。相反,它标识包含给定类的jar。是的,该jar文件是为MapReduce作业“执行”(实际上是该jar文件中的Mapper和Reducer)。
(另请参阅Stanley Xu's answer to a similar question关于此方法的必要性,因为您在命令行上给出了jar)
答案 1 :(得分:8)
请注意,在驱动程序中调用Job类的上述方法。您的驱动程序是从客户端调用的,通常是您的桌面或不属于集群的边缘计算机,您的类(在jar文件中)将位于该计算机上。要使mapreduce作业在群集上运行,您需要从客户端计算机将Mapper,reducer和任何其他必需的类发送到群集。驱动程序类负责将包含所需类的jar文件发送到集群。要发送哪个jar需要指定为驱动程序,不知道应该在驱动程序类路径中的jar文件堆中发送哪个jar。这是通过在Job类上使用方法setJarByClass或setJar或类似方法的任何其他变体来完成的。
显然,如果你没有指定它,意味着不调用此方法或将其注释掉将导致从属节点上出现ClassNotFound异常。
希望这澄清!
答案 2 :(得分:0)
job.setJarByClass(WordCount.class);
通过在该Jar中指定一个类,帮助识别包含Mapper
和Reducer
的Jar。