1. 程式人生 > >MapReduce基礎(學習筆記)

MapReduce基礎(學習筆記)

1、簡介

MapReduce是一個用於處理海量資料的分散式計算框架。這個框架解決了:

1.資料分散式儲存

上一篇文章提到MapReduce自身是不儲存資料的,資料都存取在HDFS上,計算的目標資料就是來自於HDFS。

2.作業排程

一個Hadoop叢集上可以跑很多個MapReduce,不可能某一個MapReduce佔了所有資源,資源是共享的。

3.容錯

非個人因素導致的問題比如網路堵塞、機器間通訊等複雜問題,會自動切換到其他節點上。

2、MapReduce分而治之思想

1、數錢例項:一堆鈔票,各種面值分別多少

-單點策略

  •  一個人數所有的鈔票,數出各種面值有多少張

-分治策略

  • 每個人分得一堆鈔票,數出各種面值有多少種
  • 彙總,每個人負責統計一種面值

2、解決資料可以切割進行計算的應用

  • 分治思想

        -分解

        -求解

        -合併

  • MapReduce對映

        -分:map

        把複雜的問題分解為若干“簡單的任務”

        -合:reduce

3、MapReduce計算框架·執行流程(重點)

開發人員一般情況下需要關心的是圖中灰色的部分。↑

Map和Reduce部分細節化↓:

Map部分:

一個map實際上對應一個split分片,首先map讀取split,因為map是一個程式,作為系統裡面的一個程序,自己維護著一個程序空間。把split資料讀進來之後直接存到了自己的記憶體上(buffer in memory),然後開始往記憶體寫。記憶體預設大小為100M,但是100M很容易寫滿,當它寫到80M的時候會鎖住記憶體區,然後把這80%的資料轉儲到磁碟上,然後清理記憶體。轉儲的過程中會作排序(sort),圖中partitions中三個部分相當於前面數錢的例子中面值的分類。三個小的資料部分再歸併排序成大的資料(merge on disk)。途中只展示出一個Map的執行流程,還有other maps。

Reduce部分

還是數錢的例子,假設圖中Reduce部分是負責處理一百元面值的,把每個Map上屬於一百元區域的資料通過fetch紅線全部歸納到Reduce機器上(相當於拷貝)。然後把從每個從Map拷貝過來的資料兩兩合併,再統一交給Reduce處理,最後輸出。

4、兩個重要的程序

-JobTracker

  • 主程序,負責接收客戶作業提交,排程任務到作節點上執行,並提供諸如監控工作節點狀態及任務進度等管理功能,一個MapReduce叢集有一個JobTracker,一般執行在可靠的硬體上。
  • TaskTracker是通過週期性的心跳來通知JobTracker其當前的健康狀態,每一次心跳包含了可用的Map和Reduce任務數目、佔用的數目以及執行中的任務詳細資訊。JobTracker利用一個執行緒池來同時處理心跳和客戶請求。

-TaskTracker

  • 由JobTracker指派任務,例項化使用者程式,在本地執行任務並週期性地向JobTracker彙報狀態。在每一個工作節點上永遠只會有一個TaskTracker。

-JobTracker一直在等待使用者提交作業

-TaskTracker每隔3秒向JobTracker傳送心跳詢問有沒有任務可做,如果有,讓其派發任務給它執行

-Slave主動向Master拉生意