1. 程式人生 > >Hadoop基本原理

Hadoop基本原理

Getting Started

Hadoop是一個用於海量資料統計分析的分散式計算框架,封裝了分散式計算中比較困難的程序間通訊、負載均衡,任務排程等模組,降低了學習門檻。在最簡單的程式實現中,僅僅需要重寫map和reduce方法,並實現任務提交邏輯。接下來,就讓我們一起推開Hadoop的大門,走進大資料的神奇世界。

Hadoop的組成

Hadoop目前主要包括Hadoop1.x和hadoop2.x,兩種版本差距較大,目前常用的是Hadoop2.x版本,所以主要基於Hadoop2.x進行講解

主要組成模組

  • Hadoop Distributed File System(HDFS):分散式檔案儲存系統。
  • MapReduce:平行計算框架(可以自定義計算邏輯的部分)
  • Yet Another Resource Negotiator(YARN):另一種資源協調者(顧名思義,Hadoop1.x採用的不是這一個資源管理器)

MapReduce的工作機制

MapReduce工作機制
上圖是MapReduce的工作原理,首先解釋一下各個組成模組的作用。

  1. Job:由客戶端向叢集提交的一次計算任務。
  2. Task:叢集的最小可執行單位(一個Job將會分為多個Task執行)
  3. ResourceManager(以下簡稱RM):管理整個叢集的計算資源,主要用於為每一個Job分配計算資源(整個叢集只有一個RM)
  4. Container:資源分配單位,一個Container包括一些CPU和儲存資源
  5. NodeManager(以下簡稱NM):管理單臺伺服器的計算資源,類似RM的更細粒度實現(叢集中每臺伺服器有一個NM)。
  6. ApplicationMaster(以下簡稱AM):監控每一個Job的執行情況,包括資源申請、Task排程等。

為了便於理解,下面有一個並不是太恰當的比喻。類似一個學生宿舍的構成,RM相當於宿舍管理處的大BOSS,而Task則相當於一個學生,大BOSS(RM)負責分配一片區域給某個班(Job)的學生(Task)住,而具體每個學生(Task)住哪兒,則由班主任(AM)和樓管(NM)商量(當然一個班級的學生還是可以住在多個樓裡邊的)。

接下來具體解釋圖中每一步的作用:

  1. client呼叫Job提交介面,Job被提交到叢集上
  2. 為了便於標識Job,會首先向RM請求一個唯一ID,並同時檢查Job中的輸入/輸出路徑是否存在,如果輸入路徑不存在,則報錯;如果輸出路徑存在,也會報錯(注意別看錯了)
  3. 獲得唯一ID之後,就把Job所需資源(包括Jar包和輸入路徑資訊)上傳到HDFS中(因為分散式環境的原因,需要將這些資源上傳到所有節點都能訪問到的目錄,即這裡的HDFS)
  4. 在完成以上步驟之後,則可以真正提交Job到叢集中。
  5. 啟動一個Job的時候,首先需要啟動該Job的AM,所以RM會主動分配NM上的一個Container(一個Container就是一個JVM),用於執行AM守護程序。
  6. 初始化Job,包括啟動一些Job執行狀態跟蹤物件。
  7. 從HDFS中讀取第3步上傳的輸入路徑資訊(包括輸入檔案所在的伺服器節點資訊,一份輸入檔案可能儲存在多臺伺服器上)。
  8. 根據上一步的檔案路徑資訊,向RM申請所需資源(Container),儘量保證Container和輸入檔案在同一臺伺服器上邊,能夠減小網路IO(即資料本地化)
  9. AM根據RM分配的Container,向Container所屬的NM申請啟動Task。
  10. Container在收到啟動命令之後,會首先從HDFS下載Task所需Jar包和快取檔案等
  11. 最後就是Task的正式執行階段了。