包含我的Mapper/Reducer类的jar文件需要部署在Hadoop运行的所有节点上吗?还是只在主节点(名称节点)上?
简短的回答:没有。
启动MapReduce作业的node/gateway
机器。您需要将主MapReduce Driver
jar放在本地文件系统中,所有依赖jar都可以放在local file system
或HDFS
路径中。因此,当您启动作业时,您将使用-libjars
参数传递依赖库jar路径。HDFS jar将包含 hdfs://
前缀到它们在HDFS中的路径。本地系统上需要主MapReduce jar来启动MapReduce作业,它本质上是与资源管理器 (Hadoop-2)联系,为作业分配特定于应用程序的应用程序主程序。
这是一个棘手的问题。
jar需要在本地所有将执行作业的至少一个任务(Map和/或reducer)的节点中(不是所有节点)。但是你不需要自己分发你的jar。基于它的ResourceManager和MapReduce框架,hadoop知道如何做到这一点。hadoop jar命令是启动该进程的人。如果你的MapReduce应用程序需要外部依赖(其他jar),那么你需要把它们放在hadoop中,并指定它们在节点之间分布。