我已经准备好了一个四节点的Yarn集群。由于一个较小的问题,我最近不得不格式化namenode。后来我运行hadoop的pi示例来验证每个节点仍然参与计算,他们都参与了。但是,当我现在开始自己的作业时,其中一个节点根本没有被使用。我想这可能是因为这个节点没有任何数据要处理。所以我试着用均衡器来平衡集群。这不起作用,平衡器告诉我集群是平衡的。我错过了什么?
368yc8dk1#
在处理过程中,您的应用程序管理员将与nodemanager协商容器,而nodemanager反过来将尝试获取最近的datanode资源。由于您的复制因子是3,hdfs将尝试在单个datanode上放置一个完整副本,并将其余副本分布到所有datanode上。1) 将复制因子更改为1(因为您只是尝试进行基准测试,所以减少复制应该不是一个大问题)。2) 确保您的客户机(从中发出-copyfromlocal命令的计算机)上没有运行datanode。否则,hdfs会倾向于将大部分数据放在这个节点中,因为这样可以减少延迟。3) 使用控制文件分发 dfs.blocksize 财产。4) 使用检查datanodes的状态 hdfs dfsadmin -report .
dfs.blocksize
hdfs dfsadmin -report
beq87vna2#
确保您的节点正在加入resourcemanager。查看问题节点上的nodemanager日志,看看是否有错误。查看resourcemanagerwebui(默认情况下为:8088),确保节点列在那里。确保节点将足够的资源带到池中,以便能够运行作业。检查 yarn.nodemanager.resource.cpu-vcores 以及 yarn.nodemanager.resource.memory-mb 在节点上的yarn-site.xml中。内存应该大于容器请求的最小内存(请参阅 yarn.scheduler.minimum-allocation-mb ).
yarn.nodemanager.resource.cpu-vcores
yarn.nodemanager.resource.memory-mb
yarn.scheduler.minimum-allocation-mb
2条答案
按热度按时间368yc8dk1#
在处理过程中,您的应用程序管理员将与nodemanager协商容器,而nodemanager反过来将尝试获取最近的datanode资源。由于您的复制因子是3,hdfs将尝试在单个datanode上放置一个完整副本,并将其余副本分布到所有datanode上。
1) 将复制因子更改为1(因为您只是尝试进行基准测试,所以减少复制应该不是一个大问题)。
2) 确保您的客户机(从中发出-copyfromlocal命令的计算机)上没有运行datanode。否则,hdfs会倾向于将大部分数据放在这个节点中,因为这样可以减少延迟。
3) 使用控制文件分发
dfs.blocksize
财产。4) 使用检查datanodes的状态
hdfs dfsadmin -report
.beq87vna2#
确保您的节点正在加入resourcemanager。查看问题节点上的nodemanager日志,看看是否有错误。查看resourcemanagerwebui(默认情况下为:8088),确保节点列在那里。
确保节点将足够的资源带到池中,以便能够运行作业。检查
yarn.nodemanager.resource.cpu-vcores
以及yarn.nodemanager.resource.memory-mb
在节点上的yarn-site.xml中。内存应该大于容器请求的最小内存(请参阅yarn.scheduler.minimum-allocation-mb
).