1. 程式人生 > >1、HDFS 架構、啟動過程

1、HDFS 架構、啟動過程

Hadoop Distributed File System

  • 易於拓展的分散式檔案系統
  • 執行在大量普通廉價機器上,提供容錯機制
  • 為大量使用者提供效能不錯的檔案存取服務

NameNode

  • Namenode是一箇中心伺服器,==單一節點==(簡化系統的設計和實現),==負責管理檔案系統的名字空間(namespace)以及客戶端對檔案的訪問==。
  • 檔案操作,==NameNode負責檔案元資料的操作,DataNode負責處理檔案內容的讀寫請求,跟檔案內容相關的資料流不經過NameNode==,只會詢問他跟哪個DataNode聯絡,否則NameNode會成為系統的瓶頸。
  • 副本存放在那些DataNode上是由NameNode控制的,根據全域性情況作出塊放置決定,==讀取檔案時NameNode儘量讓使用者先讀取最近的副本==,降低帶塊消耗和讀取時延。
  • ==NameNode全權管理資料塊的賦值==,它週期性地從叢集中的==每個DataNode接收心跳訊號和塊狀態報告(Blockreport)==。接手到心跳訊號意味著該DataNode節點工作正常。塊狀態報告包含了一個該==DataNode上所有資料塊==的列表。

DataNode

  • 一個==資料塊在DataNode以檔案儲存在磁碟上==,包括兩個檔案,一個是資料本身,一個是==元資料包括資料塊的長度,塊資料的校驗和,以及時間戳==。
  • DataNode啟動後向NameNode註冊,通過後,週期性(1小時)的向NameNode上報所有的塊資訊。
  • 心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令,如複製塊資料到另一臺機器,或者刪除某個資料塊。如果超過10分鐘沒有收到某個DataNode的心跳,則認為該節點不可用。
  • 叢集執行中可以安全加入和退出一些機器。

檔案

  • ==檔案切分成塊==(預設128M),以塊為單位,==每個塊有多個副本儲存在不同的機器上==,副本數可在檔案生成時指定(預設3)。
  • NameNode是主節點,==儲存檔案的元資料==如檔名,檔案目錄結構,檔案屬性(生成時間,副本數,檔案許可權),以及每個檔案的快列表以及塊所在的DataNode等待。
  • DataNode在本地檔案==系統儲存檔案塊資料==,以及==塊資料的校驗和==。
  • ==可以建立、刪除、移動或重新命名檔案,當檔案建立、寫入和關閉之後不能修改檔案內容==。

HDFS Architecture

image

Data Replication

image

副本放置策略

For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a different node in the local rack, and the last on a different node in a different rack. This policy cuts the inter-rack write traffic which generally improves write performance. The chance of rack failure is far less than that of node failure; this policy does not impact data reliability and availability guarantees. However, it does reduce the aggregate network bandwidth used when reading data since a block is placed in only two unique racks rather than three. With this policy, the replicas of a file do not evenly distribute across the racks. One third of replicas are on one node, two thirds of replicas are on one rack, and the other third are evenly distributed across the remaining racks. This policy improves write performance without compromising data reliability or read performance.


資料損壞(corruption)處理

  • 當DataNode讀取block的時候,它會計算checksum
  • 如果計算後的checksum,與block建立時值不一樣,說明該block已經損壞。
  • Client讀取其他DataNode上的block
  • NameNode標記該塊已經損壞,然後複製block達到預期設定的檔案備份數。
  • DataNode在其檔案建立後三週驗證其checksum。