當前位置:編程學習大全網 - 編程語言 - mr執行過程及運行原理

mr執行過程及運行原理

split邏輯切分:

這裏的分片不是物理分片,輸入分片存儲的並非數據本身,而是壹個分片長度和壹個記錄數據的位置的數據

例如10MB文件,切分10各1MB小文件,0-1MB位置定義為第壹個切片,1MB-2MB定義為第二個分片

map階段(每個分片對應壹個map task)

每個mapper任務都是壹個java進程,它讀取hdfs文件中自己對應的輸入分片,將分片中記錄按照壹定規則調用map函數解析成鍵值對,如<word,1>,<word,1>形式,如果有100個鍵值對,就調用100次map方法

鍵:每壹行的起始位置值:本行的文本內容

map shuffle階段、洗牌階段,分區partition,排序sort,combine(本地reducer),合並

map方法輸出的數據,進入到內存緩沖區,緩沖區滿了後,啟動線程寫磁盤,在啟動線程寫磁盤之前,對數據進行key的hash分區,對每個分區進行key值排序,設置了combiner,則對排序的數據做簡單的合並重復key值操作,如<word,2>,寫磁盤操作會產生多個文件,當map寫完磁盤後則對文件進行壹次合並,確保壹個map task最終只生成壹個數據文件

reduce shuffle階段:copy、merge、reduce

map方法輸出完成後,reduce線程會啟動copy線程,請求所有map task的輸出結果,如果reduce端接收的數據量小,則直接存內存中,數據量超過內存,則數據數據合並後寫磁盤,在寫磁盤過程中會把這些文件合並成壹個更大的有序文件,最後壹次合並的結果沒有寫磁盤,直接輸入給reduce函數中

對copy過來的數據先放入內存緩沖區中,如果是數據量超過緩沖區大小,則對數據合並後寫磁盤,如果設置combiner,combiner也可以這個時候做合並,如果map task1中的<word,1>,map task2中的<word,2>,那麽combiner之後則為<word,{1,2}>

調用reduce函數

reduce階段分組好的<word,{1,2}>,調用reduce函數進行聚合<word,3>,將結果輸出到hdfs,每個reduce進程會對應壹個輸出文件,名稱以part-開頭

詞頻統計mr過程:

split:由於輸入文件太大,mapreduce會對其進行分割,大文件會被切分成多份

map:解析出每壹行中的每個單詞,並在後面記上數字1,表示此單詞出現過1次

shuffle:將每壹份中相同的單詞分組到壹起,並按默認字母順序進行升序排序

reduce:將每壹組中的單詞出現的次數進行累加求和

以上復雜的運行過程,用壹張圖來簡單說明,方便理解和記憶,如下圖所示:

  • 上一篇:以下程序的輸出結果是 main( ) { int a=12,b=12; printf("%d %d\n",--a,++b); }
  • 下一篇:北大青鳥java培訓:互聯網軟件開發工具是什麽?
  • copyright 2024編程學習大全網