在hadoop算法的驱动方法中的某个时刻,我们将作业链接到设置为mapper和reducer的类的引用。例如:
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
通常驱动程序方法是 main
而mapper和reducer是作为内部静态类实现的。
假设 MyMapper.class
以及 MyReducer.class
内部静态类 MyClass.class
驱动程序方法是 MyClass.class
. 有时我看到下面的一行加在上面两行的后面:
job.setJarByClass(Myclass.class);
此配置步骤的含义是什么?它是有用的还是必需的?
在我的情况下(我有一个单节点集群安装),如果我删除这一行,我可以继续正确运行作业。为什么?
1条答案
按热度按时间cgyqldqp1#
这里我们帮助hadoop找出它应该发送给节点的jar来执行map和reduce任务。我们的-jar.jar可能在它的类路径中有其他各种jar,而且我们的驱动程序代码可能在一个单独的jar或位置中,而不是Map器和还原器类的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