學(xué)習(xí)Hadoop,兩個(gè)東西肯定是繞不過,MapReduce和HDFS,上一篇博客介紹了MapReduce的處理流程,這一篇博客就來學(xué)習(xí)一下HDFS。

  HDFS是一個(gè)分布式的文件系統(tǒng),就是將多臺(tái)機(jī)器的存儲(chǔ)當(dāng)做一個(gè)文件系統(tǒng)來使用,因?yàn)樵诖髷?shù)據(jù)的情景下,單機(jī)的存儲(chǔ)量已經(jīng)完全不夠用了,所以采取分布式的方法來擴(kuò)容,解決本地文件系統(tǒng)在文件大小、文件數(shù)量、打開文件數(shù)等的限制問題。我們首先來看一下HDFS的架構(gòu)

HDFS架構(gòu)

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

  從上圖可以看到,HDFS的主要組成部分為Namenode、Datanodes、Client,還有幾個(gè)名詞:Block、Metadata、Replication 、Rack,它們分別是什么意思呢?

  對于分布式的文件系統(tǒng),數(shù)據(jù)存儲(chǔ)在很多的機(jī)器上,而Datanode代表的就是這些機(jī)器,是數(shù)據(jù)實(shí)際存儲(chǔ)的地方,數(shù)據(jù)存好之后,我們需要知道它們具體存在哪一個(gè)Datanode上,這就是Namenode做的工作,它記錄著元數(shù)據(jù)信息(也就是Metadata,其主要內(nèi)容就是哪個(gè)數(shù)據(jù)塊存在哪個(gè)Datanode上的哪個(gè)目錄下,這也是為什么HDFS不適合存大量小文件的原因,因?yàn)?為了響應(yīng)速度,Namenode 把文件系統(tǒng)的元數(shù)據(jù)放置在內(nèi)存中,所以文件系統(tǒng)所能容納的文件數(shù)目是由 Namenode 的內(nèi)存大小來決定。一般來說,每一個(gè)文件、文件夾和 Block 需要占據(jù) 150 字節(jié)左右的空間,如果存100 萬個(gè)小文件,至少需要 300MB內(nèi)存,但這么多小文件實(shí)際卻沒有存太多數(shù)據(jù),這樣就太浪費(fèi)內(nèi)存了),有了元數(shù)據(jù)信息,我們就能通過Namenode來查到數(shù)據(jù)塊的具體位置了,而與Namenode打交道的工具就是Client,Client給我們用戶提供存取數(shù)據(jù)的接口,我們可以通過Client進(jìn)行數(shù)據(jù)存取的工作。

網(wǎng)友評論