傳統數據處理理念: 數據向計算靠攏
MapReduce 理念: 計算向數據靠攏 , 即將應用程序分發到數據所在的機器
具體來講就是當要處理數據塊A的時候,將距離數據塊A最近的map分配給數據塊A,而每每它們是在同一塊機器上的緩存
MapReduce 架構: Master/Slave微信
幾個概念架構
一個大數據集分紅多個片,每一個分片分配一個map執行任務,最後全部map的結果通過分區、排序、合併、歸併等操做,稱爲shuffle,再進行reduce任務。大數據
分片只是邏輯上的分片,而這個分片可能會大於HDFS的一個塊的大小,假如兩個塊不在一個機器上,則還須要跨機器讀取,所以通常把分片大小設爲一個HDFS塊的大小.spa
Reduce任務數量的設置,取決於可用的reduce slot的數量,比可用的reduce slot少一點3d
map任務的結果不直接寫入磁盤,而是先寫入預先分配的緩存(通常是100MB),減小IO的消耗。
溢寫是指,不能等緩存滿了才寫入磁盤,由於map一直在執行,是不會等寫操做的,因此緩存快滿的時候,達到一個閾值:溢寫比(好比0.8),纔會寫入磁盤
達到溢寫比時也不是直接寫入,而是要通過blog
reduce端從每一個map那對應本身須要數據的分區拉取數據,
若是map shuffle沒有通過合併則拿到的是<key,value-list>,如<'a',<1,1,1>>
若是通過合併則是<key, value>
而reduce 拿到map的輸出,還會進行歸併,把相同鍵值的value 歸併成value-list。 如<'a',1>,<'a',1> 歸併爲<'a',<1,1>>排序
Master 對應 JobTracker
Worker對應 TaskTracker內存
MapReduce 產生的中間結果 如緩存,不會寫到HDFS,而是直接寫入Worker所在的機器的磁盤.資源