Hadoop機架感知(rack-aware)配置指南

Hadoop機架感知(rack-aware)配置

副本的存放策略又是HDFS實現高可靠性和搞性能的關鍵,優化的副本存放策略也正是HDFS區分於其他大部分分佈式文件系統的重要特性。HDFS採用一種稱爲機架感知(rack-aware)的策略來改進數據的可靠性、可用性和網絡帶寬的利用率。大型HDFS實例一般運行在跨越多個機架的計算機組成的機羣上,不同機架(rack)上的兩臺機器之間的通信需要經過交換機,這樣會增加數據傳輸的成本。在大多數情況下,同一機架內的兩臺機器間的帶寬會比不同機架的兩臺機器間的帶寬大(當前網絡一般可以改造到不是瓶頸了)。
一方面,通過一個機架感知的過程,NameNode可以確定每個DataNode所屬的機架ID。目前HDFS採用的策略就是將副本存放在不同的機架上,這樣可以有效防止整個機架失效時數據的丟失,並且允許讀數據的時候充分利用多個機架的帶寬(直接提高hadoop的IO磁盤性能)。這種策略設置可以將副本均勻地分佈在集羣中,有利於組織失效情況下的負載均衡。但是,因爲這種策略的一個寫操作需要傳輸數據塊到多個機架,這增加了寫操作的成本。
另一方面,在讀取數據時,爲了減少整體的帶寬小號和降低整體的帶寬延時(將讀取IO分佈到各個不同的磁盤上),HDFS會盡量讀取程序讀取距離客戶端最近的副本。如果在讀取程序的同一個機架上有一個副本,那麼就讀取該副本;如果一個HDFS集羣跨越多個數據中心,那麼客戶端也將首先讀取本地數據中心的副本。
默認情況下,Hadoop的機架感知策略是未開啓的,默認都是在同一個機架下面。下面敘述下配置步驟

1、創建sh腳本topology.sh
腳本位置自定義存放,這裏存放在/usr/software/hadoop-2.7.3/sh

!/bin/bash

HADOOP_CONF=/usr/software/hadoop-2.7.3/sh
while [ $# -gt 0 ] ; do
nodeArg=$1
exec<${HADOOP_CONF}/topology.data
result=""
while read line ; do

ar=( $line )
if [ "${ar[0]}" = "$nodeArg" ]||[ "${ar[1]}" = "$nodeArg" ]; then
  result="${ar[2]}"
fi

done
shift
if [ -z "$result" ] ; then

echo -n "/default-rack"

else

echo -n "$result"

fi
done
在此要注意的是,要給topology.sh賦予可執行權限

2、配置機架數據
機架數據新建【topolopy.data】文件放置的位置是任意的,這裏也放在/usr/software/hadoop-2.7.3/sh下,上面的這個shell文件用到了這個新建立的文件
第一列爲IP地址, 第二列爲主機名,第三列爲機架位置

192.27.4.193 master /master/rack1
192.25.225.181 node1 /home/rack1
192.25.81.15 node2  /home/rack2

3、將腳本配置到hadoop的core-site.xml中

<property>
     <name>topology.script.file.name</name>
     <value>/usr/software/hadoop-2.7.3/sh/topology.sh</value>
</property>

4、檢驗配置
重啓Hadoop(我的天那。。。。起不來怎麼辦?),輸入命令

hdfs dfsadmin -printTopology

打印如下

至此看到rack1,rack2的輸出,說明機架感知配置成功且已啓用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章