Hadoop中副本在不同节点之间的复制需要消耗资源,为了充分发挥Hadoop的性能,Hadoop需要配置机架感知,这可以让Hadoop通过网络拓扑图计算不同节点之间的距离,因此来减少数据传输消耗的资源。
通过Hadoop官网我们知道,不配置机架感知,所有的都默认为/default-rack,可以通过命令hadoop dfsamin -printTopology来查看Hadoop的网络拓扑情况。
配置Hadoop机架感知需要在core-site.xml中配置
<property>
<name>topology.script.file.name</name>
<value>/home/XXX/topology.sh</value>
</property>
topology.sh脚本根据输入的参数进行判断,参数一般是主机名或者ip地址,判断出它对应的机架号,
hosts为各个节点的信息
topology.sh脚本如下:
#! /bin/sh
FILE=/home/enche/software/hadoop-2.7.7/etc/hadoop/hosts
exec < $FILE
while [ $# -gt 0 ];do
result=""
arg=$1
while read line;do
arr=(${line})
if [ "${arr[0]}" = "$arg" ]||[ "${arr[1]}" = "$arg" ];then
result="${arr[2]}"
fi
done
shift
if [ -z "${result}" ];then
echo -n "/default-rack"
else
echo -n "$result"
fi
done
host文本信息如下:
enche01 192.168.3.5 /dc1/rack1
enche02 192.168.3.6 /dc1/rack1
enche03 192.168.3.11 /dc1/rack2
enche04 192.168.3.100 /dc1/rack2
解释:encheXX表示主机名 xxx.xxx.xxx.xxx表示对应的ip /xxx/xxx 表示对应的机架号
配置好后重启集群,使用 hadoop dfsadmin -printTopoloty查看Hadoop节点对应的机架信息