Hadoop HDFS 教程(一)介紹

這個(gè)Hadoop HDFS教程的目標(biāo)是教會(huì)你,什么是HDFS, 什么是不同節(jié)點(diǎn),在HDFS中數(shù)據(jù)是如何存儲(chǔ)的,HDFS的結(jié)構(gòu)和HDFS的一些特點(diǎn),比如分布式存儲(chǔ),容錯(cuò)能力,可用性高和依懶性高和一些關(guān)于塊的知識(shí)等等。在HDFS教程中也會(huì)討論一些HDFS的基本操作,比如怎么讀和寫(xiě)來(lái)自HDFS和Rack的感知數(shù)據(jù)。這套Hadoop HDFS教程的目的是涵蓋所有的概念在分布式系統(tǒng)中。

2.HDFS教程--介紹
分布式文件系統(tǒng) -- HDFS是可靠度最高的文件存儲(chǔ)系統(tǒng)。HDFS是為存儲(chǔ)在集群上運(yùn)行的的文件存儲(chǔ)系統(tǒng)。它設(shè)計(jì)的原則是更趨向于少量的大文件,而不是大量的小文件。Hadoop HDFS同時(shí)提供容錯(cuò)存儲(chǔ)層和其他的組件。HDFS復(fù)制數(shù)據(jù)可以幫助我們?nèi)?shí)現(xiàn)這個(gè)特點(diǎn)。即是硬件失敗,它也可以可靠地存儲(chǔ)數(shù)據(jù)。它為應(yīng)用數(shù)據(jù)平行提供高吞吐量的數(shù)據(jù)訪問(wèn)。

3.HDFS 節(jié)點(diǎn)
正如我們所知,Hadoop以雇主-奴隸的方式工作,HDFS也同時(shí)包含兩個(gè)類型的節(jié)點(diǎn)。他們?cè)诩褐蟹謩e是namenodes 和datanodes。

3.1 HDFS Master(Namenode)
名節(jié)點(diǎn)為客戶端調(diào)節(jié)可以訪問(wèn)的文件。它負(fù)責(zé)維護(hù),管理和分配任務(wù)給slave節(jié)點(diǎn)。NameNode執(zhí)行文件系統(tǒng)命名空間的操作,比如,打開(kāi),關(guān)閉和重命名地址跟路徑。它應(yīng)該部署在可靠的硬件上。

3.2 HDFS Slave(Datenode)
在分布式文件系統(tǒng)中有大量的努力節(jié)點(diǎn)負(fù)責(zé)管理存儲(chǔ)數(shù)據(jù)。這些奴隸節(jié)點(diǎn)才是真正相應(yīng)客戶端讀寫(xiě)請(qǐng)求的節(jié)點(diǎn)。他們還根據(jù)來(lái)自namenode的指令塊,進(jìn)行創(chuàng)建,刪除和復(fù)制。他們復(fù)制自身給其他的數(shù)據(jù)節(jié)點(diǎn),并繼續(xù)處理,直到被規(guī)定的副本數(shù)量被創(chuàng)建完畢。數(shù)據(jù)節(jié)點(diǎn)可以被部署在硬件架子上,但是不必非要部署在非常可靠地機(jī)器上。

4.Hadoop HDFS的守護(hù)進(jìn)程
在HDFS數(shù)據(jù)存儲(chǔ)進(jìn)程中有兩個(gè)守護(hù)進(jìn)程
Namenode:是在所有主人節(jié)點(diǎn)中運(yùn)行的守護(hù)進(jìn)程,Namenode存儲(chǔ)元數(shù)據(jù)比如,文件名,block的數(shù)量,副本的數(shù)量,塊的位置,塊的ID等等。該數(shù)據(jù)在主內(nèi)存中可用以便快速的檢索數(shù)據(jù)。在本地磁盤(pán)中,元數(shù)據(jù)的副本可用于持久性。所以,名節(jié)點(diǎn)的內(nèi)存應(yīng)該配置較高。

Datanode:這是運(yùn)行在節(jié)點(diǎn)上的守護(hù)進(jìn)程,這些才是真正存儲(chǔ)數(shù)據(jù)的工作節(jié)點(diǎn)。

  1. 數(shù)據(jù)在HDFS中的存儲(chǔ)

當(dāng)任何文件寫(xiě)入HDFS中時(shí),它都會(huì)被打散分成小塊兒存儲(chǔ),這就是所謂的Block. HDFS給block設(shè)置了默認(rèn)大小為128MB,同時(shí)這個(gè)大小可以根據(jù)需求而增加。這些blocks以分布式的方式存儲(chǔ)在HDFS系統(tǒng)中的不同節(jié)點(diǎn)上。這樣的就為MapReduce提供了一種機(jī)制,可以在集群中平行的產(chǎn)生數(shù)據(jù)。
data-storage-in-hdfs-tutorial.png

對(duì)于每個(gè)block的多重復(fù)制是橫跨集群在不同節(jié)點(diǎn)下的復(fù)制。這些復(fù)制都是重復(fù)的數(shù)據(jù)。在默認(rèn)情況下,HDFS的默認(rèn)因子為3。這樣的設(shè)置為系統(tǒng)提供了容錯(cuò)性,可靠性和高可依賴性。

總結(jié)一下,大文件在HDFS中被分解成n個(gè)小的blocks.每個(gè)block以分布式的方式實(shí)現(xiàn)在集群上的存儲(chǔ),同時(shí)每個(gè)block對(duì)于自身的復(fù)制是夸集群進(jìn)行的。

  1. Hadoop HDFS中的機(jī)架感知
    由于Hadoop通常的是運(yùn)行在一個(gè)集群中,這就對(duì)機(jī)架數(shù)量有了要求。NameNode將不同的Block復(fù)制在不同的機(jī)架上用以提高系統(tǒng)的容錯(cuò)性。NameNode嘗試著每個(gè)機(jī)架上都復(fù)制一個(gè)自己,這樣就算一個(gè)機(jī)架不工作了,系統(tǒng)仍然可以高效的運(yùn)行。優(yōu)化存儲(chǔ)位置是HDFS與現(xiàn)階段的分布式系統(tǒng)區(qū)分開(kāi)來(lái)的標(biāo)志。機(jī)架感知與復(fù)制規(guī)則是用來(lái)提高系統(tǒng)的容錯(cuò)性,可靠性,高可用性和網(wǎng)絡(luò)帶寬利用率。

  2. HDFS架構(gòu)
    一個(gè)單獨(dú)的NameNode節(jié)點(diǎn)用來(lái)存儲(chǔ)元數(shù)據(jù)和很多的NameNode用來(lái)做實(shí)際存儲(chǔ)工作。這些節(jié)點(diǎn)被分配到在集群中的不同的機(jī)架上。在讀寫(xiě)文件中,客戶端需要訪問(wèn)NameNode。HDFS應(yīng)用需要一個(gè)一次寫(xiě)入多次讀取的訪問(wèn)模型。一旦文件的被創(chuàng)建和寫(xiě)入就不能被編輯。


    Hadoop-HDFS-architecture-tutorial.png

    NameNode儲(chǔ)存元數(shù)據(jù), DataNode儲(chǔ)存實(shí)際的數(shù)據(jù)。客戶端在執(zhí)行任何一個(gè)任務(wù)的時(shí)候都學(xué)要訪問(wèn)數(shù)據(jù)節(jié)點(diǎn),可以說(shuō)數(shù)據(jù)節(jié)點(diǎn)是整個(gè)集群中的中心環(huán)節(jié)。

大量在集群中的datanodes被HDFS存儲(chǔ)在本地磁盤(pán)里。DataNodes定時(shí)給發(fā)送心跳信息給Namenode,來(lái)確保它是否在線。它同時(shí)也給不同的DataNode傳遞自己身數(shù)據(jù),直到復(fù)制因子達(dá)到3的時(shí)候完成。

  1. Hadoop HDFS的特點(diǎn)

a.分布式存儲(chǔ)
由于HDFS以分布式的方式存儲(chǔ)數(shù)據(jù),它把數(shù)據(jù)分成小塊,存儲(chǔ)在集群中的不同節(jié)點(diǎn)上,在這種方式中,Hadoop提供一個(gè)map reduce的方式存儲(chǔ)大數(shù)據(jù)的子集數(shù)據(jù),就是把它打成小塊兒去存儲(chǔ)他們。MapReduce是Hadoop的核心,但是HDFS是提供這些能力的基礎(chǔ)。

b.Blocks
由于HDFS把大的數(shù)據(jù)文件分成小塊兒--Blocks. Block是文件系統(tǒng)中最小的數(shù)據(jù)單元??蛻舳撕凸芾韱T不需要控制這些小塊存儲(chǔ)在什么位置上,Namenode將決定這類事情。

HDFS默認(rèn)的塊兒大小是128MB,當(dāng)然這個(gè)大小可以增加。這不想OS文件操作系統(tǒng),它的block大小只有4KB.

如果數(shù)據(jù)大小比塊大小小的話,block大小就會(huì)等于數(shù)據(jù)大小。例如一個(gè)數(shù)據(jù)的大小為129MB,則系統(tǒng)會(huì)為這個(gè)數(shù)據(jù)創(chuàng)建兩個(gè)Block一個(gè)大小為128MB,另一個(gè)大小只為1MB. 這樣的設(shè)置可以保證存儲(chǔ)空間不被浪費(fèi)。

將Block大小設(shè)置為128MB有兩個(gè)好處,一是解決數(shù)據(jù)搜尋時(shí)間。而是mapper可以一次性處理一個(gè)塊兒的數(shù)據(jù)。

在分布式文件系統(tǒng)中,一個(gè)文件被分割成塊兒,同時(shí)每個(gè)塊又被復(fù)制成3塊。

c.復(fù)制性
Hadoop HDFS為Blocks創(chuàng)建副本。所有的blocks副本都被夸集群創(chuàng)建,它通常在每個(gè)機(jī)架上都會(huì)創(chuàng)建一個(gè)副本。

Datanode根據(jù)機(jī)架被組織起來(lái),所有在一個(gè)機(jī)架上的所有節(jié)點(diǎn)被一個(gè)開(kāi)關(guān)控制,所以一但關(guān)閉,整個(gè)機(jī)架都不工作了。同時(shí)數(shù)據(jù)可以被來(lái)自其它機(jī)架的機(jī)器所訪問(wèn)。具體關(guān)于機(jī)架的細(xì)節(jié),我會(huì)在以后機(jī)架感知章節(jié)提出。

在前文中提到過(guò),默認(rèn)的復(fù)制因子是3,修改這個(gè)因子可以通過(guò)修改配置文件hdfs-site.xml去實(shí)現(xiàn)。

d.高度可用性
復(fù)制數(shù)據(jù)塊兒和跨集群存儲(chǔ)可以提供高數(shù)據(jù)可用性,即是網(wǎng)絡(luò)連接和節(jié)點(diǎn)或者硬件壞了,我們也可以輕松的從其它3個(gè)節(jié)點(diǎn)獲取數(shù)據(jù)。

e. 數(shù)據(jù)可靠性

g. 高吞吐量的訪問(wèn)數(shù)據(jù)
Hadoop分布式文件系統(tǒng)提供高吞吐量的訪問(wèn)數(shù)據(jù)。吞吐量是單位時(shí)間內(nèi)完成工作的數(shù)量,它被用來(lái)描述,系統(tǒng)訪問(wèn)數(shù)據(jù)有多快,這個(gè)指標(biāo)經(jīng)常被用于測(cè)試系統(tǒng)的表現(xiàn)。當(dāng)我們想執(zhí)行一個(gè)任務(wù)或者一個(gè)動(dòng)作的時(shí)候,這個(gè)任務(wù)被分解給不同的系統(tǒng)。所以所有的系統(tǒng)都會(huì)被平行的執(zhí)行它們自己部分。這就使工作會(huì)在很短的時(shí)間內(nèi)完成。利用這點(diǎn),HDFS給予了非常棒的吞吐量。平行讀取數(shù)據(jù)的方式,使我們降低了讀取超大數(shù)據(jù)所需的時(shí)間。

  1. Hadoop HDFS 操作

在Hadoop中,我們需要通過(guò)編程或命令行方式跟文件系統(tǒng)進(jìn)行交互。

Hadoop 分布式文件系統(tǒng)和Linux文件系統(tǒng)有諸多相似之處。所以我們幾乎可以將用于本地文件系統(tǒng)的所有操作命令都用到HDFS文件系統(tǒng)操作中來(lái),比如,創(chuàng)建一個(gè)路徑,復(fù)制一個(gè)文件,更改權(quán)限等等。

它也可以控制權(quán)限,例如,給不同的用戶,不同的分組,創(chuàng)建不同的讀寫(xiě)權(quán)限。

我們可以通過(guò)用瀏覽器訪問(wèn)http://master-IP:50070去訪問(wèn)文件系統(tǒng),通過(guò)訪問(wèn)上述地址,你可以得到集群信息,比如,磁盤(pán)使用情況,活動(dòng)節(jié)點(diǎn)的數(shù)量,死節(jié)點(diǎn)的數(shù)量等等。

9.1 HDFS讀取操作

當(dāng)客戶端想讀取一個(gè)文件的時(shí)候,客戶端需要和NameNode節(jié)點(diǎn)進(jìn)行交互,因?yàn)樗俏ㄒ淮鎯?chǔ)數(shù)據(jù)節(jié)點(diǎn)元數(shù)據(jù)的節(jié)點(diǎn)。NameNode規(guī)定奴隸節(jié)點(diǎn)的存儲(chǔ)數(shù)據(jù)的地址跟位置。客戶端通過(guò)NameNode找到它需要數(shù)據(jù)的節(jié)點(diǎn),然后直接在找到DataNode中進(jìn)行讀操作??紤]到安全和授權(quán)的目的,NameNode給客戶端提供token,這個(gè)token需要出示給DateNote進(jìn)行熱證,認(rèn)證通過(guò)后,才可以讀取文件。

由于HDFS進(jìn)行讀操作的時(shí)候需要需要訪問(wèn)NameNode節(jié)點(diǎn),所以客戶端需要先通過(guò)接口發(fā)送一個(gè)請(qǐng)求,然后NameNode節(jié)點(diǎn)在返回一個(gè)文件位置。在這個(gè)過(guò)程中,NameNode負(fù)責(zé)檢查,該客戶端是否有足夠的權(quán)限去訪問(wèn)這組數(shù)據(jù)?如果擁有權(quán)限,NameNode會(huì)將文件儲(chǔ)存路徑分享給該客戶端,與此同時(shí),namenode也會(huì)將用于權(quán)限檢查的token分享給客戶端。

當(dāng)該客戶端去數(shù)據(jù)節(jié)點(diǎn)讀文件的時(shí)候,在檢查token之后,數(shù)據(jù)節(jié)點(diǎn)允許客戶端讀特定的block. 一個(gè)客戶端打開(kāi)一個(gè)輸入流開(kāi)始從DataNode讀取數(shù)據(jù),然后,客戶端直接從數(shù)據(jù)節(jié)點(diǎn)讀取數(shù)據(jù)。

如果在讀取數(shù)據(jù)期間datanodes突然廢了,這個(gè)客戶端會(huì)繼續(xù)訪問(wèn)Namenode, 這是NameNode會(huì)給出這個(gè)數(shù)據(jù)節(jié)點(diǎn)副本的所在位置。

9.2 HDFS 寫(xiě)操作

我們知道讀取文件需要客戶端訪問(wèn)Namenode. 相似的寫(xiě)文件也需要客戶端與NameNode進(jìn)行交互。NameNode需要提供可供寫(xiě)入數(shù)據(jù)的奴隸節(jié)點(diǎn)的地址。

當(dāng)客戶端完成在block中寫(xiě)數(shù)據(jù)的操作時(shí),這個(gè)奴隸節(jié)點(diǎn)開(kāi)始復(fù)制自身給其他奴隸節(jié)點(diǎn),知道完成擁有3個(gè)副本。當(dāng)然這是在副本因子為3的時(shí)候的操作。當(dāng)復(fù)制完成后,它會(huì)給客戶端發(fā)一個(gè)通知,同樣的這個(gè)授權(quán)步驟也和讀取數(shù)據(jù)時(shí)一樣。

當(dāng)一個(gè)客戶端需要寫(xiě)入數(shù)據(jù)的時(shí)候,它需要跟NameNode進(jìn)行交互,客戶端發(fā)送一個(gè)請(qǐng)求給NameNode, NameNode同時(shí)返回一個(gè)可寫(xiě)的地址給客戶端。

NameNode分享可寫(xiě)數(shù)據(jù)的位置。然后客戶端跟特定的DataNode進(jìn)行交互,將數(shù)據(jù)直接寫(xiě)入進(jìn)去。當(dāng)數(shù)據(jù)被寫(xiě)入和被復(fù)制的過(guò)程完成后,datanode發(fā)送給客戶端一個(gè)通知,告知數(shù)據(jù)寫(xiě)入已經(jīng)完成。

我們已經(jīng)討論過(guò)在Hadoop HDFS系統(tǒng)中怎么寫(xiě)入文件,客戶端第一步需要跟NameNode進(jìn)行交互,然后向數(shù)據(jù)節(jié)點(diǎn)中寫(xiě)入數(shù)據(jù)。

當(dāng)客戶端完成寫(xiě)入第一個(gè)block時(shí),第一個(gè)數(shù)據(jù)節(jié)點(diǎn)會(huì)復(fù)制一樣的block給另一個(gè)DataNode, 然后在這個(gè)數(shù)據(jù)節(jié)點(diǎn)完成接收block之后,它開(kāi)始復(fù)制這些blocks給第三個(gè)數(shù)據(jù)節(jié)點(diǎn)。第三個(gè)數(shù)據(jù)節(jié)點(diǎn)發(fā)送通知給第二個(gè)數(shù)據(jù)節(jié)點(diǎn),第二個(gè)數(shù)據(jù)節(jié)點(diǎn)在發(fā)送通知給第一個(gè)數(shù)據(jù)節(jié)點(diǎn),第一個(gè)數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)最后通知客戶端。不論復(fù)制因子是多少,客戶端只發(fā)送一個(gè)數(shù)據(jù)副本給DataNode, DataNode完成后續(xù)所有任務(wù)的復(fù)制工作。所以,在Hadoop中寫(xiě)入文件并不十分消耗系統(tǒng)資源,因?yàn)樗梢栽诙鄠€(gè)數(shù)據(jù)點(diǎn)將blocks平行寫(xiě)入。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先,我們?cè)谑褂们跋瓤纯碒DFS是什麼?這將有助于我們是以后的運(yùn)維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,459評(píng)論 0 2
  • 先思考問(wèn)題 我們處在一個(gè)大數(shù)據(jù)的時(shí)代已經(jīng)是不爭(zhēng)的事實(shí),這主要表現(xiàn)在數(shù)據(jù)源多且大,如互聯(lián)網(wǎng)數(shù)據(jù),人們也認(rèn)識(shí)到數(shù)據(jù)里往...
    墻角兒的花閱讀 7,664評(píng)論 0 9
  • 秋葉情 秋天,一個(gè)充滿著韻味的季節(jié),一個(gè)帶著些許凄涼與惆悵的季節(jié)…… 一夜秋...
    阿瀾手工布藝陶藝粘土閱讀 292評(píng)論 0 0
  • 別夢(mèng)凄,青沙明月江渚依,露重衣單霧鬢濕。 荷開(kāi)榮枯經(jīng)幾時(shí)。霜染白,關(guān)山不隔重相憶。
    陽(yáng)春閱讀 253評(píng)論 0 4
  • 這本書(shū)是作者風(fēng)笑天教授結(jié)合國(guó)內(nèi)外社會(huì)研究方法的發(fā)展趨勢(shì)和高等學(xué)校社會(huì)研究方法課程教學(xué)的實(shí)際,對(duì)社會(huì)研究方法的...
    關(guān)小昂閱讀 5,853評(píng)論 4 17

友情鏈接更多精彩內(nèi)容