1. 程式人生 > >HDFS 01 - HDFS是什麼?它的適用場景有哪些?它的架構是什麼?

HDFS 01 - HDFS是什麼?它的適用場景有哪些?它的架構是什麼?

[TOC] # 1、HDFS 是什麼 ## 1.1 簡單介紹 在現代的企業環境中,單機容量太小,無法儲存海量的資料,這時候就需要多機器儲存。 —— 統一管理分佈在叢集上的檔案,這樣的系統就稱為分散式檔案系統。 HDFS(Hadoop Distributed File System,Hadoop 分散式檔案系統),是 Apache Hadoop 專案的一個子專案。 我們知道,Hadoop 天生就是為了儲存海量資料(比如 TB 和 PB級別)而設計的,它的儲存系統就是 HDFS。 HDFS 使用多臺計算機儲存檔案,並提供統一的訪問介面,像是訪問一個普通檔案系統一樣使用分散式檔案系統。 ## 1.2 發展歷史 1) Doug Cutting 在做 Lucene 的時候,需要編寫一個爬蟲服務,過程中遇到了一些問題,諸如:如何儲存大規模的資料,如何保證叢集的可伸縮性,如何動態容錯等。 2) 2003年的時候,Google 釋出了三篇論文,被稱作為三駕馬車,其中有一篇叫做 GFS,描述了 Google 內部的一個叫做 GFS 的分散式大規模檔案系統,具有強大的可伸縮性和容錯性。 3) Doug Cutting 後來根據 GFS 的論文, 創造了一個新的檔案系統, 叫做 HDFS # 2、HDFS 應用場景 ## 2.1 適合的應用場景 - 儲存非常大的檔案:這裡非常大指的是成百上千 MB、GB,甚至 TB 級別的檔案,**需要高吞吐量,對延時沒有要求**。 - 採用流式的資料訪問方式:即 **一次寫入、多次讀取**,資料集經常從資料來源生成或者拷貝一次,然後在其上做很多分析工作。 - 運行於廉價的硬體上:不需要效能特別高的機器,可運行於普通廉價機器,節約成本。 - 需要高容錯性,HDFS 有多副本機制,丟失/損壞一定個數的副本後,不影響檔案的完整性。 - 用作資料儲存系統,方便橫向擴充套件。 ## 2.2 不適合的應用場景 - 低延時的資料訪問:對延時要求在毫秒級別的應用,不適合採用 HDFS。HDFS 是為高吞吐資料傳輸設計的,延時較高。 - 大量小檔案:HDFS 系統中,檔案的元資料儲存在 NameNode 的記憶體中, 檔案數量會受限於 NameNode 的記憶體大小。 >
通常,一個檔案/目錄/檔案塊的元資料記憶體空間約=150Byte。如果有100萬個檔案,每個檔案佔用1個 block,則需要大約300MB的記憶體。因此十億級別的檔案數量在現有商用機器上難以支援。 - 多方讀寫,需要任意的檔案修改:HDFS採用追加(append-only)的方式寫入資料。不支援檔案任意 offset 的修改,也不支援多個寫入器(writer)。 #3、HDFS 的架構 HDFS是一個 **主/從(Mater/Slave)體系結構**,HDFS由四部分組成,分別是: HDFS Client、NameNode、DataNode 和 SecondaryNameNode。 **1、Client:就是客戶端。** - 檔案切分。檔案上傳 HDFS 的時候,Client 將檔案切分成多個塊(block),然後儲存。 - 與 NameNode 互動,獲取檔案的位置資訊。 - 與 DataNode 互動,讀取、寫入資料。 - Client 提供一些命令來管理和訪問 HDFS,比如啟動、關閉 HDFS。 **2、NameNode:就是 master,是管理者。** - 管理 HDFS 的名稱空間。 - 管理資料塊(block)對映資訊。 - 配置副本策略。 - 處理客戶端的讀寫請求。 **3、DataNode:就是 Slave。NameNode 下達命令,DataNode 執行實際的操作。** - 儲存實際的資料塊。 - 執行資料塊的讀/寫操作。 **4、Secondary NameNode:不是 NameNode 的熱備份 —— NameNode 掛掉的時候,它並不能馬上替換 NameNode 並提供服務。** - 輔助 NameNode,分擔其工作量。 - 定期合併 fsimage 和 fsedits,並推送給 NameNode。 - 在緊急情況下,可輔助恢復 NameNode。 # 4、NameNode 和 DataNode
## 4.1 NameNode 的作用 > NameNode 在記憶體中儲存著整個檔案系統的名稱空間和檔案資料塊的地址對映。 > > HDFS 叢集可儲存的檔案個數受限於 NameNode 的記憶體大小 。 **1、NameNode 儲存元資料資訊** 元資料包括:檔名,檔案目錄結構,檔案屬性(生成時間、副本數、許可權等),每個檔案的塊列表,以及列表中的塊與塊所在的DataNode 之間的地址對映關係; 在記憶體中載入每個檔案和每個資料塊的引用關係(檔案、block、DataNode之間的對映資訊); 資料會定期儲存到本地磁碟(fsImage 檔案和 edits 檔案)。 **2、NameNode 檔案元資料的操作** DataNode 負責處理檔案內容的讀寫請求,資料流不會經過 NameNode,而是從 NameNode 獲取資料真正要流向的 DataNode。 **3、NameNode 副本** 檔案資料塊到底存放到哪些 DataNode 上,是由 NameNode 決定的,它會根據全域性的情況(機架感知機制),做出副本存放位置的決定。 **4、NameNode 心跳機制** 全權管理資料塊的複製,週期性的接受心跳和塊的狀態報告資訊(包含該DataNode上所有資料塊的列表) 若接受到心跳資訊,NameNode認為DataNode工作正常,如果在10分鐘後還接受到不到DN的心跳,那麼NameNode認為DataNode已經宕機 ,這時候NN準備要把DN上的資料塊進行重新的複製。 塊的狀態報告包含了一個DN上所有資料塊的列表,blocks report 每個1小時傳送一次. ##4.2 DataNode 的作用 提供真實檔案資料的儲存服務。 1) DataNode 以資料塊的形式儲存 HDFS 檔案 2) DataNode 響應 HDFS 客戶端的讀寫請求 3) DataNode 週期性向 NameNode 彙報心跳資訊 4) DataNode 週期性向 NameNode 彙報資料塊資訊 5) DataNode 週期性向 NameNode 彙報快取資料塊資訊 >
# 版權宣告 > > 作者:[瘦風(https://healchow.com)](https://healchow.com) > > 出處:[部落格園-瘦風的南牆(https://www.cnblogs.com/shoufeng)](https://www.cnblogs.com/shoufeng) > > **感謝閱讀,公眾號 [「瘦風的南牆」](https://mp.weixin.qq.com/s/EPUA_78SNmVqoCB4CcrJag) ,手機端閱讀更佳,還有其他福利和心得輸出,歡迎掃碼關注