HDFS多副本放置策略及云中的優(yōu)化(LDBAS)

在HDFS集群中,一般設(shè)置多副本提高可靠性(冗余),也能提高數(shù)據(jù)讀取的總體性能米丘。但這多個(gè)副本應(yīng)該選擇哪些節(jié)點(diǎn)進(jìn)行放置呢剑令?即本文要討論的數(shù)據(jù)放置策略,或稱多副本放置策略 replica placement policy拄查。
mark: 本文中吁津,默認(rèn)副本因子為3。

最原始的放置策略即把三個(gè)副本盡量分配到不同的三個(gè)節(jié)點(diǎn)上堕扶。否則碍脏,假設(shè)兩副本放置到了一個(gè)節(jié)點(diǎn),則會(huì)因?yàn)樵摴?jié)點(diǎn)的故障而直接損失兩個(gè)副本稍算,且在該數(shù)據(jù)被大量客戶端同時(shí)讀取時(shí)典尾,兩個(gè)副本也不能分擔(dān)負(fù)載(該節(jié)點(diǎn)的處理能力即上限)。

三副本放置

機(jī)架感知策略 Rack Awareness

既然考慮了節(jié)點(diǎn)故障邪蛔,不妨再考慮下機(jī)架故障:由于斷電/物理線路斷路/交換機(jī)故障等問題造成一整個(gè)機(jī)架的機(jī)子同時(shí)崩潰時(shí)……若某個(gè)重要機(jī)密放置時(shí)正好全放在了這一個(gè)機(jī)架的三臺(tái)機(jī)子上……就問你怕不怕急黎!
若我們?cè)跀?shù)據(jù)放置時(shí),盡量將一個(gè)數(shù)據(jù)的不同副本盡量均勻地放置到不同機(jī)架的機(jī)子中侧到,就能有效避免機(jī)架崩潰即數(shù)據(jù)丟失的情況勃教,提高可靠度。若你非要問我:幾個(gè)機(jī)架都崩潰了呢匠抗?機(jī)房都沒了呢故源?我也無言以對(duì),抱拳向“杠精”致敬汞贸。

網(wǎng)絡(luò)拓?fù)?/h5>

實(shí)現(xiàn)“均勻放置到不同機(jī)架”的策略之前绳军,我們需要先識(shí)別不同的機(jī)架。在Hadoop中矢腻,通過網(wǎng)絡(luò)拓?fù)鋵?duì)節(jié)點(diǎn)進(jìn)行相對(duì)位置定義门驾。樹形的網(wǎng)絡(luò)位置拓?fù)淙缦拢粋€(gè)嚴(yán)格的層級(jí)結(jié)構(gòu)多柑。

網(wǎng)絡(luò)位置拓?fù)?/div>

/datacenter/rack/node奶是,類似文件系統(tǒng)中的文件路徑名,Hadoop據(jù)此來識(shí)別不同的節(jié)點(diǎn)竣灌。

但是集群無法自己感知到各節(jié)點(diǎn)的相對(duì)位置(其實(shí)可以通過探測(cè)網(wǎng)絡(luò)延遲來推斷)聂沙,需要進(jìn)行機(jī)架感知的配置。配置前初嘹,所有的節(jié)點(diǎn)的相對(duì)位置都默認(rèn)為是一樣的“/default-rack”及汉,只會(huì)通過IP去區(qū)分。
Hadoop中屯烦,可通過調(diào)用Java類或配置文件指定的外部腳本來獲取各節(jié)點(diǎn)的網(wǎng)絡(luò)位置標(biāo)志符坷随。但兩種方式都需要遵守繼承org.apache.hadoop.net.DNSToSwitchMapping接口房铭,以保證節(jié)點(diǎn)與ID的一一對(duì)應(yīng)關(guān)系,拓?fù)湫畔⒏袷?rack/host温眉。

  • 使用Java類:實(shí)現(xiàn)一個(gè)類育叁,該類將由net.topology.node.switch.mapping.impl參數(shù)指定
  • 使用外部腳本:由net.topology.script.file.name參數(shù)指定,以下是官網(wǎng)給的一個(gè)python腳本示例芍殖,輸入節(jié)點(diǎn)IP可輸出對(duì)應(yīng)的位置ID。
#!/usr/bin/python
# this script makes assumptions about the physical environment.
#  1) each rack is its own layer 3 network with a /24 subnet, which
# could be typical where each rack has its own
#     switch with uplinks to a central core router.
# 2) topology script gets list of IP's as input, calculates network address, and prints '/network_address/ip'.

import netaddr
import sys
sys.argv.pop(0)                                                  # discard name of topology script from argv list as we just want IP addresses

netmask = '255.255.255.0'                                        # set netmask to what's being used in your environment.  The example uses a /24

for ip in sys.argv:                                              # loop over list of datanode IP's
    address = '{0}/{1}'.format(ip, netmask)                      # format address string so it looks like 'ip/netmask' to make netaddr work
    try:
        network_address = netaddr.IPNetwork(address).network     # calculate and print network address
        print "/{0}".format(network_address)
    except:
        print "/rack-unknown"     

機(jī)架感知策略

啟用機(jī)架感知后的副本放置策略具體如下:

  1. 如果writer在集群節(jié)點(diǎn)中谴蔑,將副本一放置到它所屬的節(jié)點(diǎn)上豌骏,無法滿足則放置到與它同機(jī)架的隨機(jī)一個(gè)節(jié)點(diǎn),再不行就隨機(jī)一個(gè)節(jié)點(diǎn)隐锭。
  2. 副本二放置到不同機(jī)架的節(jié)點(diǎn)上窃躲。
  3. 副本三放置到與副本二同機(jī)架的節(jié)點(diǎn)中。

由此避免機(jī)架故障帶來的數(shù)據(jù)丟失钦睡,并能有效減少機(jī)架間的寫數(shù)據(jù)帶來的流量開銷蒂窒,可提高寫入性能,但是限定在了兩個(gè)機(jī)架中從而降低了數(shù)據(jù)讀取的總網(wǎng)絡(luò)帶寬荞怒。算是一個(gè)總體性能的綜合衡量考慮吧洒琢。
若副本因子大于3,后續(xù)的副本會(huì)隨機(jī)放置褐桌,但總體上會(huì)保證每個(gè)機(jī)架的副本數(shù)量小于 (replicas-1) / racks +2 衰抑。

LDBAS(可靠性部分)

在云環(huán)境中又不一樣了。在云平臺(tái)中荧嵌,兩個(gè)虛擬機(jī)可能會(huì)存在于一臺(tái)物理宿主機(jī)中呛踊,稱之為虛擬機(jī)共存。若兩個(gè)副本被分配到這兩個(gè)同宿主機(jī)的虛擬節(jié)點(diǎn)中啦撮,一樣地存在可靠性下降(當(dāng)物理機(jī)宕掉時(shí))和性能瓶頸(該節(jié)點(diǎn)的處理能力限制了該副本的并發(fā)讀取上限)谭网。

LDBAS即解決了云環(huán)境中,虛擬共存帶來的可靠性下降赃春,主要思想即重構(gòu)Hadoop網(wǎng)絡(luò)拓?fù)溆湓瘢瑢⑻摂M節(jié)點(diǎn)的物理宿主機(jī)信息考量其中,副本分配時(shí)盡量分布到不同物理宿主機(jī)的虛擬機(jī)節(jié)點(diǎn)聘鳞,避免或減少副本在硬件設(shè)備(物理機(jī)/機(jī)架)的冗余放置薄辅,從而提高可靠性。即網(wǎng)絡(luò)拓?fù)涓聻椋?機(jī)架/物理宿主機(jī)/虛擬節(jié)點(diǎn)抠璃。


LDBAS網(wǎng)絡(luò)位置拓?fù)?/div>

由圖站楚,可定義兩個(gè)節(jié)點(diǎn)的距離為樹中最短路徑的邊的條數(shù)。由此節(jié)點(diǎn)間距離越小搏嗡,即節(jié)點(diǎn)的共存信息越少窿春,在其中放置副本的可靠性越高拉一。故將節(jié)點(diǎn)間距離作為副本放置時(shí)選擇節(jié)點(diǎn)的依據(jù)。
如何求解副本放置的多個(gè)節(jié)點(diǎn)呢旧乞?暴力求解固然能得到最優(yōu)解蔚润,但遍歷搜索多節(jié)點(diǎn)集合選擇相對(duì)距離最小的一個(gè),求解的時(shí)間復(fù)雜度達(dá)到O(n^k)尺栖,k是副本因子數(shù)嫡纠。HDFS原始放置策略,是針對(duì)每個(gè)副本都遍歷節(jié)點(diǎn)進(jìn)行選擇延赌,復(fù)雜度在(可·n)除盏,LDBAS也采用了貪心算法求解:

  1. 優(yōu)先客戶端所在節(jié)點(diǎn)或與其同機(jī)架節(jié)點(diǎn)或隨機(jī)
  2. 與副本一放置節(jié)點(diǎn),距離最遠(yuǎn)的節(jié)點(diǎn)
  3. 與副本一挫以、二放置節(jié)點(diǎn)總距離最遠(yuǎn)的節(jié)點(diǎn)
    實(shí)質(zhì)策略中者蠕,還考慮了本地性的影響因素,此處僅針對(duì)可靠性掐松,不做展開(可見后續(xù)文章)踱侣。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市大磺,隨后出現(xiàn)的幾起案子抡句,更是在濱河造成了極大的恐慌,老刑警劉巖杠愧,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玉转,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡殴蹄,警方通過查閱死者的電腦和手機(jī)究抓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袭灯,“玉大人刺下,你說我怎么就攤上這事』” “怎么了橘茉?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)姨丈。 經(jīng)常有香客問我畅卓,道長(zhǎng),這世上最難降的妖魔是什么蟋恬? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任翁潘,我火速辦了婚禮,結(jié)果婚禮上歼争,老公的妹妹穿的比我還像新娘拜马。我一直安慰自己渗勘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布俩莽。 她就那樣靜靜地躺著旺坠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扮超。 梳的紋絲不亂的頭發(fā)上取刃,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音出刷,去河邊找鬼蝉衣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巷蚪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播濒翻,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼屁柏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了有送?” 一聲冷哼從身側(cè)響起淌喻,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雀摘,沒想到半個(gè)月后裸删,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阵赠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年涯塔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片清蚀。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匕荸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枷邪,到底是詐尸還是另有隱情榛搔,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布东揣,位于F島的核電站践惑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嘶卧。R本人自食惡果不足惜尔觉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芥吟。 院中可真熱鬧穷娱,春花似錦绑蔫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嫁盲,卻和暖如春篓叶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背羞秤。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工缸托, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘾蛋。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓俐镐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親哺哼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子佩抹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345