1. 程式人生 > >HDFS分散式檔案系統簡介

HDFS分散式檔案系統簡介

HDFS(Hadoop Distributed File System)Hadoop 分散式檔案系統

基於流資料模式訪問
    就是可以位元組序列化的資料,java.io.Serializable介面
    分散式檔案系統處理的資料必須是流資料,可以寫IO操作的資料

以128MB的資料塊儲存檔案
    其中每一個儲存節點上都有一個DataNode程序,由NameNode來進行協調。

10T的一個檔案資料儲存到多臺伺服器上,每個伺服器擔任一部分儲存任務,這些多臺伺服器通過一個檔案系統組織起來對外界提供統一的服務,那麼客戶端訪問這個10T的檔案的時候,就感覺後臺是一個伺服器在提供服務,那麼我們把這個機制就叫做分散式,把執行在多臺伺服器上的這個檔案系統就叫做分散式檔案系統。

1 HDFS名詞簡介

block:

基本儲存單位,128M,預設備份3份
塊的大小(hadoop2.0 128M):決定了資源,檔案系統讀寫資料的吞吐量,應用程式定址的速度
大資料的塊之所以設定的如此之大,是為了提高資料的吞吐量和降低資料定址的時間
每一個block塊對應一個Map的任務(執行緒)

NameNode:

維護HDFS檔案系統,儲存檔案資料的元資訊。處理來自客戶端的對HDFS的各種操作的互動反饋
映象檔案(Namespace image)和操作日誌檔案(edit log)
    這些資訊在系統啟動時從資料節點重建.被Cache在RAM中
    這兩個檔案也會被持久化儲存在本地硬碟。

SecondaryNameNode:

週期性將元資料節點的名稱空間映象檔案和修改日誌進行合併,並實現fsimage的備份
日誌與映象的定期合併的作用:
    如果Namenode節點故障,namenode下次啟動的時候,會把fsimage載入到記憶體中
    如果沒有合併機制:edits log是每一次操作的記錄,namenode要對每一次操作進行重寫
    導致操作很耗時(namenode容錯機制)

DataNode:

檔案系統的工作節點,根據客戶端或是namenode的排程儲存和檢索資料
並且定期向namenode傳送他們所儲存的塊(block)的列表。
DataNode啟動時會向NameNode報告當前儲存的資料塊資訊,後續也會定時報告修改資訊
DataNode之間會進行通訊,複製資料塊,保證資料的冗餘性

NodeManager :

對它所在的節點上的資源的管理(cpu、記憶體、磁碟的利用情況)
    定期向resourcemanager進行彙報該節點上的資源利用資訊
    監督Container(容器)的生命週期
    監控每個Container的資源使用(記憶體、CPU等)情況
    追蹤節點健康狀況,管理日誌和不同應用程式用到的附屬服務(auxiliary service)。

ResouceManager:

負責叢集中所有資源的統一管理和分配
接收來自各個節點(NodeManager)的資源彙報資訊
並把這些資訊按照一定的策略分配給各個應用程式(實際上是ApplicationManager)。
2 HDFS優點
1)適合大資料處理
    能夠處理百萬規模以上的檔案數量( GB、TB、PB級資料),能夠處理10K節點的規模
2)處理非結構化的資料
    可處理結構化、半結構化、非結構化的資料(語音、視訊、圖片),80% 的資料都是非結構化的資料
3)流式訪問資料
    一次寫入,多次讀取。檔案一旦寫入不能修改,只能追加。它能保證資料的一致性。
4)運行於廉價的商用機器叢集上
    它通過多副本機制,提高可靠性。一旦出現故障也不會影響正常的業務處理,可以通過其它副本來恢復。
3 HDFS缺點
1)不適合處理低延遲的資料訪問
    HDFS是為了處理大型資料集分析任務的,主要是為了達到高的資料吞吐量而設計的
    HBase適合做低延遲的資料訪問BigTable
2)無法高效的儲存大量小檔案
    當檔案以block塊的形式進行儲存時,block塊的位置會儲存在namenode節點的記憶體中
    不論儲存大檔案還是小檔案,每個檔案對應的單條block的塊資訊大小是一致的
    而NameNode的記憶體總是有限的。小檔案儲存的尋道時間會超過讀取時間,它違反了HDFS的設計目標。
  (這裡的小檔案是指小於HDFS系統的Block大小的檔案,預設是64M)
3)不支援併發寫入和任意的修改
    一個檔案同時只能有一個寫,不允許多個執行緒同時寫。
    僅支援資料 append(追加),不支援檔案的隨機修改。以追加的形式達到修改的目的
4 HDFS特性
1)高容錯,可擴充套件性及可配置性強
    資料自動儲存多個副本。它通過增加資料冗餘來提高容錯性。某一個副本丟失以後,它可以自動恢復
    可擴充套件:可以不斷的新增新的datanode    
2)跨平臺
    Java語言開發的,HDFS支援多個平臺Windows
3)shell命令介面
    hadoop fs -put 上傳,把本地Linux檔案系統的檔案,上傳到HDFS檔案系統中
    hadoop fs -ls hdfs://master:9000/ 檢視HDFS檔案系統根目錄(/)下的檔案
    ......
4)機架感知功能
    副本的存放,第一個存到rack1,第二個就會選擇不同於rack1的其他的rack上面儲存 /etc/hosts
5)負載均衡
    理想狀態下,叢集中每個伺服器上面儲存資料都是均勻的。但在實際當中,經常會出現資料偏移
    start-balancer.sh -t 10%
6)Web介面
    http://master:18088  yarn           http://master:50070  hdfs
    能夠檢視hdfs檔案系統中的檔案資訊
5 HDFS設計目標
1)監測和快速恢復硬體故障
    監測:立刻會監測到壞的塊--->上報到主節點RM
    單獨啟動一個程序:hadoop-daemon.sh start namenode/datanode/resourcemanager/nodemanager
2)流式資料訪問
    重視的是吞吐量,而不是資料處理的速度。實現批處理
3)大規模資料集
    支援大檔案儲存,一個單一的HDFS例項能支撐數以千萬計的檔案
4)簡化一致性訪問模式
    一次寫入,多次讀取
5)移植性強
    移動計算的代價,要比移動資料的代價低
6 HDFS資料儲存

HDFS採用Master/Slave主從架構來儲存資料,這種架構主要由四個部分組成。分別為HDFS Client、NameNode、DataNode和Secondary NameNode

Client:客戶端

1、檔案切分。檔案上傳 HDFS 的時候,Client 將檔案切分成 一個一個的Block,然後進行儲存。
2、與 NameNode 互動,獲取檔案的位置資訊。
3、與 DataNode 互動,讀取或者寫入資料。
4、Client 提供一些命令來訪問和管理HDFS等操作。

NameNode:master管理者

1、管理 HDFS 的名稱空間。資料塊(Block)對映資訊。配置副本策略
2、處理客戶端讀寫請求。

fsimage與edits是NameNode的兩個重要檔案。
    1)fsimage:元資料映象檔案(儲存檔案系統的目錄樹,比如說有哪些目錄,每個目錄有哪些檔案...)
    2)edits:元資料操作日誌(儲存針對目錄樹的修改操作,比如你刪除了某個檔案或者增加了某個檔案)

DataNode:Slave節點,NameNode 下達命令,DataNode 執行實際的操作

1、儲存檔案。
2、執行資料塊的讀/寫操作。

SecondaryNameNode:輔助元資料

並非NameNode 的熱備(熱備從廣義上講,就是伺服器高可用應用的另一種說法)。
當NameNode 掛掉的時候,它並不能替換 NameNode 並提供服務。
    1、輔助 NameNode,執行fsimage和edits的定期合併
    2、在緊急情況下,可輔助恢復 NameNode。
7 HDFS功能概述

HDFS具有兩個功能:名稱空間管理(Namespace management)和塊/儲存管理服務(block/storage management)。

1.名稱空間管理
HDFS的名稱空間包含目錄、檔案和塊的資訊。
指名稱空間支援對HDFS中的目錄、檔案和塊做建立、修改、刪除、列表檔案和目錄等基本操作。

2.塊/儲存管理
在塊儲存服務中包含兩部分工作:塊管理和物理儲存。這是一個更通用的儲存服務。其他的應用可以直接建立在Block Storage上,如HBase,Foreign Namespaces等。

塊管理:
    A) 處理DataNode向NameNode註冊的請求,處理datanode的成員關係。
    B) 處理來自DataNode週期性的心跳報告,維護塊的位置資訊。
    C) 處理與塊相關的操作:塊的建立、刪除、修改及獲取塊資訊。
    D) 管理副本放置(replica placement)和塊的複製及多餘塊的刪除。

物理儲存:
    Data Node把塊儲存到本地檔案系統中,對本地檔案系統的讀寫。