【问题标题】:Hadoop doesn't use one node for jobHadoop 不使用一个节点来完成工作
【发布时间】:2014-09-08 01:33:00
【问题描述】:

我已经设置并运行了一个四节点 YARN 集群。由于一个较小的问题,我最近不得不格式化名称节点。

后来我运行了 Hadoop 的 PI 示例来验证每个节点仍然参与计算,他们都这样做了。但是,当我开始自己的工作时,其中一个节点根本没有被使用。

我想这可能是因为这个节点没有任何数据可以处理。所以我尝试使用平衡器来平衡集群。这不起作用,平衡器告诉我集群是平衡的。

我错过了什么?

【问题讨论】:

  • 您的 HDFS 复制因子是多少?为什么你认为集群中的所有节点都必须用于作业?
  • 复制因子为 3;因为这会加快 CPU 繁重的计算?
  • 如果集群大小为 4 且复制因子为 3,那么第 4 个节点如何拥有输入的数据块(以运行任务)?
  • 因为 HDFS 不需要将所有复制放在同一个节点组合上,还是我在这里弄错了?我在节点 A、B、C 上映像 file1;节点 B、C、D 上的文件 2... 然后每个节点都有工作要做?

标签: hadoop hadoop-yarn


【解决方案1】:

在处理过程中,您的 ApplicationMaster 会与 NodeManager 协商容器,而 NodeManager 会依次尝试获取最近的数据节点资源。由于您的复制因子为 3,HDFS 将尝试将 1 个完整副本放在单个数据节点上,并将其余副本分布在所有数据节点上。

1) 将复制因子更改为 1(由于您只是尝试进行基准测试,因此减少复制应该不是大问题)。

2) 确保您的客户端(您将提供 -copyFromLocal 命令的机器)上没有运行数据节点。否则,HDFS 将倾向于将大部分数据放在此节点中,因为它会减少延迟。

3) 使用dfs.blocksize 属性控制文件分发。

4) 使用hdfs dfsadmin -report 检查数据节点的状态。

【讨论】:

    【解决方案2】:
    1. 确保您的节点已加入资源管理器。查看问题节点上的nodemanager log,看看是否有错误。查看资源管理器 Web UI(默认为:8088),确保该节点已在此处列出。

    2. 确保节点为池带来足够的资源以运行作业。在节点上的 yarn-site.xml 中检查 yarn.nodemanager.resource.cpu-vcoresyarn.nodemanager.resource.memory-mb。内存应大于容器请求的最小内存(请参阅yarn.scheduler.minimum-allocation-mb)。

    【讨论】:

    • 1.是的,该节点加入了集群并在 rm web ui 中列出。 2. 节点配备6核和12GB内存,应该绰绰有余;特别是因为它在集群重置之前工作得非常好
    • 确保节点使用可用的 RAM。配置可能会覆盖它。此外,确保该节点也是 HDFS 集群的一部分,datanode 已启动、运行并已连接(由 namenode 列出)。如果不在 namenode 列表中,它不应该阻止它运行作业,但不太可能被拾取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多