是否需要在Hadoop集群的所有节点上部署mapper和reducer类

时间:2015-09-14 19:10:45

标签: hadoop mapreduce

是否需要在运行Hadoop的所有节点上部署包含Mapper / Reducer类的jar文件?或者只在主节点(名称节点)上?

2 个答案:

答案 0 :(得分:3)

简答:否。

启动MapReduce作业的node/gateway计算机。您需要将主MapReduce Driver jar放在本地文件系统中,并且所有依赖项jar都可以放在local file systemHDFS路径中。因此,当您启动作业时,您将使用-libjars参数传递依赖库jar路径。 HDFS jar将在HDFS的路径中包含 hdfs:// 前缀。本地系统需要主MapReduce jar来启动mapreduce作业,该作业基本上与资源管理器(Hadoop-2)联系,以便为作业分配特定于应用程序的 Application Master

Hadoop是使用数据位置概念设计的。在现实世界中,数据的大小远远大于需要在数据上执行的代码的大小。可执行jar传输到本地包含数据块的节点。这可以最大限度地缩短网络传输时间。

答案 1 :(得分:0)

这是一个棘手的问题。

您的jar需要在所有节点中本地执行,这些节点将执行作业的至少一个任务(Map和/或reducer)(不是所有节点)。 你不需要自己分发罐子。这就是hadoop基于其ResourceManager及其MapReduce框架知道如何做的事情。 hadoop jar 命令是谁开始这个过程。如果您的MapReduce应用程序需要外部依赖项(其他jar),那么您需要将它们提供给hadoop并指定它们在节点之间分配。