Hadoop處理流程中的兩個(gè)子階段嚴(yán)重降低了其性能。第一個(gè)是map階段產(chǎn)生的中間結(jié)果要寫到磁盤上,這樣做的主要目的是提高系統(tǒng)的可靠性,但代價(jià)是降低了系統(tǒng)的性能,實(shí)際上,Hadoop的改進(jìn)版–MapReduce Online去除了這個(gè)階段,而采用其他更高效的方式提高系統(tǒng)可靠性(見參考資料[1]);另一個(gè)是shuffle階段采用HTTP協(xié)議從各個(gè)map task上遠(yuǎn)程拷貝結(jié)果,這種設(shè)計(jì)思路(遠(yuǎn)程拷貝,協(xié)議采用http)同樣降低了系統(tǒng)性能。實(shí)際上,Baidu公司正試圖將該部分代碼替換成C++代碼來提高性能(見參考資料[2])。
本文首先著重分析shuffle階段的具體流程,然后分析了其低效的原因,最后給出了可能的改進(jìn)方法。
如圖所示,每個(gè)reduce task都會(huì)有一個(gè)后臺(tái)進(jìn)程GetMapCompletionEvents,它獲取heartbeat中(從JobTracker)傳過來的已經(jīng)完成的task列表,并將與該reduce task對(duì)應(yīng)的數(shù)據(jù)位置信息保存到mapLocations中,mapLocations中的數(shù)據(jù)位置信息經(jīng)過濾和去重(相同的位置信息因?yàn)槟撤N原因,可能發(fā)過來多次)等處理后保存到集合scheduledCopies中,然后由幾個(gè)拷貝線程(默認(rèn)為5個(gè))通過HTTP并行的拷貝數(shù)據(jù),同時(shí)線程InMemFSMergeThread和LocalFSMerger會(huì)對(duì)拷貝過來的數(shù)據(jù)進(jìn)行歸并排序。
主要有兩個(gè)方面影響shuffle階段的性能:(1)數(shù)據(jù)完全是遠(yuǎn)程拷貝 (2)采用HTTP協(xié)議進(jìn)行數(shù)據(jù)傳輸。對(duì)于第一個(gè)方面,如果采用某種策略(修改框架),讓你reduce task也能有l(wèi)ocality就好了;對(duì)于第二個(gè)方面,用新的更快的數(shù)據(jù)傳輸協(xié)議替換HTTP,也許能更快些, 如UDT協(xié)議(見參考資料[3]), 它在MapReduce的另一個(gè)C++開源實(shí)現(xiàn)Sector/Sphere(見參考資料[4])中被使用,效果不錯(cuò)!
————————————————————————————————————————-
【參考資料】
【1】 http://code.google.com/p/hop/
【2】 http://wenku.baidu.com/view/8225e73f0912a21614792947.html
【3】 http://udt.sourceforge.net/
【4】 http://sector.sourceforge.net/
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
