hadoop權威指南 之 HDFS

一:HDFS  hadoop distributed filesystem的設計目標
   Very large files  單個文件和 文件總和
   Steaming data access  write-once,read mary times  流式數據讀取。
   commodity hardware 普通的硬件
   
  HDFS 不適合的場景:
  low latency  data access 低延遲的數據讀取。對與低延遲的要求 用hbase來解決。
  lots of small files 小文件
 multiple writers, arbitrary file modifications 多用戶寫入,任意文件修改。
二:HDFS 的概念。
1.數據塊 block
a.block是磁盤讀寫的最小單元。hdfs的block 默認大小是64M。設置這麼大是爲了減少seeking,發揮流式讀取的優勢。
b.hdfs 文件會被劃分爲塊大小的chuck 分塊,作爲獨立的存儲單元。
c.使用塊而不是文件作爲存儲單元的好處:
    第一:文件可以大於任何一個磁盤的大小,文件並不需要存儲在一個磁盤上。
第二:以block作爲存儲單元,簡化了子系統的設計,每個block大小是一定的,便於計算單個磁盤能存儲多少個塊;塊非常適用於做數據備份。進而提高容錯性和可用性。
2.namenode 管理者  datanode 工作者


namenode:管理文件系統的命名空間,維護文件系統所以的目錄和文件,這些信息以命名空間鏡像文件和編輯日誌文件兩種文件形式永久存儲在硬盤上。 
namenode 也記錄着所有datanode的信息,但是它不永久保存block的位置信息,因爲這些信息在系統啓動時由數據節點重建。
所以namenode的容錯機制比datanode更加重要


datanode 是工作節點,它根據需要存儲並檢索數據塊,並且定期想namenode發送他們所存儲塊的列表。


 
 
3.namenode的容錯機制
第一:備份文件系統元數據的文件,當將持久狀態寫入磁盤的同時,寫入一個遠程掛載的網絡文件系統 NFS
第二:運行輔助namenode,它的作用是定期編輯日誌合併命名空間鏡像文件。它一般運行在一個單獨的物理機器上,與主節點分開,當主節點失效時,它也會隨之失效,所以會丟失部分數據。這時可以從NFS上把元數據恢復到輔助namenode上。並講輔助namenode作爲新的namenode運行。
4。命令行接口
fs.default.name  :hdfs:localhost     默認8020端口上運行namenode
dfs.replication 文件系統塊副本數。
5.基本文件系統操作。
創建目錄:hadoop fs -mkdir xxxx
列出列表:hadoop fs -ls
從本地複製到hdfs:hadoop fs -copyFromLocal xxxx  hdfs://localhost/xxx     (hdfs://localhost可省略,在core-site。xml文件中已指定。)
從hdfs 到本地:copyToLocal


名稱解釋:POSIX 表示可移植操作系統接口(Portable Operating System Interface 
POSIX是可移植操作系統接口(Portable Operating System Interface)的首字母縮寫。POSIX是基於UNIX的,這一標準意在期望獲得源代碼級的軟件可移植性。換句話說,爲一個POSIX兼容的操作系統編寫的程序,應該可以在任何其它的POSIX操作系統(即使是來自另一個廠商)上編譯執行。POSIX標準定義了操作系統應該爲應用程序提供的接口:系統調用集。
一:HDFS 結構圖。




 
由圖可知,名稱結點(NameNode)上保存着控制數據結點(DataNode)信息的元數據(Metadata)。客戶端Client可以通過NameNode對元數據進行操作,也可以直接對DataNode進行讀和寫操作。
集羣中一臺機器上只運行一個NameNode實例,而集羣中其它機器分別運行一個DataNode實例。NameNode是一箇中心服務器,負責管理文件系統的名字空間以及客戶端對文件的訪問,用戶能夠以文件的形式在上面進行名字空間操作,比如打開、關閉、重命名文件或目錄,同時NameNode還決定了數據塊到數據節點的映射關係。NameNode也可以稱爲管理文件系統的元數據。集羣中每一個節點配置一個DataNode,每個DataNode負責管理它所在節點上的數據存儲。從內部看,一個文件被分成一個或多個數據塊,這些塊存儲在一組DataNode上。同時,DataNode負責處理文件系統客戶端的讀寫請求,在NameNode的統一調度下進行數據塊的創建,刪除和複製。
二:namenode的功能
1.NameNode的功能由如下幾點組成:
(1)管理元數據和文件塊
管理元數據指管理元數據信息。元數據信息包括名字空間、文件到文件塊的映射、文件塊到數據節點的映射三部分。管理文件塊包括創建新文件塊、文件複製、移除無效文件塊以及回收孤立文件塊等內容。
(2)管理命名空間
NameNode管理文件系統的命名空間。任何對文件系統元數據產生修改的操作,NameNode都會使用事務日誌記錄(下稱EditLog)來表示;同樣地,修改文件的副本系數也將往Editlog中插入一條記錄,NameNode將Editlog存儲在本地操作系統的文件系統中。同時,文件系統的命名空間被存儲在一個稱之爲Fslmage(映像文件)的文件中,包括文件的屬性、文件塊到文件的映射以及文件塊到數據節點的映射等內容,FsImage文件也是存放在NameNode所在的本地文件系統中。
(3)監聽請求和處理請求
監聽請求指監聽客戶端事件和DataNode事件。客戶端事件包含名字空間的創建和刪除,文件的創建、讀寫、重命名和刪除,文件列表信息獲取等信息。DataNode事件主要包括文件塊信息、心跳響應、出錯信息等。
處理請求指處理上面的監聽請求事件並返回結果。
(4)心跳檢測
DataNode會定期將自己的負載情況通過心跳信息向NameNode彙報。Namenode全權管理數據塊的複製,它週期性地從集羣中的每個Datanode接收心跳信號和塊狀態報告(Blockreport)。接收到心跳信號意味着該Datanode節點工作正常。塊狀態報告包含了一個該Datanode上所有數據塊的列表。 
NameNode 決定是否將文件映射到 DataNode 的複製塊上。對於最常見的 3 個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。
實際的 I/O 事務並沒有經過 NameNode,只有表示 DataNode 和塊的文件映射的元數據經過 NameNode。當外部客戶機發送請求,要求創建文件時,NameNode 會以塊標識和該塊的第一個副本的 DataNode IP 地址作爲響應。這個 NameNode 還會通知其他將要接收該塊的副本的 DataNode。
NameNode 在一個稱爲 FsImage 的文件中存儲所有關於文件系統名稱空間的信息。這個文件和一個包含所有事務的記錄文件(這裏是 EditLog)將存儲在 NameNode 的本地文件系統上。FsImage 和 EditLog 文件也需要複製副本,以防文件損壞或 NameNode 系統丟失。


DataNode的功能主要包括以下幾個方面:
首先,是數據塊的讀寫。一般是文件系統客戶端需要請求對指定DataNode進行讀寫操作,DataNode通過DataNode的服務進程與文件系統客戶端打交道。同時,DataNode進程與NameNode統一結合,對是否需要對文件塊的創建、刪除、複製等操作進行指揮與調度,當與NameNode交互過程中收到了可以執行文件塊的創建、刪除或複製操作的命令後,纔開始讓文件系統客戶端執行指定的操作。具體文件的操作並不是DataNode來實際完成的,而是經過DataNode許可後,文件系統客戶端進程來執行實際操作。
其次,是向NameNode報告狀態。每個DataNode節點會週期性地向Name
Node發送心跳信號和文件塊狀態報告,以便NameNode獲取到工作集羣中DataNode節點狀態的全局視圖,從而掌握它們的狀態。如果存在DataNode節點失效的情況時,NameNode會調度其它DataNode執行失效結點上文件塊的複製處理,保證文件塊的副本數達到規定數量。
最後,是執行數據的流水線複製。當文件系統客戶端從NameNode服務器進程中獲取到要進行復制的數據塊列表(列表中包含指定副本的存放位置,亦即某個DataNode結點)後,會首先將客戶端緩存的文件塊複製到第一個Data
Node節點上,此時並非整個塊都複製到第一個DataNode完成以後才複製到第二個DataNode節點上,而是由第一個DataNode向第二個DataNode節點複製,如此反覆進行下去,直到完成文件塊及其塊副本的流水線複製。



































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