是否需要在运行Hadoop的所有节点上部署包含Mapper / Reducer类的jar文件?或者只在主节点(名称节点)上?
答案 0 :(得分:3)
简答:否。
启动MapReduce作业的node/gateway
计算机。您需要将主MapReduce Driver
jar放在本地文件系统中,并且所有依赖项jar都可以放在local file system
或HDFS
路径中。因此,当您启动作业时,您将使用-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并指定它们在节点之间分配。