Hadoop概念及其用法專家講解
本節(jié)和大家繼續(xù)學(xué)習(xí)Hadoop,Hadoop是一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu),由Apache基金會(huì)開發(fā)。它有什么奧秘呢,就讓我們一起來繼續(xù)關(guān)注Hadoop吧。
條款6:多個(gè)大輸入的Job建議使用串行執(zhí)行,多個(gè)小輸入的Job建議使用并行執(zhí)行。
Hadoop的任務(wù)處理分為map階段以及reduce階段,當(dāng)集群的taskslots足夠支持多個(gè)任務(wù)同時(shí)執(zhí)行時(shí),建議使用多任務(wù)并行執(zhí)行,反之,建議使用串行執(zhí)行,且當(dāng)一個(gè)Job開始執(zhí)行reducetask
時(shí),可以開始執(zhí)行下一個(gè)Job的maptask。
以下是我們在50臺(tái)退役機(jī)器上分別并行和串行運(yùn)行2個(gè)100G,200G,300G的任務(wù)的測試結(jié)果:
條款7:reducer的個(gè)數(shù)應(yīng)該略小于集群中全部reduceslot的個(gè)數(shù)。
maptask的個(gè)數(shù)由輸入文件大小決定,所以選擇合適的reducer的個(gè)數(shù)對充分利用Hadoop集群的性能有重要的意義。
Hadoop中每個(gè)task均對應(yīng)于tasktracker中的一個(gè)slot,系統(tǒng)中mapperslots總數(shù)與reducerslots總數(shù)的計(jì)算公式如下:
mapperslots總數(shù)=集群節(jié)點(diǎn)數(shù)×mapred.tasktracker.map.tasks.maximum
reducerslots總數(shù)=集群節(jié)點(diǎn)數(shù)×mapred.tasktracker.reduce.tasks.maximum
設(shè)置reducer的個(gè)數(shù)比集群中全部的reducerslot略少可以使得全部的reducetask可以同時(shí)進(jìn)行,而且可以容忍一些reducetask失敗。
條款8:多個(gè)簡單串行的Job優(yōu)于一個(gè)復(fù)雜的Job。將復(fù)雜的任務(wù)分割成多個(gè)簡單的任務(wù),這是典型的分治的思想。這樣不僅可以使得程序變得更簡單,職責(zé)更單一,而且多個(gè)串行的任務(wù)還可以
在上一個(gè)任務(wù)的正在執(zhí)行reduce任務(wù)的時(shí)候,利用空閑的map資源來執(zhí)行下一個(gè)任務(wù)。
4.Key-Value權(quán)衡
Map-Reduce算法的核心過程如下:
map(k1,v1)-->list(k2,v2)
reduce(k2,list(v2))-->list(v2)
即通過用戶定義的map函數(shù)將輸入轉(zhuǎn)換為一組<Key,Value>對,而后通過用戶定義的reduce函數(shù)將<Key,List<Value>>計(jì)算出***的結(jié)果。
如何選擇合適的map和reduce函數(shù)才能充分利用Hadoop平臺(tái)的計(jì)算能力呢?換句話說,如何選擇上式中合適的K2和V2呢?
條款9:maptask或reducetask的大小應(yīng)該適中,以一個(gè)task運(yùn)行2-3分鐘為宜,且task不能超出計(jì)算節(jié)點(diǎn)的運(yùn)算能力。
雖然Hadoop平臺(tái)幫助我們將數(shù)據(jù)分割成為小任務(wù)來執(zhí)行,但我們也應(yīng)當(dāng)意識到,每個(gè)task都是在一個(gè)計(jì)算節(jié)點(diǎn)運(yùn)行的,若一個(gè)task對機(jī)器資源(CPU、內(nèi)存、磁盤空間等)的需求超出了計(jì)算
節(jié)點(diǎn)的能力的話,任務(wù)將會(huì)失敗。而如果task過小的話,雖然計(jì)算節(jié)點(diǎn)能夠快速的完成task的執(zhí)行,但過多的task的管理開銷,以及中間結(jié)果頻繁的網(wǎng)絡(luò)傳輸將占據(jù)任務(wù)執(zhí)行的絕大部分時(shí)間,
這樣同樣會(huì)嚴(yán)重影響性能。建議的task大小***是以能夠運(yùn)行2-3分鐘為宜。
條款10:map產(chǎn)生的中間結(jié)果不宜過大。
輸入數(shù)據(jù)經(jīng)過用戶定義的map函數(shù)后生成的<Key,Value>對是Map-Reduce模型的中間計(jì)算結(jié)果。
Maptask將計(jì)算的中間結(jié)果保存在本地磁盤,而后通過Reducetask拉去所有當(dāng)前任務(wù)所需的中間結(jié)果,并將中間結(jié)果按Key排序。顯然若map產(chǎn)生的中間結(jié)果過大,網(wǎng)絡(luò)傳輸時(shí)間以及中間結(jié)
果排序?qū)⒄紦?jù)大部分的Job執(zhí)行時(shí)間。本節(jié)關(guān)于Hadoop的介紹到此結(jié)束。
【編輯推薦】
- 實(shí)例講解Hadoop用法
- 專家指導(dǎo) 如何進(jìn)行Hadoop分布式集群配置
- Hadoop集群與Hadoop性能優(yōu)化
- HadoopHBase實(shí)現(xiàn)配置簡單的單機(jī)環(huán)境
- 深入剖析Hadoop HBase