日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

MapReduce运行原理和过程

發(fā)布時間:2025/7/14 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapReduce运行原理和过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.Map的原理和運行流程

?

Map的輸入數(shù)據(jù)源是多種多樣的,我們使用hdfs作為數(shù)據(jù)源。文件在hdfs上是以block(塊,Hdfs上的存儲單元)為單位進行存儲的。

?

?

1.分片

?

我們將這一個個block劃分成數(shù)據(jù)分片,即Split(分片,邏輯劃分,不包含具體數(shù)據(jù),只包含這些數(shù)據(jù)的位置信息),那么上圖中的第一個Split則對應(yīng)兩個個文件塊,第二個Split對應(yīng)一個塊。需要注意的是一個Split只會包含一個File的block,不會跨文件。

?2.?數(shù)據(jù)讀取和處理

當(dāng)我們把數(shù)據(jù)塊分好的時候,MapReduce(以下簡稱mr)程序?qū)⑦@些分片以key-value的形式讀取出來,并且將這些數(shù)據(jù)交給用戶自定義的Map函數(shù)處理。

?

3.

?

用戶處理完這些數(shù)據(jù)后同樣以key-value的形式將這些數(shù)據(jù)寫出來交給mr計算框架。mr框架會對這些數(shù)據(jù)進行劃分,此處用進行表示。不同顏色的partition矩形塊表示為不同的partition,同一種顏色的partition最后會分配到同一個reduce節(jié)點上進行處理。

Map是如何將這些數(shù)據(jù)進行劃分的?

默認(rèn)使用Hash算法對key值進行Hash,這樣既能保證同一個key值的數(shù)據(jù)劃分到同一個partition中,又能保證不同partition的數(shù)據(jù)梁是大致相當(dāng)?shù)摹?/p>

?

總結(jié)

1.一個map指揮處理一個Split????

2.map處理完的數(shù)據(jù)會分成不同的partition

3.一類partition對應(yīng)一個reduce

那么一個mr程序中 map的數(shù)量是由split的數(shù)量決定的,reduce的數(shù)量是由partiton的數(shù)量決定的。

?

二.Shuffle

Shuffle,翻譯成中文是混洗。mr沒有排序是沒有靈魂的,shuffle是mr中非常重要的一個過程。他在Map執(zhí)行完,Reduce執(zhí)行前發(fā)生。

?

?

Map階段的shuffle

數(shù)據(jù)經(jīng)過用戶自定的map函數(shù)處理完成之后,數(shù)據(jù)會放入內(nèi)存中的環(huán)形緩沖區(qū)之內(nèi),,他分為兩個部分,數(shù)據(jù)區(qū)和索引區(qū)。數(shù)據(jù)區(qū)是存放用戶真實的數(shù)據(jù),索引區(qū)存放數(shù)據(jù)對應(yīng)的key值,partition和位置信息。當(dāng)環(huán)形緩沖區(qū)數(shù)據(jù)達到一定的比例后,會將數(shù)據(jù)溢寫到一個文件之中,即途中的spill(溢寫)過程。

在溢寫前,會將數(shù)據(jù)根據(jù)key和partition進行排序,排好序之后會將數(shù)據(jù)區(qū)的數(shù)據(jù)按照順序一個個寫入文件之中。這樣就能保證文件中數(shù)據(jù)是按照key和parttition進行排序的。最后會將溢寫出的一個個小文件合并成一個大的文件,并且保證在每一個partition

中是按照Key值有序的。

總結(jié):

  • ?Collect階段將數(shù)據(jù)放進環(huán)形緩沖區(qū),緩沖區(qū)分為數(shù)據(jù)區(qū)和索引區(qū)。
  • Sort階段對在同一partition內(nèi)的索引按照key排序。
  • Spill階段跟胡排好序的索引將數(shù)據(jù)按照順序?qū)懙轿募小?/li>
  • Merge階段將Spill生成的小文件分批合并排序成一個大文件。
  • Reduce階段的shuffle

    reduce節(jié)點會將數(shù)據(jù)拷貝到自己的buffer緩存區(qū)中,當(dāng)緩存區(qū)中的數(shù)據(jù)達到一定的比例的時候,同樣會發(fā)生溢寫過程,我們?nèi)稳灰WC每一個溢寫的文件是有序的。與此同時,后臺會啟一個線程,將這些小文件合并成一個大文件,經(jīng)過一輪又一輪的合并,最后將這些文件合并成一個大的數(shù)據(jù)集。在這個數(shù)據(jù)集中,數(shù)據(jù)是有序的,相同的key值對應(yīng)的value值是挨在一起的。最后,將這些數(shù)據(jù)交給reduce程序進行聚合處理。

    總結(jié):

  • 1.????? Copy階段將Map端的數(shù)據(jù)分批拷貝到Reduce的緩沖區(qū)。
  • 2.????? Spill階段將內(nèi)存緩存區(qū)的數(shù)據(jù)按順序?qū)懙轿募小?/strong>
  • 3.????? Merge階段將溢出的文件合并成一個排序的數(shù)據(jù)集。
  • ?

    ?

    三.Reduce運行過程

    ?

    ?

    在map處理完之后,reduce節(jié)點會將各個map節(jié)點上屬于自己的數(shù)據(jù)拷貝到內(nèi)存緩沖區(qū)中,最后將數(shù)據(jù)合并成一個大的數(shù)據(jù)集,并且按照key值進行聚合,把聚合后的value值作為iterable(迭代器)交給用戶使用,這些數(shù)據(jù)經(jīng)過用戶自定義的reduce函數(shù)進行處理之后,同樣會以key-value的形式輸出出來,默認(rèn)輸出到hdfs上的文件。

    四.Combine優(yōu)化

    我們說mr程序最終是要將數(shù)據(jù)按照key值進行聚合,對value值進行計算,那么我們是不是可以提前對聚合好的value值進行計算?of course,我們將這個過程稱為Combine。哪些場景可以進行conbine優(yōu)化。如下。

    Map端:

    1. 在數(shù)據(jù)排序后,溢寫到磁盤前,運行combiner。這個時候相同Key值的value值是挨在一起的,可以對這些value值進行一次聚合計算,比如說累加。

    2. 溢寫出的小文件合并之前,我們也可以執(zhí)行一次combiner,需要注意的是mr程序默認(rèn)至少存在三個文件才進行combiner,否則mr會認(rèn)為這個操作是不值得的。當(dāng)然這個值可以通過min.num.spills.for.combine設(shè)置。

    Reduce端:

  • 和map端一樣,在合并溢出文件輸出到磁盤之前,運行combiner。
  • ?

    寫在最后

    送上整個MR過程圖

    ?

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/zmanzi/p/10836462.html

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的MapReduce运行原理和过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。