当硬件服务器数量多分布在不同机架上时,NameNode必须要知道所有DataNode(slaves)的所在的机架。否则的话会出现在不同rack间的不必要的网络流量,降低数据读写的性能。
可以通过以下两个配置实现机架感知:
1、启用机架感知:在namenode所在机器的hadoop-site.xml中做如下配置,指定机架感知脚本
topology.script.file.name
/hadoop/conf/topology.py
2、定义机架感知脚本,实现如下功能:
接受一个参数(通常某个slave的主机名或者ip),返回此slave所在的机架的机架名。
文本内容格式如下:
rack={
“hadoopdatanode-176.tj”:”rack1”,
“hadoopdatanode-177.tj”:”rack1”,
“hadoopdatanode-178.tj”:”rack1”,
“hadoopdatanode-179.tj”:”rack1”,
“hadoopdatanode-180.tj”:”rack2”,
“192.168.1.256”:”rack3”
}