弹性 MapReduce 跨可用区服务高可用

Hadoop 集群机架感知是指 Hadoop 分布式计算框架中的节点会根据网络拓扑结构进行组织,并且在任务调度和数据存储时将优先发生在同一机架内的节点之间,以提高集群性能和可靠性的技术。
它是由 HDFS 和 YARN 两个组件来支持的。HDFS 通过将数据块的副本分布在不同的机架上,实现数据的高可靠性和高可用性。YARN 则通过将任务分配到距离更近的节点或容器上,提高任务执行的效率和性能。
而 Hadoop 无法自。

相关产品
弹性 MapReduce 产品页,含版本规格、价格与购买入口。

一、机架感知概述

·自定义 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 查看:


赞 (0)
上一篇 4天前
下一篇 4天前