Hadoop簡介

Hadoop簡介

1.概念

Hadoop是一套大數據解決方案. 它提供了一套分佈式系統基礎架構. 核心內容包含HDFS和MapReduce, 在Hadoop2.0以後引入YARN
簡單來講, HDFS是供數據存儲的, MapReduce是方便數據計算的, YARN是負責資源調度的

  • HDFS對應namenode和DataNode. NameNode負責保存元數據的基本信息, Datanode直接存放數據本身
  • MapReduce對應JobTracker和TaskTracker. JobTracker負責分發任務, TaskTracker負責執行具體任務
  • 對應到Master/Slave架構, NameNode和JobTracker對應Master, DataNode和TaskTracker對應Slave

2.HDFS

在這裏插入圖片描述
HDFS由四部分組成, HDFS Client, NameNode, DataNode, SecondaryNameNode

  • HDFS Client:
    1.提供一些命令來管理, 訪問HDFS, 比如啓動或關閉HDFS
    2.與DataNode交互, 讀取或寫入數據. 讀取時, 要與NameNode交互, 獲取文件存儲位置信息; 寫入HDFS的時候, Client把文件切分成一個一個的Block, 然後進行存儲

  • NameNode:
    整個 Hadoop 集羣中只有一個 NameNode. 它是整個系統的"總管", 負責管理 HDFS 的目錄樹和相關的文件元數據信息. 這些信息是以"fsimage"( HDFS 元數據鏡像文件 )和"editlog"(HDFS 文件改動日誌)兩個文件形式存放在本地磁盤, 當 HDFS 重啓時重新構造出來的. 此外, NameNode 還負責監控各個 DataNode 的健康狀態, 一旦發現某個 DataNode 宕掉, 則將該 DataNode 移出 HDFS 並重新備份其上面的數據
    1.管理HDFS的名稱空間
    2.管理Block的映射信息
    3.配置副本策略
    4.處理客戶端讀寫請求

  • DataNode:
    1.存儲實際的數據塊
    2.執行數據塊的讀/寫操作

  • SecondaryNameNode:
    並非是NameNode的熱備, 當NameNode掛掉時, 不能馬上替換NameNode並提供服務
    1.輔助NameNode, 分擔其工作量
    2.定期合併fsimage和edits日誌, 並推送給NameNode
    3.在緊急情況下, 可輔助恢復NameNode

3.MapReduce

這裏的MapReduce是
在這裏插入圖片描述

  • Client:
    用戶編寫的MapReduce程序通過Client提交到JobTracker端; 同時, 用戶可通過Client提供的一些藉口查看作業運行狀態. 在Hadoop內部用作業(Job)表示MapReduce程序. 每個MapReduce任務可對應若干個作業, 每個作業會被分解成若干個Map/Reduce任務(Task)

  • JobTracker:
    JobTracker主要負責資源調度和作業監控. JobTracker監控所有TaskTracker與作業的健康情況, 一旦發現失敗情況後, 其會將相應的任務轉移到其他節點; 同時JobTracker會跟蹤任務的執行進度, 資源使用量等信息, 並將這些信息告訴任務調度器

  • TaskTracker:
    TaskTracker會週期性地通過Heartbeat將本節點上資源使用情況和任務執行進度彙報給JobTracker, 同時接受JobTracker發送過來的命令並執行相應的操作(啓動新任務, 殺死任務等). TaskTracker使用“slot”等量劃分本節點上的資源量. "slot"代表計算資源(CPU, 內存等). 一個Task獲取到一個slot纔有機會運行. 而Hadoop調度器的作用就是將各個TaskTracker上的空閒的slot分配給Task使用. slot分爲 Map slot和Reduce slot兩種, 分別供Map Task和Reduce Task使用

  • Task:
    在這裏插入圖片描述
    Task分爲Map Task和Reduce Task兩種, 均有TaskTracker啓動. HDFS以固定大小的Block爲基本單元存儲數據, 而對於MapReduce而言, 其處理單位是split. split是一個邏輯概念, 其只包括一些元數據信息, 比如數據起始位置, 數據長度, 數據所在節點等. 它的劃分方法完全由用戶自己決定. 不過, split的多少決定了Map Task的數目, 因爲每個split會交給 一個Map Task去處理.

下圖是Map Task的執行流程,Map Task先將一個個split迭代解析成k-v對, 依次調用用戶定義的map()函數進行處理, 最終將臨時結果存儲在本地磁盤上. 其中臨時數據被分爲若干個partition, 每個partition將被一個Reduce Task處理.
在這裏插入圖片描述
Reduce Task:
1.從遠程節點上讀取Map Task的中間結果(Shuffle)
2.按照key對key-value進行排序(Sort)
3.依次讀取<key, valuelist>, 按照用戶定義的reduce()函數處理, 並將結果存放到HDFS上(Reduce)

4.YARN

在這裏插入圖片描述

  • ResourceManager:
    1.Resource Manager負責整個集羣的資源管理和分配, 是一個全局的資源管理系統
    2.NodeManager以心跳的方式向ResourceManager彙報資源使用情況(主要是CPU和內存的使用情況).
    3.YARN Scheduler根據Application的請求爲其分配資源, 不負責Application Job的監控, 追蹤, 運行狀態反饋, 啓動等工作

  • NodeManager:
    1.NodeManager是每個節點上的資源和任務管理器, 它是管理這臺機器的代理, 負責該節點程序的運行, 以及該節點資源的管理和監控. YARN集羣每個節點都運行一個NodeManager.
    2.NodeManager定時向ResourceManager彙報本節點資源使用情況和Container的運行狀態. 當ResourceManager宕機時NodeManager自動連接RM備用節點
    3.NodeManager接受並處理來自ApplicationMaster的Container啓動, 停止各種請求

  • ApplicationMaster:
    用戶提交的每個應用程序均包含一個ApplicationMaster, 它可以運行在ResourceManager以外的機器上.
    1.負責與ResourceManager協商以獲取資源(Container)
    2.將得到的資源進一步分配給內部的任務(資源的二次分配)
    3.與NodeManager通信以啓動/停止任務
    4.監控所有任務運行狀態, 並在任務運行失敗時重新爲任務申請資源以重啓任務

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