hdoop机架感知策略

      在大型的hadoop集群中数据中心会分布在多个机架上,同样小的集群一般也会占据俩到三个机架。这样对于集群来说,在单个机架发生故障时,能够提供额外的冗余性。hadoop本身实现了机架感知在(rack-aware),同时能够根据服务器所属的机架进行一定的优化。其中一个示例是hadoop使用的分块副本分布策略。它会尝试在不同的机架上存储至少一个副本,以此来增加数据弹性。在请求分布块时(例如在MapReduce作业中),hadoop会选择相同机架上的服务器,从而避免了跨越机架的网络访问。

为了使用该特性,hadoop需要开启机架感知策略,默认是不开启的。开启该策略需要hadoop管理员提供一个返回机架标识以及服务器Ip或者主机名的可执行文件。该文件最常见的做法是创建一个由逗号分隔的文本文件,其中包含服务器所对应的机架,同时编写一个命令行,或者python或者perl脚本,他将IP或者主机名作为参数并且返回机架标识。机架标识可以为任意的字符串。其配置在core-site.xml中加入:

<name>net.topology.script.file.name</name>

<value>/etc/hadoop/conf/rackTopology.py</value>

/etc/hadoop/conf/rackTopology.py
#-*-coding:UTF-8 -*-
import sys

rack = {"hadoop-node-01":"rack1",
        "hadoop-node-02":"rack1",
        "hadoop-node-03":"rack1",
        "hadoop-node-04":"rack1",
        "hadoop-node-09":"rack2",
        "hadoop-node-10":"rack2",
        "hadoop-node-11":"rack2",
        "hadoop-node-12":"rack2",
        "hadoop-node-13":"rack2",
        "hadoop-node-14":"rack2",
        "192.168.1.11":"rack1",
        "192.168.1.12":"rack1",
        "192.168.1.13":"rack1",
        "192.168.1.14":"rack1",
        "192.168.1.39":"rack2",
        "192.168.1.30":"rack2",
        "192.168.1.31":"rack2",
        "192.168.1.32":"rack2",
        "192.168.1.33":"rack2",
        "192.168.1.34":"rack2",
        }

if __name__=="__main__":
        print "/" + rack.get(sys.argv[1],"rack0")

猜你喜欢

转载自blog.csdn.net/sujins5288/article/details/86467359