一、机架感知概述
·自定义 Java 类实现 DNSToSwitchMapping 的接口方法,并在 core-site.xml 配置文件中由 net.topology.node.switch.mapping.impl 参数指定类名。
·基于脚本进行拓扑映射,并在 core-site.xml 配置文件中使用 net.topology.script.file.name 参数指定。
下面提供了基于脚本配置机架感知策略的示例,基本方法是映射可用区子网到机架信息。
注意:机架感知搭建需基于集群为跨可用区部署架构(集群创建请参见 跨可用区集群部署),单可用区集群不适用。
二、基于脚本配置机架感知策略
1. 准备一个跨可用区的 EMR 集群,登录 EMR 控制台,单击集群 ID/名称进入集群详情页,在实例信息 > 部署信息中确认集群所在的 VPC 网络信息和不同可用区对应的子网。
然后在私有网络 > 子网中获取子网的 CIDR 与可用区的映射信息。
注意:VPC 名称和子网名称均可能存在重复情况,此时需进入集群资源下的实例信息进一步确认。
2. 根据子网 CIDR 与可用区的映射信息,准备机架感知脚本 RackAware.py。
注意:说明:
注意:本为使用 /usr/bin/python 路径下的 python2 版本为示例,其中 #CIDR# 需替换为子网 CIDR。
#!/usr/bin/python import sysimport IPyimport reDEFAULT_RACK="/default-rack"cidrToRack = { ' #CIDR#' : 'rack-1', ' #CIDR#' : 'rack-2', ' #CIDR#' : 'rack-3' }for name in sys.argv[1:]: rack = DEFAULT_RACK ips = re.findall(r'[0-9]+(?:\\.[0-9]+){3}', name) if len(name) > 0 and len(ips) > 0: ip = ips[0] for cidr in cidrToRack.keys(): if ip in IPy.IP(cidr): rack = cidrToRack[cidr] break print "/{0}".format(rack)
3. 集群服务> HDFS > 配置管理中,新增 RackAware.py 文件,并在 NameNode 节 点core-site.xml 文件增加配置项net.topology.script.file.name=/usr/local/service/hadoop/etc/hadoop/RackAware.py。
4. 控制台重启 NameNode和ResourceManager。
三、查看集群的机架信息
HDFS 服务:登录 NameNode 节点,hadoop 用户执行 hdfs dfsadmin -printTopology,如下:
YARN 服务:可登录 WebUI 查看: