【问题标题】:Does the mapper and reducer classes need to be deployed on all nodes of a Hadoop clustermapper和reducer类是否需要部署在Hadoop集群的所有节点上
【发布时间】:2015-09-16 05:47:55
【问题描述】:

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

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    简短回答:否。

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

    Hadoop 是使用 数据局部性 概念设计的。在现实世界中,数据的大小远远大于需要在数据上执行的代码的大小。可执行的 jars 被传输到本地包含数据块的节点。这样可以最大限度地减少网络传输时间。

    【讨论】:

      【解决方案2】:

      这是一个棘手的问题。

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

      【讨论】:

        猜你喜欢
        • 2019-10-28
        • 2019-12-10
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        相关资源
        最近更新 更多