Hadoop工作機制詳解

1、Hadoop介紹

  隨着現代社會的發展,信息數據量高速增長。然而單機的計算機,無論是硬盤存儲、網絡IO、計算CPU還是內存都是非常有限的。針對這種情況,Hadoop便應運而生。
  從其定義就可以發現,它解決了兩大問題:大數據存儲、大數據分析。也就是Hadoop的兩大核心:HDFS和MapReduce。HDFS(Hadoop Distributed File System)是可擴展、容錯、高性能的分佈式文件系統,異步複製,一次寫入多次讀取,主要負責存儲。MapReduce爲分佈式計算框架,主要包含map(映射)和reduce(歸約)過程,負責在HDFS上進行計算。

  Hadoop是一個能夠讓用戶輕鬆架構和使用的分佈式計算的平臺。用戶可以輕鬆地在Hadoop上開發和運行處理海量數據的應用程序。其優點主要有以下幾個:

  1. 高可靠性:Hadoop按位存儲和處理數據的能力值得人們信賴。
  2. 高擴展性:Hadoop是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以千計的節點中。
  3. 高效性:Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。
  4. 高容錯性:Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分配。
  5. 低成本:與一體機、商用數據倉庫以及QlikView、Yonghong Z-Suite等數據集市相比,Hadoop是開源的,項目的軟件成本因此會大大降低。
  6. Hadoop帶有用Java語言編寫的框架,因此運行在Linux生產平臺上是非常理想的,Hadoop上的應用程序也可以使用其他語言編寫,比如C++。

2、HDFS介紹

HDFS主要由三類節點構成:NameNode、DataNode和Secondary NameNode。

在這裏插入圖片描述

  名稱節點(NameNode)它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

  數據節點(DataNode)數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集羣包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

NameNode DataNode
存儲元數據 存儲文件內容
元數據保存在內存中 文件內容保存在磁盤
保存文件, block, DataNode 之間的關係 維護了 block 到 DataNode 文件之間的關係

  第二名稱節點(Secondary NameNode)第二名稱節點的作用在於爲HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認爲是Checkpoint Node的原因。如圖2-3所示,只有在NameNode重啓時,edits纔會合併到fsimage文件中,從而得到一個文件系統的最新快照。

3、MapReduce介紹

  MapReduce一般分爲三個階段:Map、Shuffle、Reduce。下圖以一個簡單的WordCount爲例:

在這裏插入圖片描述

  1. input:輸入數據一般放在HDFS上面就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。
  2. 輸入分片:在進行Map階段之前,MapReduce框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個Map任務,輸入分片往往和HDFS的塊關係很密切。例如,HDFS的塊的大小是128MB,如果我們輸入兩個文件,大小分別是27MB、129MB,那麼27MB的文件會作爲一個輸入分片(不足128M會被當作一個分片),而129MB則是兩個輸入分片(129-128=1,不足128MB,所以1MB也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖所示,Splitting對應下面的三個數據應該理解爲三個分片。
  3. Map階段:這個階段的處理邏輯其實就是程序員編寫好的Map函數,因爲一個分片對應一個Map任務,並且是對應一個文件塊,所以這裏其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖所示,這裏的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。
  4. Shuffle階段:這是“奇蹟”發生的地方,MapReduce的核心其實就是Shuffle。Shuffle就是將Map的輸出進行整合,然後作爲Reduce的輸入發送給Reduce。簡單理解就是把所有Map的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如圖所示,Bear、Car、Deer、River是排序的,並且Bear這個鍵有兩個鍵值對。
  5. Reduce階段:與Map類似,這裏也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如圖所示,針對同一個鍵Bear的所有值進行了一個加法操作,得到<Bear,2>這樣的鍵值對。
  6. 輸出:Reduce的輸出直接寫入HDFS上,同樣這個輸出文件也是分塊的。

4、YARN介紹

  MapReduce發展到2.x時就不使用JobTracker來作爲自己的資源管理框架,而選擇使用YARN。

在這裏插入圖片描述
YARN集羣主要包括三種組件:

  1. ResourceManager:ResourceManager是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(ApplicationManager,)。Scheduler負責分配最少但滿足Application運行所需的資源量給Application。Scheduler只是基於資源的使用情況進行調度,並不負責監視/跟蹤Application的狀態,當然也不會處理失敗的Task。ApplicationManager負責處理客戶端提交的Job以及協商第一個Container以供ApplicationMaster運行,並且在ApplicationMaster失敗的時候會重新啓動ApplicationMaster(YARN中使用ResourceContainer概念來管理集羣的資源,Resource Container是資源的抽象,每個Container包括一定的內存、IO、網絡等資源)。
  2. ApplicationMasterApplicatonMaster是一個框架特殊的庫,每個Application有一個ApplicationMaster,主要管理和監控部署在YARN集羣上的各種應用。
    Application有一個ApplicationMaster,主要管理和監控部署在YARN集羣上的各種應用。
  3. NodeManager主要負責啓動Resourcemanager分配給ApplicationMaster的Container,並且會監視Container的運行情況。在啓動Container的時候,NodeManager會設置一些必要的環境變量以及相關文件;當所有準備工作做好後,纔會啓動該Container。啓動後,NodeManager會週期性地監視該Container運行佔用的資源情況,若是超過了該Container所聲明的資源量,則會kill掉該Container所代表的進程。

有錯誤的地方敬請指出,歡迎大家評論區或者私信交流!每日持續更新Java、Python、大數據技術,請大家多多關注!

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