Hadoop 中的 setJarByClass()

Joh*_*han 5 java hadoop jar

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

        job.setMapperClass(MyMapper.class);
        job.setReducerClass(MyReducer.class);
Run Code Online (Sandbox Code Playgroud)

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

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

        job.setJarByClass(Myclass.class);
Run Code Online (Sandbox Code Playgroud)

此配置步骤的含义是什么以及何时有用或强制?

就我而言(我有单节点集群安装),如果删除此行,我可以继续正确运行作业。为什么?

小智 6

这里我们帮助 Hadoop 找出应该发送哪个 jar 到节点来执行 Map 和 Reduce 任务。我们的 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