這篇文章主要為大家展示了“HDFS基本概念是什么”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“HDFS基本概念是什么”這篇文章吧。
為鄧州等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及鄧州網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、鄧州網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
一、HDFS基本概念
1、數(shù)據(jù)塊
HDFS默認(rèn)的最基本的存儲(chǔ)單位是64M的數(shù)據(jù)塊,這個(gè)數(shù)據(jù)塊可以理解和一般的文件里面的分塊是一樣的
2、元數(shù)據(jù)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)
元數(shù)據(jù)節(jié)點(diǎn)(namenode)用來(lái)管理文件系統(tǒng)的命名空間,它將所有的文件和文件夾的元數(shù)據(jù)保存在一個(gè)文件系統(tǒng)樹(shù)中。
數(shù)據(jù)節(jié)點(diǎn)(datanode)就是用來(lái)存儲(chǔ)數(shù)據(jù)文件的。
從元數(shù)據(jù)節(jié)點(diǎn)(secondarynamenode)不是我們所想象的元數(shù)據(jù)節(jié)點(diǎn)的備用節(jié)點(diǎn),其實(shí)它主要的功能是主要功能就是周期性將元數(shù)據(jù)節(jié)點(diǎn)的命名空間鏡像文件和修改日志合并,以防日志文件過(guò)大。
這里先來(lái)弄清楚這個(gè)三種節(jié)點(diǎn)的關(guān)系吧!其實(shí)元數(shù)據(jù)節(jié)點(diǎn)上存儲(chǔ)的東西就相當(dāng)于一般文件系統(tǒng)中的目錄,也是有命名空間的映射文件以及修改的日志,只是分布式文件系統(tǒng)就將數(shù)據(jù)分布在各個(gè)機(jī)器上進(jìn)行存儲(chǔ)罷了,下面你看看這幾張說(shuō)明圖應(yīng)該就能明白了!
Namenode與secondary namenode之間的進(jìn)行checkpoint的過(guò)程。
3、HDFS中的數(shù)據(jù)流
讀文件
客戶端(client)用FileSystem的open()函數(shù)打開(kāi)文件,DistributedFileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),得到文件的數(shù)據(jù)塊信息。對(duì)于每一個(gè)數(shù)據(jù)塊,元數(shù)據(jù)節(jié)點(diǎn)返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn)的地址。DistributedFileSystem返回FSDataInputStream給客戶端,用來(lái)讀取數(shù)據(jù)??蛻舳苏{(diào)用stream的read()函數(shù)開(kāi)始讀取數(shù)據(jù)。DFSInputStream連接保存此文件第一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。Data從數(shù)據(jù)節(jié)點(diǎn)讀到客戶端(client),當(dāng)此數(shù)據(jù)塊讀取完畢時(shí),DFSInputStream關(guān)閉和此數(shù)據(jù)節(jié)點(diǎn)的連接,然后連接此文件下一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。當(dāng)客戶端讀取完畢數(shù)據(jù)的時(shí)候,調(diào)用FSDataInputStream的close函數(shù)。
整個(gè)過(guò)程就是如圖所示:
寫(xiě)文件
客戶端調(diào)用create()來(lái)創(chuàng)建文件,DistributedFileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點(diǎn),在文件系統(tǒng)的命名空間中創(chuàng)建一個(gè)新的文件。元數(shù)據(jù)節(jié)點(diǎn)首先確定文件原來(lái)不存在,并且客戶端有創(chuàng)建文件的權(quán)限,然后創(chuàng)建新文件。DistributedFileSystem返回DFSOutputStream,客戶端用于寫(xiě)數(shù)據(jù)。客戶端開(kāi)始寫(xiě)入數(shù)據(jù),DFSOutputStream將數(shù)據(jù)分成塊,寫(xiě)入data queue。Data queue由Data Streamer讀取,并通知元數(shù)據(jù)節(jié)點(diǎn)分配數(shù)據(jù)節(jié)點(diǎn),用來(lái)存儲(chǔ)數(shù)據(jù)塊(每塊默認(rèn)復(fù)制3塊)。分配的數(shù)據(jù)節(jié)點(diǎn)放在一個(gè)pipeline里。Data Streamer將數(shù)據(jù)塊寫(xiě)入pipeline中的第一個(gè)數(shù)據(jù)節(jié)點(diǎn)。第一個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)塊發(fā)送給第二個(gè)數(shù)據(jù)節(jié)點(diǎn)。第二個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)發(fā)送給第三個(gè)數(shù)據(jù)節(jié)點(diǎn)。DFSOutputStream為發(fā)出去的數(shù)據(jù)塊保存了ack queue,等待pipeline中的數(shù)據(jù)節(jié)點(diǎn)告知數(shù)據(jù)已經(jīng)寫(xiě)入成功。如果數(shù)據(jù)節(jié)點(diǎn)在寫(xiě)入的過(guò)程中失?。宏P(guān)閉pipeline,將ack queue中的數(shù)據(jù)塊放入data queue的開(kāi)始。
整個(gè)過(guò)程如圖所示:
HDFS構(gòu)架與設(shè)計(jì)
Hadoop也是一個(gè)能夠分布式處理大規(guī)模海量數(shù)據(jù)的軟件框架,這一切都是在可靠、高效、可擴(kuò)展的基礎(chǔ)上。Hadoop的可靠性——因?yàn)镠adoop假設(shè)計(jì)算元素和存儲(chǔ)會(huì)出現(xiàn)故障,因?yàn)樗S護(hù)多個(gè)工作數(shù)據(jù)副本,在出現(xiàn)故障時(shí)可以對(duì)失敗的節(jié)點(diǎn)重新分布處理。Hadoop的高效性——在MapReduce的思想下,Hadoop是并行工作的,以加快任務(wù)處理速度。Hadoop的可擴(kuò)展——依賴于部署Hadoop軟件框架計(jì)算集群的規(guī)模,Hadoop的運(yùn)算是可擴(kuò)展的,具有處理PB級(jí)數(shù)據(jù)的能力。
Hadoop 主要由HDFS(Hadoop Distributed File System)和MapReduce 引擎兩部分組成。最底部是HDFS,它存儲(chǔ)Hadoop 集群中所有存儲(chǔ)節(jié)點(diǎn)上的文件。HDFS 的上一層是MapReduce 引擎,該引擎由JobTrackers 和TaskTrackers組成。
HDFS 可以執(zhí)行的操作有創(chuàng)建、刪除、移動(dòng)或重命名文件等,架構(gòu)類(lèi)似于傳統(tǒng)的分級(jí)文件系統(tǒng)。需要注意的是,HDFS 的架構(gòu)基于一組特定的節(jié)點(diǎn)而構(gòu)建(參見(jiàn)圖2),這是它自身的特點(diǎn)。HDFS 包括唯一的NameNode,它在HDFS 內(nèi)部提供元數(shù)據(jù)服務(wù);DataNode 為HDFS 提供存儲(chǔ)塊。由于NameNode 是唯一的,這也是HDFS 的一個(gè)弱點(diǎn)(單點(diǎn)失?。?。一旦NameNode 故障,后果可想而知。
1、HDFS構(gòu)架(如圖所示)
2、HDFS的設(shè)計(jì)
1)錯(cuò)誤檢測(cè)和快速、自動(dòng)的恢復(fù)是HDFS的核心架構(gòu)目標(biāo)。
2)比之關(guān)注數(shù)據(jù)訪問(wèn)的低延遲問(wèn)題,更關(guān)鍵的在于數(shù)據(jù)訪問(wèn)的高吞吐量。
3)HDFS應(yīng)用對(duì)文件要求的是write-one-read-many訪問(wèn)模型。
4)移動(dòng)計(jì)算的代價(jià)比之移動(dòng)數(shù)據(jù)的代價(jià)低。
3、文件系統(tǒng)的namespace
Namenode維護(hù)文件系統(tǒng)的namespace,一切對(duì)namespace和文件屬性進(jìn)行修改的都會(huì)被namenode記錄下來(lái),連文件副本的數(shù)目稱為replication因子,這個(gè)也是由namenode記錄的。
4、數(shù)據(jù)復(fù)制
Namenode全權(quán)管理block的復(fù)制,它周期性地從集群中的每個(gè)Datanode接收心跳包和一個(gè)Blockreport。心跳包的接收表示該Datanode節(jié)點(diǎn)正常工作,而B(niǎo)lockreport包括了該Datanode上所有的block組成的列表。HDFS采用一種稱為rack-aware的策略來(lái)改進(jìn)數(shù)據(jù)的可靠性、有效性和網(wǎng)絡(luò)帶寬的利用。完成對(duì)副本的存放。
5、文件系統(tǒng)元數(shù)據(jù)的持久化
Namenode在內(nèi)存中保存著整個(gè)文件系統(tǒng)namespace和文件Blockmap的映像。這個(gè)關(guān)鍵的元數(shù)據(jù)設(shè)計(jì)得很緊湊,因而一個(gè)帶有4G內(nèi)存的 Namenode足夠支撐海量的文件和目錄。當(dāng)Namenode啟動(dòng)時(shí),它從硬盤(pán)中讀取Editlog和FsImage,將所有Editlog中的事務(wù)作用(apply)在內(nèi)存中的FsImage ,并將這個(gè)新版本的FsImage從內(nèi)存中flush到硬盤(pán)上,然后再truncate這個(gè)舊的Editlog,因?yàn)檫@個(gè)舊的Editlog的事務(wù)都已經(jīng)作用在FsImage上了。這個(gè)過(guò)程稱為checkpoint。在當(dāng)前實(shí)現(xiàn)中,checkpoint只發(fā)生在Namenode啟動(dòng)時(shí),在不久的將來(lái)我們將實(shí)現(xiàn)支持周期性的checkpoint。
6、通信協(xié)議
所有的HDFS通訊協(xié)議都是構(gòu)建在TCP/IP協(xié)議上??蛻舳送ㄟ^(guò)一個(gè)可配置的端口連接到Namenode,通過(guò)ClientProtocol與 Namenode交互。而Datanode是使用DatanodeProtocol與Namenode交互。從ClientProtocol和 Datanodeprotocol抽象出一個(gè)遠(yuǎn)程調(diào)用(RPC),在設(shè)計(jì)上,Namenode不會(huì)主動(dòng)發(fā)起RPC,而是是響應(yīng)來(lái)自客戶端和 Datanode 的RPC請(qǐng)求。
以上是“HDFS基本概念是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!