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