溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

hadoop中系統(tǒng)執(zhí)行排序的過(guò)程叫什么

發(fā)布時(shí)間:2021-04-26 10:06:14 來(lái)源:億速云 閱讀:177 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章給大家分享的是有關(guān)hadoop中系統(tǒng)執(zhí)行排序的過(guò)程叫什么的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

MapReduce確保每個(gè)reducer的輸入都是按鍵排序的,系統(tǒng)執(zhí)行排序的過(guò)程稱為shuffle。shuffle階段主要包括map階段的combine、group、sort、partition以及reducer階段的合并排序。

本教程操作環(huán)境:windows7系統(tǒng),Dell G3電腦。

MapReduce確保每個(gè)reducer的輸入都是按鍵排序的,系統(tǒng)執(zhí)行排序的過(guò)程稱為shuffle。我們可以理解為map產(chǎn)生輸出到reduce的消化輸入的整個(gè)工程。

Map端:每個(gè)mapperTask有一個(gè)環(huán)形內(nèi)存緩沖區(qū),用于存儲(chǔ)map任務(wù)的輸出,一旦達(dá)到閾值,一個(gè)后臺(tái)線程把內(nèi)容寫到磁盤的指定目錄下的新建的一個(gè)溢出寫文件,寫磁盤前要經(jīng)過(guò)partition、sort、Combiner。等最后記錄寫完,合并全部溢出寫文件為一個(gè)分區(qū)且排序的文件。

Reduce端:可以分為復(fù)制階段、排序階段、reduce階段

復(fù)制階段:map輸出文件位于運(yùn)行map任務(wù)的tasktracker的本地磁盤上,reduce通過(guò)http的方式獲取輸出文件的分區(qū),tasktracker為分區(qū)文件運(yùn)行reduce任務(wù),只要有一個(gè)map任務(wù)完成,reduce任務(wù)就開始復(fù)制輸出。

排序階段:更恰當(dāng)?shù)恼f(shuō)法是合并階段,因?yàn)榕判蚴窃趍ap端進(jìn)行的。這個(gè)階段將合并map輸出,維持其順序排序,循環(huán)進(jìn)行。

最后階段就是reduce階段,對(duì)已排序輸出中的每個(gè)鍵調(diào)用reduce函數(shù),此階段的輸出直接寫到輸出文件系統(tǒng),一般為hdfs。、

Shuffle階段說(shuō)明

shuffle階段主要包括map階段的combine、group、sort、partition以及reducer階段的合并排序。Map階段通過(guò)shuffle后會(huì)將輸出數(shù)據(jù)按照reduce的分區(qū)分文件的保存,文件內(nèi)容是按照定義的sort進(jìn)行排序好的。Map階段完成后會(huì)通知ApplicationMaster,然后AM會(huì)通知Reduce進(jìn)行數(shù)據(jù)的拉取,在拉取過(guò)程中進(jìn)行reduce端的shuffle過(guò)程。

注意:Map階段的輸出數(shù)據(jù)是存在運(yùn)行Map節(jié)點(diǎn)的磁盤上,是個(gè)臨時(shí)文件,不是存在HDFS上,在Reduce拉取數(shù)據(jù)后,那個(gè)臨時(shí)文件會(huì)刪除,若是存在hdfs上,會(huì)造成存儲(chǔ)空間的浪費(fèi)(會(huì)產(chǎn)生三個(gè)副本)。

  • 用戶自定義Combiner

    Combiner可以減少M(fèi)ap階段的中間輸出結(jié)果數(shù),降低網(wǎng)絡(luò)開銷。默認(rèn)情況下是沒(méi)有Combiner的。用戶自定義的Combiner要求是Reducer的子類,以Map的輸出<key,value>作為Combiner的輸入<key,value>和輸出<key,value>,也就是說(shuō)Combiner的輸入和輸出必須是一樣的。

    可以通過(guò)job.setCombinerClass設(shè)置combiner的處理類,MapReduce框架不保證一定會(huì)調(diào)用該類的方法。

    注意:如果reduce的輸入和輸出一樣,則可以直接用reduce類作為combiner

  • 用戶自定義Partitioner

    Partitioner是用于確定map輸出的<key,value>對(duì)應(yīng)的處理reducer是那個(gè)節(jié)點(diǎn)。默認(rèn)MapReduce任務(wù)reduce個(gè)數(shù)為1個(gè),此時(shí)Partitioner其實(shí)沒(méi)有什么效果,但是當(dāng)我們將reduce個(gè)數(shù)修改為多個(gè)的時(shí)候,partitioner就會(huì)決定key所對(duì)應(yīng)reduce的節(jié)點(diǎn)序號(hào)(從0開始)。

    可以通過(guò)job.setPartitionerClass方法指定Partitioner類,默認(rèn)情況下使用HashPartitioner(默認(rèn)調(diào)用key的hashCode方法)。

  • 用戶自定義Group

    GroupingComparator是用于將Map輸出的<key,value>進(jìn)行分組組合成<key,List<value>>的關(guān)鍵類,直白來(lái)講就是用于確定key1和key2是否屬于同一組,如果是同一組,就將map的輸出value進(jìn)行組合。

    要求我們自定義的類實(shí)現(xiàn)自接口RawComparator,可以通過(guò)job.setGroupingComparatorClass方法指定比較類。默認(rèn)情況下使用WritableComparator,但是最終調(diào)用key的compareTo方法進(jìn)行比較。

  • 用戶自定義Sort

    SortComparator是用于將Map輸出的<key,value>進(jìn)行key排序的關(guān)鍵類, 直白來(lái)講就是用于確定key1所屬組和key2所屬組那個(gè)在前,那個(gè)在后。

    要求我們自定義的類實(shí)現(xiàn)自接口RawComparator,可以通過(guò)job.setSortComparatorClass方法指定比較類。默認(rèn)情況下使用WritableComparator,但是最終調(diào)用key的compareTo方法進(jìn)行比較。

  • 用戶自定義Reducer的Shuffle

    在reduce端拉取map的輸出數(shù)據(jù)的時(shí)候,會(huì)進(jìn)行shuffle(合并排序),MapReduce框架以插件模式提供了一個(gè)自定義的方式,我們可以通過(guò)實(shí)現(xiàn)接口ShuffleConsumerPlugin,并指定參數(shù)mapreduce.job.reduce.shuffle.consumer.plugin.class來(lái)指定自定義的shuffle規(guī)則,但是一般情況下,直接采用默認(rèn)的類org.apache.hadoop.mapreduce.task.reduce.Shuffle。

感謝各位的閱讀!關(guān)于“hadoop中系統(tǒng)執(zhí)行排序的過(guò)程叫什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI