tencent cloud

文档反馈

跨可用区服务高可用

最后更新时间:2024-10-30 10:35:16

    机架感知概述

    Hadoop 集群机架感知是指 Hadoop 分布式计算框架中的节点会根据网络拓扑结构进行组织,并且在任务调度和数据存储时将优先发生在同一机架内的节点之间,以提高集群性能和可靠性的技术。 它是由 HDFS 和 YARN 两个组件来支持的。HDFS 通过将数据块的副本分布在不同的机架上,实现数据的高可靠性和高可用性。YARN 则通过将任务分配到距离更近的节点或容器上,提高任务执行的效率和性能。 而 Hadoop 无法自动发现节点的网络拓扑结构,所以提供了以下方式帮助其感知:
    自定义 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 sys
    import IPy
    import re
    
    DEFAULT_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 查看:
    
    
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持