我已经设置并运行了一个四节点 YARN 集群。由于一个小问题,我最近不得不格式化名称节点。
后来我运行了Hadoop的PI示例来验证每个节点是否仍在参与计算,他们都这样做了。但是,当我开始自己的工作时,其中一个节点根本没有被使用。
我想这可能是因为这个节点没有任何数据可以处理。所以我尝试使用平衡器平衡集群。这不起作用,平衡器告诉我集群是平衡的。
我错过了什么?
在处理时,您的 ApplicationMaster 会忽略容器的 NodeManager,而 NodeManager 反过来会尝试获取最近的数据节点资源。由于您的复制因子为 3,HDFS 会尝试将 1 个完整副本放在单个数据节点上,并将其余副本分布到所有数据节点上。
1) 将复制因子更改为 1(由于您只是尝试进行基准测试,因此减少复制应该不是一个大问题)。
2) 确保您的客户端(您从中发出 -copyFromLocal 命令的机器)没有在其上运行数据节点。如果没有,HDFS将倾向于将大部分数据放在这个节点上,因为它会减少延迟。
3) 使用 dfs.blocksize
属性控制文件分发。
4) 使用 hdfs dfsadmin -report
检查数据节点的状态。
-
确保您的节点已加入资源管理器。查看问题节点上的节点管理器登录,查看是否有错误。查看资源管理器 Web UI(默认为 :8088),确保节点列在那里。
-
确保节点为池提供足够的资源,以便能够运行作业。检查节点上的纱线站点.xml中的
yarn.nodemanager.resource.cpu-vcores
和yarn.nodemanager.resource.memory-mb
。内存应大于容器请求的最小内存(请参阅yarn.scheduler.minimum-allocation-mb
)。