初識Hadoop兩大核心:HDFS和MapReduce

一、Hadoop是什麼?

Hadoop是一個能夠對大量數據進行分佈式處理的軟件框架,實現了Google的MapReduce編程模型和框架,能夠把應用程序分割成許多的小的工作單元,並把這些單元放到任何集羣節點上執行。在MapReduce中,一個準備提交執行的應用程序稱爲“作業(job)”,而從一個作業劃分出 得、運行於各個計算節點的工作單元稱爲“任務(task)”。此外,Hadoop提供的分佈式文件系統(HDFS)主要負責各個節點的數據存儲,並實現了高吞吐率的數據讀寫。


二、Hadoop的主要模塊:

Hadoop框架的主要模塊包括如下:

  • Hadoop Common
  • Hadoop分佈式文件系統(HDFS)
  • Hadoop YARN
  • Hadoop MapReduce

雖然上述四個模塊構成了Hadoop的核心,不過還有其他幾個模塊。這些模塊包括:Ambari、Avro、Cassandra、Hive、 Pig、Oozie、Flume和Sqoop,它們進一步增強和擴展了Hadoop的功能。


三、(Master/Slave)主從架構:

Hadoop使用(Master/Slave)主從架構進行分佈式儲存和分佈式計算。Master負責分配和管理任務,Slave負責實際執行任務。

在分佈式存儲和分佈式計算方面,Hadoop都是用從/從(Master/Slave)架構。在一個配置完整的集羣上,想讓Hadoop這頭大象奔跑起來,需要在集羣中運行一系列後臺(deamon)程序。不同的後臺程序扮演不用的角色,這些角色由NameNode、DataNode、Secondary NameNode、JobTracker、TaskTracker組成。其中NameNode、Secondary NameNode、JobTracker運行在Master節點上,而在每個Slave節點上,部署一個DataNode和TaskTracker,以便 這個Slave服務器運行的數據處理程序能儘可能直接處理本機的數據。對Master節點需要特別說明的是,在小集羣中,Secondary NameNode可以屬於某個從節點;在大型集羣中,NameNode和JobTracker被分別部署在兩臺服務器上。
  
數據存取 - HDFS架構:

Master / Slave(主從結構) - 節點可以理解爲物理機器

  • 主節點,只有一個: Namenode
  • 從節點,有很多個: Datanodes

數據運算 - MapReduce架構:

主從結構

  • 主節點,只有一個: JobTracker
  • 從節點,有很多個: TaskTrackers

Hadoop集羣示意圖:

Hadoop集羣示意圖


四、HDFS與MapReduce的設計思路:

HDFS:

將文件進行切塊處理,再通過文件信息服務器Namenode存放切塊的文件信息存放地址,實際存放數據的服務器Datanode存放切塊後的數據。

系統默認:每個片塊大小爲64M,以保證尋址速度;數據會寫入3個Datanode中,以保證更高的容錯性。

HDFS還設計了Secondary Namenode來更新Namenode,以避免日誌文件過大。

HDFS Client幫助Namenode對寫入讀取數據進行預處理,進行文件的分塊與發送讀取操作。Namenode負責爲數據任務尋址。

MapReduce:

通過JobClient生成任務運行文件,並在JobTracker進行調度指派TaskTracker完成任務。

JobTracker分爲把任務文件進行分解並派送到TaskTracker的程序JobinProgress和執行調度器的TaskScheduler。

JobinProgress把作業分解成Map計算和Reduce計算並放置到TaskTracker服務器中。

數據在Hadoop中的流程處理示意圖:

流程處理示意圖


五、HDFS與MapReduce組件介紹:

HDFS:

HDFS Client:進行文件的分塊與文件的發送讀取。

Namespace image:記錄每個文件的存在位置信息。

Edit log:記錄每個文件的位置移動信息。
  
  Namenode(Master):管理着每個文件中各個塊所在的數據節點的位置信息。
  
  Secondary Namenode:更新並備份Namenode。
  
  Datanode(Slave):記錄着服務器內所儲存的數據塊的列表。

Secondary Namenode:更新並備份Namenode。

MapReduce:

JobClient:用於把用戶的作業任務生成Job的運行包,並存放到HDFS中。

JobinProgress:把Job運行包分解成MapTask和ReduceTask並存放於TaskTracker中。

JobTracker(Master):進行調度管理TaskTracker執行任務。

TaskTracker(Slave):執行分配下來的Map計算或Reduce計算任務。

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