关于Job类的setJarByClass方法的Hadoop查询

时间:2010-10-12 06:53:15

标签: hadoop

在Hadoop API文档中给出了

setJarByClass 

public void setJarByClass(Class<?> cls)

Set the Jar by finding where a given class came from.

这个解释究竟是什么意思?它是否从上面方法中指定的类文件参数创建了一个JAR文件?是否为MapReduce任务执行了该jar文件。?

3 个答案:

答案 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中指定一个类,帮助识别包含MapperReducer的Jar。