[大數據技術原理與應用筆記] 第七講 MapReduce

7.1 MapReduce 模型簡介

傳統數據處理理念: 數據向計算靠攏
MapReduce 理念: 計算向數據靠攏 , 即將應用程序分發到數據所在的機器
具體來講就是當要處理數據塊A的時候,將距離數據塊A最近的map分配給數據塊A,而每每它們是在同一塊機器上的緩存

MapReduce 架構: Master/Slave
1581484849(1).png微信

7.2 MapReduce 體系結構

1581485105(1).png

幾個概念架構

  1. JobTracker
  2. TaskTracker: 接收JobTracker發送的命令執行具體任務,以心跳的方式發送資源佔用狀況及任務運行進度
  3. 資源調度單位:slot(槽),將全部可用的CPU和內存資源打包等分,等分的單位即爲slot;同時slot分爲map類型的slot,用於執行map任務;reduce類型的slot,用於執行reduce任務,二者互不通用.

7.3 MapReduce 工做流程

1581498098(1).png

一個大數據集分紅多個片,每一個分片分配一個map執行任務,最後全部map的結果通過分區、排序、合併、歸併等操做,稱爲shuffle,再進行reduce任務。大數據

分片只是邏輯上的分片,而這個分片可能會大於HDFS的一個塊的大小,假如兩個塊不在一個機器上,則還須要跨機器讀取,所以通常把分片大小設爲一個HDFS塊的大小.spa

Reduce任務數量的設置,取決於可用的reduce slot的數量,比可用的reduce slot少一點3d

7.4 Shuffle 過程原理

Map端的Shuffle

微信截圖_20200212172031.png
map任務的結果不直接寫入磁盤,而是先寫入預先分配的緩存(通常是100MB),減小IO的消耗。
溢寫是指,不能等緩存滿了才寫入磁盤,由於map一直在執行,是不會等寫操做的,因此緩存快滿的時候,達到一個閾值:溢寫比(好比0.8),纔會寫入磁盤
達到溢寫比時也不是直接寫入,而是要通過blog

  1. 分區: 按照不一樣的reduce任務所須要的數據分區,
  2. 排序: 自動實現,按照<key,value>的key的字典序排序
  3. 合併: 可選,好比相同的key值的value值相加或取最大值
Reduce端的Shuffle過程

微信截圖_20200212173152.png
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>>排序

7.5 MapReduce 應用程序的執行過程

微信截圖_20200212174356.png

Master 對應 JobTracker
Worker對應 TaskTracker內存

MapReduce 產生的中間結果 如緩存,不會寫到HDFS,而是直接寫入Worker所在的機器的磁盤.資源

相關文章
相關標籤/搜索