Hadoop入門(2)HDFS的核心概念和工作原理

Hadoop之HDFS

目錄

一、簡述Hadoop的生態系統

二、分佈式文件系統

三、HDFS

(一)HDFS優點和缺點

(二)HDFS的部分專業術語

(三)HDFS的部分核心組件

(四)HDFS的工作流程

1、如何分塊

2、如何備份

3、檢測數據(塊)損壞流程

4、檢測數據節點(DN)損壞流程

5、寫文件流程

6、讀文件流程

四、參考與推薦


 

一、簡述Hadoop的生態系統

  • Hadoop的核心是HDFS(分佈式存儲系統)+MapReduce(分佈式計算框架)

 

  • Flume(日誌收集,常用於推薦系統的數據收集)
  • Sqoop(數據轉移,用於兩個數據庫的數據轉移傳遞)
  • Storm(數據分析,即時計算,不同於hadoop的批量計算)
  • Ambari(簡化Hadoop複雜操作的工具)
  • Mapreduce(解決數據計算問題,比較笨重,過時啦)
  • YARN(資源管理調度系統,出現在Hadoop2.x)
  • Hive("Hadoop的sql",將sql語言翻譯成MapReduce程序)
  • Zookeeper(數據管理,約等於文件系統+通知機制)
  • Spark(數據清洗,簡化Mapreduce的上手難度)
  • HDFS(解決數據存儲問題)
  • Hbase(數倉建模,解決數據查詢問題)

二、分佈式文件系統

  • 集羣:多個人在一起作同樣的事 。
  • 分佈式 :多個人在一起作不同的事 。
  • 分佈式結構如下。 

  • 簡而言之,分佈式系統就是由多臺機器組成的大的機器集羣系統。而分佈式文件系統就是將一個大文件分成多個小文件並存儲,負責管理文件的系統。
  • 分佈式文件系統在物理結構上是由計算機集羣中的多個節點構成的,這些節點分爲兩類,一類叫“主節點”(Master Node)或者也被稱爲“名稱結點”(NameNode),另一類叫“從節點”(Slave Node)或者也被稱爲“數據節點”(DataNode),正如字面意思一樣,主機負責與外界打交道,從機被主機管理。 


三、HDFS

  • Hadoop的分佈式文件系統。

(一)HDFS優點和缺點

  • 大存儲(分佈式)
  • 比傳統機器讀寫快(併發讀寫,不受單臺機器的吞吐量和容量限制)
  • 成本低,支持廉價硬件
  • 容錯率高(因爲支持備份)
  • 移動計算(把計算任務下發到數據所在的節點進行處理)
  • 不適合小文件存儲。(生成的記錄信息浪費空間)。
  • 適合用於處理批量數據,而不適合於隨機定位訪問(量大難查)。
  • 不適合多次修改(滿足一致性原則)

 

(二)HDFS的部分專業術語

數據塊(Block)

  • 當我們遇到一個大的數據時,HDFS會將它拆分成許多個小的數據塊(Block),以便分佈式存儲。

元數據(MateData)

  • 記錄了這些數據塊分別在哪個數據節點存儲,順序按照距離遠近排序,越近越前。
  • 描述數據的數據,這種信息一般稱爲“元數據”。

 

(三)HDFS的部分核心組件

名稱節點(簡稱NN,NameNode)

  • 也稱主節點,作爲中心服務器,主要負責接受客戶端的讀寫請求。在主節點的統一調度下進行數據塊的創建、刪除和複製等操作,主節點的元數據信息會在啓動後加載到內存裏,以便快速查詢。
  • 管理數據節點。
  • 控制客戶端的訪問權限。
  • 需要維護塊信息表數據節點信息表
  • NameNode有兩個重要文件,如下。
  1. fsimage:元數據鏡像文件,保存文件系統的目錄樹。
  2. edits:元數據操作日誌(針對目錄樹的修改操作),被寫入共享存儲系統中。

第二名稱節點(簡稱SNN,Secondary NameNode)

  • 並不是主節點的備份文件,但是是備用主節點。
  • 它主要爲了幫助主節點分擔壓力,類似主節點的“助手”。它的主要工作是在主節點忙時,幫助主節點合併edits ,減少NN啓動時間,合併流程如下圖。 

數據節點(簡稱DN,DataNode)

  • 主要爲了存儲數據塊。
  • 必須向主節點彙報心跳、塊列表和其他確認信息ack。

 

(四)HDFS的工作流程

1、如何分塊

  • 當我們遇到一個大的數據時,HDFS會將它拆分成許多個小的數據塊(Block),以便分佈式存儲。
  • 數據塊容量太小不合適,尋址困難。
  • 數據塊容量太大也不合適,容易產生外部碎片。
  • 在Hadoop2.x,這個塊的大小默認是128MB,Hadoop1.x版本,默認大小是64MB。若文件大小不到128MB,則單獨存成一個塊。

2、如何備份

  • 分好塊後,爲了保證容錯性(軟硬件出錯導致的數據丟失之類),HDFS需要對數據塊進行備份。Hadoop默認一個數據塊備份3個副本,分佈策略如下。
  • 第一個副本:隨機挑選一臺磁盤不太滿,CPU不太忙的節點。
  • 第二個副本:放置在於第一個副本不同的機架的節點上。
  • 第三個副本:與第二個副本相同機架的節點。
  • 更多副本:隨機節點 

  • 存儲過程正如下圖一般。 (右上角的是元數據表) 

 

3、檢測數據(塊)損壞流程

  1. 數據節點會週期性向主節點彙報自己的塊列表信息。
  2. 彙報信息前,數據節點會通過驗證校驗碼去篩選是否存在數據塊的數據損失,如果發現數據塊數據有所損失,則不上報。
  3. 主節點通過對比自己的塊列表和數據節點上報的信息,知道數據塊的損壞情況,並更新自己的塊表。

4、檢測數據節點(DN)損壞流程

  1. 數據節點通過向主節點發送心跳保持與其聯繫(3秒一次)。
  2. 如果主節點10分鐘沒有收到數據節點的心跳,則認爲其已經意外丟失,主節點會開始複製他在其他數據節點上的備份數據塊,重新備份。

5、寫文件流程

  

  • 數據通常以64kb被寫入(被稱爲數據包),所有數據包在被節點接受寫入後,都會返回一個確認信息給客戶端,如果客戶端沒收到確認信息,它就會重新調整管道。

6、讀文件流程

 

  • 如果出現了因爲數據錯誤導致的讀錯誤,那麼客戶端會去列表中的其他備份節點讀數據。

四、參考與推薦

  1. 用漫畫形式解說HDFS的存儲原理
  2. 詳解HDFS
  3. 《Google file system》(暫未看),用於處理存儲的分佈式文件系統(GFS)
  4. 《Google MapReduce》(暫未看),用於計算的分佈式計算框架(MAPREDUCE)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章