HDFS的優(yōu)缺點以及如何存儲數(shù)據(jù)
HDFS是Hadoop的分布式文件系統(tǒng),是一個高度容錯性的系統(tǒng),適合運行在通用硬件上,適合部署在廉價的機器上。HDFS能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應用。
HDFS 具有以下優(yōu)點
1、高容錯性數(shù)據(jù)自動保存多個副本。它通過增加副本的形式,提高容錯性。某一個副本丟失以后,它可以自動恢復,這是由 HDFS 內(nèi)部機制實現(xiàn)的。
2、適合批處理,是通過移動計算而不是移動數(shù)據(jù)。它會把數(shù)據(jù)位置暴露給計算框架。
3、適合大數(shù)據(jù)處理,處理數(shù)據(jù)達到 GB、TB、甚至PB級別的數(shù)據(jù)。能夠處理百萬規(guī)模以上的文件數(shù)量,數(shù)量相當之大。能夠處理10K節(jié)點的規(guī)模。
4、流式文件訪問一次寫入,多次讀取。文件一旦寫入不能修改,只能追加。它能保證數(shù)據(jù)的一致性。
5、可構(gòu)建在廉價機器上它通過多副本機制,提高可靠性。它提供了容錯和恢復機制。比如某一個副本丟失,可以通過其它副本來恢復。
當然 HDFS 也有它的劣勢,并不適合所有的場合
1、低延時數(shù)據(jù)訪問比如毫秒級的來存儲數(shù)據(jù),這是不行的,它做不到。它適合高吞吐率的場景,就是在某一時間內(nèi)寫入大量的數(shù)據(jù)。但是它在低延時的情況下是不行的,比如毫秒級以內(nèi)讀取數(shù)據(jù),這樣它是很難做到的。
2、小文件存儲存儲大量小文件(這里的小文件是指小于HDFS系統(tǒng)的Block大小的文件(默認64M))的話,它會占用 NameNode大量的內(nèi)存來存儲文件、目錄和塊信息。這樣是不可取的,因為NameNode的內(nèi)存總是有限的。小文件存儲的尋道時間會超過讀取時間,它違反了HDFS的設(shè)計目標。
3、并發(fā)寫入、文件隨機修改一個文件只能有一個寫,不允許多個線程同時寫。僅支持數(shù)據(jù) append(追加),不支持文件的隨機修改。
HDFS 如何儲存數(shù)據(jù)
HDFS 采用Master/Slave的架構(gòu)來存儲數(shù)據(jù),這種架構(gòu)主要由四個部分組成,分別為HDFS Client、NameNode、DataNode和Secondary NameNode。下面我們分別介紹這四個組成部分。
1、Client:就是客戶端。文件切分。文件上傳 HDFS 的時候,Client 將文件切分成 一個一個的Block,然后進行存儲。與 NameNode 交互,獲取文件的位置信息。與 DataNode 交互,讀取或者寫入數(shù)據(jù)。Client 提供一些命令來管理 HDFS,比如啟動或者關(guān)閉HDFS。Client 可以通過一些命令來訪問 HDFS。
2、NameNode:就是 master,它是一個主管、管理者。管理 HDFS 的名稱空間管理數(shù)據(jù)塊(Block)映射信息配置副本策略處理客戶端讀寫請求。
3、DataNode:就是Slave。NameNode 下達命令,DataNode 執(zhí)行實際的操作。存儲實際的數(shù)據(jù)塊。執(zhí)行數(shù)據(jù)塊的讀/寫操作。
4、Secondary NameNode:并非 NameNode 的熱備。當NameNode 掛掉的時候,它并不能馬上替換 NameNode 并提供服務(wù)。輔助 NameNode,分擔其工作量。定期合并 fsimage和fsedits,并推送給NameNode。在緊急情況下,可輔助恢復 NameNode。