rack awareness机架感知:将主机分为数据中心-机架-主机,构建网络拓扑图,三层结构,使用目录将每个主机进行管理起来。
优点:副本策略、保持数据高可靠性。
单副本:本地节点
双副本:本地节点、另一个机架节点
三副本:本地节点、另一个机架节点、相同机架不同主机
多副本:三副本以外的随机主机节点
原则:一个主机一个备份
副本数少于两倍机架数,一个机架副本数量不能大于两个副本
数据读取等开销最小化。
根据客户端请求主机的目录判断远近,来控制哪些节点优先响应。
实例:
1、编辑节点分配策略 racks.py 赋予执行权限
import netaddr
import sys
sys.argv.pop(0) # 从 argv 列表中丢弃拓扑脚本的名称,因为我们只需要 IP 地址
netmask = '255.255.255.0' # 将网络掩码设置为您的环境中使用的网络掩码。示例使用 /24
for ip in sys.argv: # 循环遍历数据节点 IP 列表
address = '{0}/{1}'.format(ip, netmask) # 格式化地址字符串,使其看起来像“ip/netmask”,以使 netaddr 工作
try:
network_address = netaddr.IPNetwork(address).network # 计算并打印网络地址
print("/{0}".format(network_address))
except:
print("/rack-unknown") # 如果无法计算网络地址,则打印 catch-all 值
2、在core-site.xml配置文件中增加路径
<property>
<name>net.topology.script.file.name</name>
<value>${HADOOP_HOME}/racks.py</value>
</property>
3、测试
启动HDFS start-dfs.sh
打印所有机架主机打印拓扑树
hdfs dfsadmin -printTopology