【问题标题】:hadoop node unused for map tasks未用于映射任务的 hadoop 节点
【发布时间】:2013-07-02 15:13:53
【问题描述】:

我注意到所有 map 和所有 reduce 任务都在单个节点 (node1) 上运行。我尝试创建一个由位于 node2 上的单个 hdfs 块组成的文件。当运行一个 mapreduce 任务时,它的输入只包含驻留在 node2 上的这个块,该任务仍然在 node1 上运行。我的印象是 hadoop 优先考虑在包含输入数据的节点上运行任务。我在日志文件中没有看到任何错误报告。知道这里可能会发生什么吗?

我有一个运行在 kvm 上的 3 节点集群,这是按照 cloudera cdh4 分布式安装指南创建的。

【问题讨论】:

  • 你怎么知道你的块驻留在 node2 上?您使用的是哪个调度程序?

标签: hadoop hdfs cloudera


【解决方案1】:

我的印象是 hadoop 优先考虑运行任务 包含输入数据的节点。

好吧,可能有一个例外:

如果持有数据块的节点没有任何空闲的 CPU 插槽,它将无法在该特定节点上启动任何映射器。在这种情况下,数据块将被移动到附近的节点并在那里进行处理,而不是等待。但在该框架将尝试在本地处理该块的副本之前(如果 RF > 1)。

HTH

【讨论】:

    【解决方案2】:

    当您说“我尝试创建一个由位于 node2 上的单个 hdfs 块组成的文件”时,我不明白。我不认为您可以“指导”hadoop 集群将某些块存储在某个特定节点中。

    Hadoop 将根据输入的大小决定映射器的数量。如果输入大小小于 hdfs 块大小(我认为默认为 64m),它将只生成一个映射器。

    您可以将作业参数“mapred.max.split.size”设置为您想要强制生成多个减速器的任何大小(默认值在大多数情况下就足够了)。

    【讨论】:

    • 虽然不是很简单,但是可以按照我们的意愿放置块。在这里,用户没有询问映射器/减速器的数量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    相关资源
    最近更新 更多