最近几天做Hadoop机架感知功能时,在网上可以找到很多关于HDFS机架感知的资料,但是对于YARN机架感知的介绍却很少。这篇文章最主要就是说明机架感知功能对于YARN来说起到的作用,若有理解的偏差请指正。谢谢。
注:代码基于3.1.1
1 前言
1.1 Hadoop机架感知功能对于HDFS
HDFS的默认副本数是3个,在未启用Hadoop机架感知功能时,数据的备份是随机的,有可能同一个DataNode节点有多个副本,也有可能所有的3个副本都在同一个机架,这样如果一个节点宕机或整个机架出现问题,数据就会丢失。
在开启Hadoop机架感知功能后,本地会存储一份, 同机架的某个节点存储一份,不同机架的某个节点存储一份。这样保证了如果本地数据损坏,首先会在同机架的节点上获取数据;如果整个机架出现问题,也可以保证从其他机架上获取数据。
Hadoop的机架感知功能使得HDFS在读取数据时降低了整体的带宽消耗和读取延时,也保证了数据不会轻易丢失。
1.2 Hadoop机架感知功能对于YARN
Hadoop机架感知功能对于YARN最直观的表现,可以通过ResourceManager的管理界面(ResourceManagerIP:8088/cluster/nodes)查看各个NodeManager所属机架,未启用Hadoop机架感知功能时,默认的机架就为/default-rack。这个可以结合NodeManager的健康检查功能,很快的定位出现问题节点所在的物理位置。
并且Hadoop机架感知还会影响YARN中Container启动时所在节点。Container首先会选择数据所在节点启动,如果该节点资源不足,则会在与该节点同机架的节点启动。如果该机架的节点资源都不足,则在其他节点启动。
2 启用Hadoop机架感知功能
2.1 相关配置
配置项 | 默认值 | 配置说明 |
---|---|---|
net.topology.node.switch.mapping.impl | org.apache.hadoop.net.ScriptBasedMapping | DNSToSwitchMapping的实现类。当配置为"org.apache.hadoop.net.ScriptBasedMapping"时,它调用“net.topology.script.file.name”中指定的脚本来解析节点所属机架。如果“net.topology.script.file.name”的值为空,所有节点的机架信息都为"/default-rack" |
net.topology.script.file.name | <