新聞中心
Hadoop計(jì)算中的Shuffle是怎么樣的

在Hadoop分布式計(jì)算框架中,數(shù)據(jù)分發(fā)和數(shù)據(jù)并行處理是非常重要的環(huán)節(jié),Shuffle階段是整個(gè)MapReduce流程中的一個(gè)重要步驟,它負(fù)責(zé)將Mapper輸出的數(shù)據(jù)按照key進(jìn)行排序,并將其發(fā)送到對(duì)應(yīng)的Reducer進(jìn)行處理,本文將詳細(xì)介紹Shuffle階段的原理、過(guò)程以及優(yōu)化方法。
Shuffle階段簡(jiǎn)介
1、1 Shuffle階段的作用
Shuffle階段的主要作用是將MapReduce作業(yè)中的數(shù)據(jù)進(jìn)行重新分區(qū),使得每個(gè)Reduce任務(wù)可以處理屬于自己數(shù)據(jù)的子集,這個(gè)過(guò)程包括兩個(gè)部分:分區(qū)(Partition)和排序(Sort),分區(qū)是根據(jù)key值將數(shù)據(jù)分成若干個(gè)區(qū)間,每個(gè)區(qū)間對(duì)應(yīng)一個(gè)Reduce任務(wù);排序則是對(duì)每個(gè)分區(qū)內(nèi)的key值進(jìn)行排序,以便后續(xù)的歸并操作能夠高效地完成。
1、2 Shuffle階段的類型
根據(jù)輸入數(shù)據(jù)的來(lái)源不同,Shuffle階段可以分為兩種類型:本地Shuffle和遠(yuǎn)程Shuffle,本地Shuffle發(fā)生在單個(gè)節(jié)點(diǎn)上,即將Mapper的輸出直接傳遞給Reducer;而遠(yuǎn)程Shuffle則需要通過(guò)網(wǎng)絡(luò)將數(shù)據(jù)從一個(gè)節(jié)點(diǎn)傳輸?shù)搅硪粋€(gè)節(jié)點(diǎn),通常發(fā)生在集群環(huán)境下,由于網(wǎng)絡(luò)傳輸?shù)拈_(kāi)銷較大,因此遠(yuǎn)程Shuffle會(huì)帶來(lái)較大的性能損失,為了減少這種損失,Hadoop提供了一些優(yōu)化手段,如Combiner、Replication等。
Shuffle過(guò)程詳解
2、1 分區(qū)(Partition)
在MapReduce作業(yè)開(kāi)始執(zhí)行后,Map任務(wù)會(huì)生成一系列鍵值對(duì)(Key-Value),這些鍵值對(duì)會(huì)被傳遞給Shuffle階段,接下來(lái),Shuffle階段會(huì)根據(jù)Map任務(wù)輸出的key值對(duì)數(shù)據(jù)進(jìn)行分區(qū)操作,分區(qū)的方式有很多種,如隨機(jī)分區(qū)、哈希分區(qū)等,哈希分區(qū)是最常用的一種方式,它可以根據(jù)key值的哈希值來(lái)確定數(shù)據(jù)應(yīng)該存儲(chǔ)在哪個(gè)Reduce任務(wù)中,這樣一來(lái),即使不同的Reduce任務(wù)處理的數(shù)據(jù)范圍不同,也可以保證它們之間的數(shù)據(jù)不會(huì)重疊。
2、2 排序(Sort)
分區(qū)完成后,每個(gè)Reduce任務(wù)都會(huì)收到一部分屬于自己數(shù)據(jù)的子集,接下來(lái),Shuffle階段會(huì)對(duì)每個(gè)Reduce任務(wù)的輸入數(shù)據(jù)進(jìn)行排序操作,排序的目的是為了方便后續(xù)的歸并操作,排序的方式有兩種:本地排序和外部排序,本地排序是指在同一個(gè)節(jié)點(diǎn)上進(jìn)行排序操作;而外部排序則需要將數(shù)據(jù)先寫入磁盤,然后再進(jìn)行排序,由于外部排序涉及到磁盤I/O操作,因此它的性能通常比本地排序要差很多,為了避免這種情況的發(fā)生,Hadoop提供了一些優(yōu)化手段,如使用Combiner函數(shù)來(lái)替代部分排序操作、使用Replication來(lái)提高排序效率等。
Shuffle優(yōu)化方法
3、1 使用Combiner函數(shù)
Combiner函數(shù)是一種在Map任務(wù)中使用的局部聚合操作,它可以在Map端對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,從而減少后續(xù)Reduce任務(wù)的數(shù)據(jù)量,具體來(lái)說(shuō),Combiner函數(shù)會(huì)在Map任務(wù)輸出每一個(gè)鍵值對(duì)時(shí)被調(diào)用一次,它會(huì)對(duì)當(dāng)前鍵值對(duì)進(jìn)行一定的計(jì)算操作(如求和、計(jì)數(shù)等),并將結(jié)果與之前的所有結(jié)果一起發(fā)送給Reduce任務(wù),這樣一來(lái),Reduce任務(wù)只需要處理每個(gè)鍵值對(duì)本身的數(shù)據(jù)即可,從而降低了整體的計(jì)算復(fù)雜度,需要注意的是,Combiner函數(shù)只能應(yīng)用于Map端的數(shù)據(jù)處理過(guò)程,不能用于Reduce端的數(shù)據(jù)處理過(guò)程。
本文標(biāo)題:Hadoop計(jì)算中的Shuffle是怎么樣的
轉(zhuǎn)載注明:http://m.jiaoqi3.com/article/djoicic.html


咨詢
建站咨詢
