圖文:以MapReduce編程五步走爲基礎,說MapReduce工作原理

在之前的Hadoop是什麼中已經說過MapReduce採用了分而治之的思想,MapReduce主要分爲兩部分,一部分是Map——分,一部分是Reduce——合

MapReduce全過程的數據都是以鍵值對的形式存在的

首先,我們假設我們有一個文件,文件中存了以下內容

hive spark hive hbase
hadoop hive spark
sqoop flume scala

這裏涉及到一個偏移量(一個字符或空格爲1位)
第一行的偏移量爲0,內容爲“hive spark hive hbase”
第二行的偏移量爲21,內容爲“hadoop hive spark”
第三行的偏移量爲39,內容爲“sqoop flume scala”

  • Map
  • 輸入
    MapReduce處理的數據是從HDFS中讀出來的
    以偏移量爲key,內容value,則存在:
    (0,“hive spark hive hbase”)
    (21,“hadoop hive spark”)
    (39,“sqoop flume scala”)
  • 輸出
    將輸入的value中的詞以空格爲分割逐個取出來做key,1做value存起來
    (hive,1)
    (spark,1)
    (hive,1)
    (hbase,1)
    (hadoop,1)
    注意:有多少行,Map就要循環做幾次
  • shuffle(之後會詳細說,這裏簡單解釋)
  • 輸入
    map的輸出
  • 輸出
    相同的key的value進行合併
    這裏合併不是進行累加或別的運算,而是合併到一個集合中
    (hive,[1,1,1])
    (spark,[1,1])
    (hbase,[1])
    (hadoop,[1])
    。。。。。。
  • reduce
  • 輸入
    shuffle的輸出
  • 輸出
    根據業務將value進行合併
    例如當前的業務就會將value進行累加

MapReduce處理數據五步走

整個MapReduce程序,所有數據以(key,value)形式流動

  • 第一步:input

正常情況下不需要寫代碼
僅僅在MapReduce程序運行的時候指定一個路徑即可

  • 第二步:map(核心)

map(key,value,output,context)
key:每行數據的偏移量——基本沒用
value:每行數據的內容——真正需要處理的內容

  • 第三步:shuffle

不需要寫代碼

  • 第四步:reduce(核心)

reduce(key,value,output,context)
key:業務需求中的key
value:要聚合的值

  • 第五步:output

正常情況下不需要寫代碼
僅僅在MapReduce程序運行的時候指定一個路徑即可

  • 工作原理

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章