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



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

简短的回答:没有。

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

Hadoop是使用数据局部性概念设计的。在现实世界中,数据的大小远远大于需要在数据上执行的代码的大小。可执行的jar文件被传输到本地包含数据块的节点。

这是一个棘手的问题。

jar需要在本地所有将执行作业的至少一个任务(Map和/或reducer)的节点中(不是所有节点)。但是你不需要自己分发你的jar。基于它的ResourceManager和MapReduce框架,hadoop知道如何做到这一点。hadoop jar命令是启动该进程的人。如果你的MapReduce应用程序需要外部依赖(其他jar),那么你需要把它们放在hadoop中,并指定它们在节点之间分布。

相关内容

  • 没有找到相关文章

最新更新