Hadoop機架感知(rack-aware)配置
副本的存放策略又是HDFS實現高可靠性和搞效能的關鍵,優化的副本存放策略也正是HDFS區分於其他大部分分散式檔案系統的重要特性。HDFS採用一種稱為機架感知(rack-aware)的策略來改進資料的可靠性、可用性和網路頻寬的利用率。大型HDFS例項一般執行在跨越多個機架的計算機組成的機群上,不同機架上的兩臺機器之間的通訊需要經過交換機,這樣會增加資料傳輸的成本。在大多數情況下,同一機架內的兩臺機器間的頻寬會比不同機架的兩臺機器間的頻寬大。
一方面,通過一個機架感知的過程,NameNode可以確定每個DataNode所屬的機架ID。目前HDFS採用的策略就是將副本存放在不同的機架上,這樣可以有效防止整個機架失效時資料的丟失,並且允許讀資料的時候充分利用多個機架的頻寬。這種策略設定可以將副本均勻地分佈在叢集中,有利於組織失效情況下的負載均衡。但是,因為這種策略的一個寫操作需要傳輸資料塊到多個機架,這增加了寫操作的成本。
另一方面,在讀取資料時,為了減少整體的頻寬小號和降低整體的頻寬延時,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下
第一列為IP地址, 第二列為主機名,第三列為機架位置
120.27.4.193 master /master/rack1
120.25.225.181 node1 /dd/rack1
120.25.81.15 node2 /dd/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
列印如下
螢幕快照 2017-03-31 21.24.56.png
至此,說明機架感知配置成功且已啟用
作者:evil_ice
連結:https://www.jianshu.com/p/1ce145837be9
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。