閱讀199 返回首頁    go 汽車大全


《Hadoop與大數據挖掘》一2.1.2 Hadoop存儲—HDFS

本節書摘來華章計算機《Hadoop與大數據挖掘》一書中的第2章 ,第2.1.2節,張良均 樊 哲 位文超 劉名軍 許國傑 周 龍 焦正升 著 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。

2.1.2 Hadoop存儲—HDFS

Hadoop的存儲係統是HDFS(Hadoop Distributed File System)分布式文件係統,對外部客戶端而言,HDFS就像一個傳統的分級文件係統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與Linux文件係統類似。
但是,Hadoop HDFS的架構是基於一組特定的節點構建的(見圖2-2),這些節點包括名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為HDFS提供存儲塊。由於僅有一個NameNode,因此這是HDFS的一個缺點(單點失敗,在Hadoop2.X後有較大改善)。

image


存儲在HDFS中的文件被分成塊,然後這些塊被複製到多個數據節點中(DataNode),這與傳統的RAID架構大不相同。塊的大小(通常為128MB)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控製所有文件操作。HDFS內部的所有通信都基於標準的TCP/IP協議。
關於各個組件的具體描述如下所示:
(1)名稱節點(NameNode)
它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件係統名稱空間和控製外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。
(2)數據節點(DataNode)
數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有係統連接起來。
數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件係統元數據。如果數據節點不能發送心跳消息,名稱節點將采取修複措施,重新複製在該節點上丟失的塊。
(3)第二名稱節點(Secondary NameNode)
第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它隻是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。
如圖2-3所示,隻有在NameNode重啟時,edits才會合並到fsimage文件中,從而得到一個文件係統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動,如何解決這個問題呢?

fsimage是Namenode啟動時對整個文件係統的快照;edits是在Namenode啟動後對文件係統的改動序列。

如圖2-4所示,Secondary NameNode會定時到NameNode去獲取名稱節點的edits,並及時更新到自己fsimage上。這樣,如果NameNode宕機,我們也可以使用Secondary-Namenode的信息來恢複NameNode。並且,如果SecondaryNameNode新的fsimage文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣NameNode在下次重啟時會使用這個新的fsimage文件,從而減少重啟的時間。

image


舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的,如圖2-5所示。

image


文件在客戶端時會被分塊,這裏可以看到文件被分為5個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有3個塊。下麵來看看具體步驟:
1)客戶端將要上傳的文件按128MB的大小分塊。
2)客戶端向名稱節點發送寫數據請求。
3)名稱節點記錄各個DataNode信息,並返回可用的DataNode列表。
4)客戶端直接向DataNode發送分割後的文件塊,發送過程以流式寫入。
5)寫入完成後,DataNode向NameNode發送消息,更新元數據。
這裏需要注意:
1)寫1T文件,需要3T的存儲,3T的網絡流量。
2)在執行讀或寫的過程中,NameNode和DataNode通過HeartBeat進行保存通信,確定DataNode活著。如果發現DataNode死掉了,就將死掉的DataNode上的數據,放到其他節點去,讀取時,讀其他節點。
3)宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

最後更新:2017-06-26 09:01:56

  上一篇:go  《Hadoop與大數據挖掘》一2.1.3 Hadoop計算—MapReduce
  下一篇:go  《Hadoop與大數據挖掘》一2.1 Hadoop概述