您好,登錄后才能下訂單哦!
小編給大家分享一下HDFS基本概念有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
源自于Google的GFS論文 發(fā)表于2003年10月 HDFS是GFS克隆版 ,HDFS的全稱是Hadoop Distributed File System易于擴(kuò)展的分布式文件系統(tǒng),運(yùn)行在大量普通廉價(jià)機(jī)器上,提供容錯(cuò)機(jī)制,為大量用戶提供性能不錯(cuò)的文件存取服務(wù)
整個(gè)Hadoop的體系結(jié)構(gòu)主要是通過HDFS來實(shí)現(xiàn)對(duì)分布式存儲(chǔ)的底層支持,并通過MR來實(shí)現(xiàn)對(duì)分布式并行任務(wù)處理的程序支持。
HDFS采用主從(Master/Slave)結(jié)構(gòu)模型,一個(gè)HDFS集群是由一個(gè)NameNode和若干個(gè)DataNode組成的(在最新的Hadoop2.2版本已經(jīng)實(shí)現(xiàn)多個(gè)NameNode的配置-這也是一些大公司通過修改hadoop源代碼實(shí)現(xiàn)的功能,在最新的版本中就已經(jīng)實(shí)現(xiàn)了)。NameNode作為主服務(wù)器,管理文件系統(tǒng)命名空間和客戶端對(duì)文件的訪問操作。DataNode管理存儲(chǔ)的數(shù)據(jù)。HDFS支持文件形式的數(shù)據(jù)。
從內(nèi)部來看,文件被分成若干個(gè)數(shù)據(jù)塊,這若干個(gè)數(shù)據(jù)塊存放在一組DataNode上。NameNode執(zhí)行文件系統(tǒng)的命名空間,如打開、關(guān)閉、重命名文件或目錄等,也負(fù)責(zé)數(shù)據(jù)塊到具體DataNode的映射。DataNode負(fù)責(zé)處理文件系統(tǒng)客戶端的文件讀寫,并在NameNode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)庫(kù)的創(chuàng)建、刪除和復(fù)制工作。NameNode是所有HDFS元數(shù)據(jù)的管理者,用戶數(shù)據(jù)永遠(yuǎn)不會(huì)經(jīng)過NameNode。
自動(dòng)快速檢測(cè)應(yīng)對(duì)硬件錯(cuò)誤
流式訪問數(shù)據(jù)
移動(dòng)計(jì)算比移動(dòng)數(shù)據(jù)本身更劃算
簡(jiǎn)單一致性模型
異構(gòu)平臺(tái)可移植
移動(dòng)計(jì)算和移動(dòng)數(shù)據(jù)
在學(xué)習(xí)大數(shù)據(jù)的時(shí)候接觸了移動(dòng)數(shù)據(jù)和移動(dòng)計(jì)算這兩種聯(lián)系緊密而又有很大不同的概念,
其中移動(dòng)計(jì)算也叫做本地計(jì)算。在以前的數(shù)據(jù)處理中時(shí)使用的
移動(dòng)數(shù)據(jù),其實(shí)就是將需要處理的數(shù)據(jù)傳輸?shù)酱娣挪煌幚頂?shù)據(jù)方式邏輯的各個(gè)節(jié)點(diǎn)上。這樣做的效率很低,特別
是大數(shù)據(jù)中的數(shù)據(jù)量是很大的,至少都是GB以上,更大的是TB、PB甚至更大,而且磁盤I/O、網(wǎng)絡(luò)I/O的效率是很
低的,這樣處理起來就需要很長(zhǎng)的時(shí)間,遠(yuǎn)遠(yuǎn)不能滿足我們的要求。而移動(dòng)計(jì)算就出現(xiàn)了。
移動(dòng)計(jì)算,也叫做本地計(jì)算,是數(shù)據(jù)就存放在節(jié)點(diǎn)上不再變動(dòng),而是將處理邏輯程序傳輸?shù)礁鱾€(gè)數(shù)據(jù)節(jié)點(diǎn)上。由于
處理程序的大小肯定不會(huì)特別的大,這樣就可以實(shí)現(xiàn)很快將程序傳輸?shù)酱娣艛?shù)據(jù)的各個(gè)節(jié)點(diǎn)上去,然后本地執(zhí)行處
理數(shù)據(jù),效率高?,F(xiàn)在的大數(shù)據(jù)處理技術(shù)都是采用這種方式。
HDFS模型例子:
班級(jí)中有這么多筆記本其實(shí)就可以組成一個(gè)集群是吧,然后隔壁班需要將文件存儲(chǔ)到筆記本中,一個(gè)一個(gè)進(jìn)來隨便找
一個(gè)筆記本存儲(chǔ),走了之后,過了一段時(shí)間,需要將文件取走,但是每一個(gè)人都不知道自己上傳到那個(gè)服務(wù)器上了,那么每
臺(tái)都需要找,,這樣一來操作的復(fù)雜度就高了,那么需要怎么改善這個(gè)問題?
犧牲一下,我的筆記本不存數(shù)據(jù)了,專門記錄存儲(chǔ)的的過程(NameNode),第一個(gè)人進(jìn)來先找我,說我要存儲(chǔ)文件,然后我
說去第一臺(tái)電腦存吧,然后就去第一臺(tái)電腦存儲(chǔ)了,它在存儲(chǔ)文件的時(shí)候,上傳文件需要等幾分鐘,然后第二個(gè)人進(jìn)來了,
也要存文件,然后我說你去第二臺(tái)電腦上存儲(chǔ),那么我與存儲(chǔ)人之間的交互信息量大嗎?不大,是吧我的主要作用就是告
訴對(duì)方去哪存儲(chǔ), 第一臺(tái)電腦在傳第二臺(tái)電腦也再傳,是不是同時(shí)在傳,那么這就相當(dāng)于負(fù)載了,那么他們?cè)谏蟼鞯臅r(shí)候
是獨(dú)立的資源,而不會(huì)去搶占資源.
問題:什么時(shí)候記錄這個(gè)存儲(chǔ)記錄?
是在一開始對(duì)話的時(shí)候我就記錄,還是在當(dāng)他傳完數(shù)據(jù)后記錄?
一定是傳完數(shù)據(jù)后記錄,這是為了數(shù)據(jù)的一致性
上傳成功后,是上傳人員告訴我上傳成功還是電腦給發(fā)送信息上傳成功
一定是電腦發(fā)送信息上傳成功,因?yàn)橹挥须娔X去認(rèn)了上傳成功了有文件有記錄就OK
是不是很簡(jiǎn)單,很輕松啊,要是早幾年聽是不是HDFS就是你開發(fā)的了
優(yōu)點(diǎn):
高可靠性:Hadoop按位存儲(chǔ)和處理數(shù)據(jù)的能力值得人們信賴;
高擴(kuò)展性:Hadoop是在可用的計(jì)算機(jī)集簇間分配數(shù)據(jù)并完成計(jì)算任務(wù)的,這些集簇可以方便地?cái)U(kuò)展到數(shù)以千計(jì)的節(jié)點(diǎn)中。
高效性:Hadoop能夠在節(jié)點(diǎn)之間動(dòng)態(tài)地移動(dòng)數(shù)據(jù),并保證各個(gè)節(jié)點(diǎn)的動(dòng)態(tài)平衡,因此處理速度非???。
高容錯(cuò)性:Hadoop能夠自動(dòng)保存數(shù)據(jù)的多個(gè)副本,并且能夠自動(dòng)將失敗的任務(wù)重新分配。
缺點(diǎn):
不適合低延遲數(shù)據(jù)訪問。
無法高效存儲(chǔ)大量小文件。
不支持多用戶寫入及任意修改文件。
分而治之:將大文件、大批量文件,分布式存放在大量服務(wù)器上,以便于采取分而治之的方式對(duì)海量數(shù)據(jù)進(jìn)行運(yùn)算分析;
為各類分布式運(yùn)算框架(如:mapreduce,spark,tez,……)提供數(shù)據(jù)存儲(chǔ)服務(wù)
hdfs更具體描述
首先,它是一個(gè)文件系統(tǒng),用于存儲(chǔ)文件,通過統(tǒng)一的命名空間——目錄樹來定位文件
其次,它是分布式的,由很多服務(wù)器聯(lián)合起來實(shí)現(xiàn)其功能,集群中的服務(wù)器有各自的角色;
HDFS中的文件在物理上是分塊存儲(chǔ)(block),塊的大小可以通過配置參數(shù)( dfs.blocksize)來規(guī)定,默認(rèn)大小在hadoop2.x版本中是128M,老版本中是64M。
HDFS文件系統(tǒng)會(huì)給客戶端提供一個(gè)統(tǒng)一的抽象目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
目錄結(jié)構(gòu)及文件分塊信息(元數(shù)據(jù))的管理由namenode節(jié)點(diǎn)承擔(dān)——namenode是HDFS集群主節(jié)點(diǎn),負(fù)責(zé)維護(hù)整個(gè)hdfs文件系統(tǒng)的目錄樹,以及每一個(gè)路徑(文件)所對(duì)應(yīng)的block塊信息(block的id,及所在的datanode服務(wù)器)。
文件的各個(gè)block的存儲(chǔ)管理由datanode節(jié)點(diǎn)承擔(dān)--- datanode是HDFS集群從節(jié)點(diǎn),每一個(gè)block都可以在多個(gè)datanode上存儲(chǔ)多個(gè)副本(副本數(shù)量也可以通過參數(shù)設(shè)置dfs.replication)。
基于內(nèi)存存儲(chǔ) :不會(huì)和磁盤發(fā)生交換只存在內(nèi)存中
這樣做的主要目的是為了快,但是內(nèi)存存儲(chǔ)的一個(gè)通病就是掉電易失
一旦斷電內(nèi)存中存儲(chǔ)的數(shù)據(jù)就什么都沒有了,所以就需要持久化了(有點(diǎn)打臉了因?yàn)槭切枰酱疟P中的存儲(chǔ))
NameNode持久化
NameNode的metadate信息在啟動(dòng)后會(huì)加載到內(nèi)存
存儲(chǔ)到磁盤中有兩種方法:
第一種:在某個(gè)時(shí)間點(diǎn)以類似于”拍快照”的形式將數(shù)據(jù)信息存儲(chǔ)到磁盤中
metadata存儲(chǔ)到磁盤文件名為”fsimage”,Block的位置信息不會(huì)保存到fsimage
若是回復(fù),需要等待DataNode重新匯報(bào)信息Block每副本位置(由DataNode上報(bào))
第二種:以日志的方式生成文件edit log記錄對(duì)metadata的操作日志
NameNode主要功能:
接受客戶端的讀寫服務(wù),收集DataNode匯報(bào)的Block列表信息
NameNode保存metadata信息包括
文件所屬權(quán)和權(quán)限,文件大小,時(shí)間(Block列表:Block偏移量),位置信息
DataNode是Block真正存儲(chǔ)的地方。DataNode的本地磁盤以文件形式存儲(chǔ)著Block信息。同時(shí)還存儲(chǔ)著Block的元數(shù)據(jù)信息文件。
元數(shù)據(jù)主要存儲(chǔ)MD5值 用來進(jìn)行驗(yàn)證
HDFS在啟動(dòng)時(shí),DataNode會(huì)向NameNode匯報(bào)block的信息。
DataNode通過向NameNode發(fā)送心跳保持與其聯(lián)系(3秒一次),如果NameNode 10分鐘沒有收到DataNode的心跳,則認(rèn)為其已經(jīng)lost,并復(fù)制其上的block到其它DataNode。
初看名字,你可能會(huì)以為SecondaryNameNode是NameNode的備份,實(shí)際上,SecondaryNameNode的主要作用并不是這個(gè),當(dāng)然它也可以用來做備份。
要了解SecondaryNameNode的作用,就不得不說一下HDFS的啟動(dòng)過程。
上面我們已經(jīng)提到了兩個(gè)文件fsimage和edits。fsimage是當(dāng)前HDFS系統(tǒng)的快照。edits記錄了對(duì)HDFS的各種操作日志。
假設(shè):有一個(gè)集群跑了10年一點(diǎn)問題都沒有,fsimage是十年前的一個(gè)點(diǎn),為了不影響性能,只記錄了一次,而edits一直在記錄日子,吧唧,服務(wù)器宕機(jī)了,重啟恢復(fù),
HDFS在啟動(dòng)的時(shí)候,根據(jù)fsimage和edit log日志可以得到系統(tǒng)當(dāng)前最新的狀態(tài),并產(chǎn)生一個(gè)新的fsimage文件。這樣的啟動(dòng)時(shí)很耗時(shí)間的。尤其是當(dāng)edit log文件非常大的時(shí)候,合并會(huì)占用很多額外的時(shí)間。
以上是“HDFS基本概念有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。