在現代的企業環境中,單機容量過小,沒法存儲海量的數據,這時候就須要多機器存儲。node
—— 統一管理分佈在集羣上的文件,這樣的系統就稱爲分佈式文件系統。緩存
HDFS(Hadoop Distributed File System,Hadoop 分佈式文件系統),是 Apache Hadoop 項目的一個子項目。架構
咱們知道,Hadoop 天生就是爲了存儲海量數據(好比 TB 和 PB級別)而設計的,它的存儲系統就是 HDFS。app
HDFS 使用多臺計算機存儲文件,並提供統一的訪問接口,像是訪問一個普通文件系統同樣使用分佈式文件系統。分佈式
Doug Cutting 在作 Lucene 的時候,須要編寫一個爬蟲服務,過程當中遇到了一些問題,諸如:如何存儲大規模的數據,如何保證集羣的可伸縮性,如何動態容錯等。oop
2003年的時候,Google 發佈了三篇論文,被稱做爲三駕馬車,其中有一篇叫作 GFS,描述了 Google 內部的一個叫作 GFS 的分佈式大規模文件系統,具備強大的可伸縮性和容錯性。性能
Doug Cutting 後來根據 GFS 的論文, 創造了一個新的文件系統, 叫作 HDFS設計
低延時的數據訪問:對延時要求在毫秒級別的應用,不適合採用 HDFS。HDFS 是爲高吞吐數據傳輸設計的,延時較高。blog
大量小文件:HDFS 系統中,文件的元數據保存在 NameNode 的內存中, 文件數量會受限於 NameNode 的內存大小。接口
一般,一個文件/目錄/文件塊的元數據內存空間約=150Byte。若是有100萬個文件,每一個文件佔用1個 block,則須要大約300MB的內存。所以十億級別的文件數量在現有商用機器上難以支持。
多方讀寫,須要任意的文件修改:HDFS採用追加(append-only)的方式寫入數據。不支持文件任意 offset 的修改,也不支持多個寫入器(writer)。
HDFS是一個 主/從(Mater/Slave)體系結構,HDFS由四部分組成,分別是:
HDFS Client、NameNode、DataNode 和 SecondaryNameNode。
一、Client:就是客戶端。
二、NameNode:就是 master,是管理者。
三、DataNode:就是 Slave。NameNode 下達命令,DataNode 執行實際的操做。
四、Secondary NameNode:不是 NameNode 的熱備份 —— NameNode 掛掉的時候,它並不能立刻替換 NameNode 並提供服務。
NameNode 在內存中保存着整個文件系統的名稱空間和文件數據塊的地址映射。
HDFS 集羣可存儲的文件個數受限於 NameNode 的內存大小 。
一、NameNode 存儲元數據信息
元數據包括:文件名,文件目錄結構,文件屬性(生成時間、副本數、權限等),每一個文件的塊列表,以及列表中的塊與塊所在的DataNode 之間的地址映射關係;
在內存中加載每一個文件和每一個數據塊的引用關係(文件、block、DataNode之間的映射信息);
數據會按期保存到本地磁盤(fsImage 文件和 edits 文件)。
二、NameNode 文件元數據的操做
DataNode 負責處理文件內容的讀寫請求,數據流不會通過 NameNode,而是從 NameNode 獲取數據真正要流向的 DataNode。
三、NameNode 副本
文件數據塊到底存放到哪些 DataNode 上,是由 NameNode 決定的,它會根據全局的狀況(機架感知機制),作出副本存放位置的決定。
四、NameNode 心跳機制
全權管理數據塊的複製,週期性的接受心跳和塊的狀態報告信息(包含該DataNode上全部數據塊的列表)
若接受到心跳信息,NameNode認爲DataNode工做正常,若是在10分鐘後還接受到不到DN的心跳,那麼NameNode認爲DataNode已經宕機 ,這時候NN準備要把DN上的數據塊進行從新的複製。 塊的狀態報告包含了一個DN上全部數據塊的列表,blocks report 每一個1小時發送一次.
提供真實文件數據的存儲服務。
DataNode 以數據塊的形式存儲 HDFS 文件
DataNode 響應 HDFS 客戶端的讀寫請求
DataNode 週期性向 NameNode 彙報心跳信息
DataNode 週期性向 NameNode 彙報數據塊信息
DataNode 週期性向 NameNode 彙報緩存數據塊信息
版權聲明
出處:博客園-瘦風的南牆(https://www.cnblogs.com/shoufeng)
感謝閱讀,公衆號 「瘦風的南牆」 ,手機端閱讀更佳,還有其餘福利和心得輸出,歡迎掃碼關注🤝
本文版權歸博主全部,歡迎轉載,但 [必須在頁面明顯位置標明原文連接],不然博主保留追究相關人士法律責任的權利。