Hadoop中的setJarByClass()

在Hadoop算法的驱动程序方法的某些时刻,我们将作业链接到设置为Mapper和Reducer的类的引用。 例如:

job.setMapperClass(MyMapper.class); job.setReducerClass(MyReducer.class); 

通常驱动程序方法是main而映射器和reducer是作为内部静态类实现的。

假设MyMapper.classMyReducer.classMyClass.class内部静态类,并且该驱动程序方法是MyClass.class的主要部分。 有时我看到在上面两个之后添加了以下行:

  job.setJarByClass(Myclass.class); 

这个配置步骤的含义是什么,什么时候有用或强制?

在我的情况下(我有一个单节点集群安装),如果我删除此行,我可以继续正确运行该作业。 为什么?

在这里,我们帮助Hadoop找出它应该发送给节点以执行Map和Reduce任务的jar。 我们的abc-jar.jar可能在其类路径中有各种其他jar,我们的驱动程序代码也可能位于与Mapper和Reducer类不同的jar或位置。

因此,使用这个setJarByClass方法,我们告诉Hadoop找出相关的jar,找出指定为它的参数的类作为该jar的一部分存在。 因此,通常我们应该提供MapperImplementation.class或您的Reducer实现或与Mapper和Reducer相同的jar中存在的任何其他类。 还要确保Mapper和Reducer都是同一个jar的一部分。

参考: http : //www.bigdataspeak.com/2014/06/what-is-need-to-use-jobsetjarbyclass-in.html