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