HDFS-简介
HDFS 是 Hadoop Distribute File System 的簡(jiǎn)稱,意為:Hadoop 分布式文件系統(tǒng),是一種旨在在商品硬件上運(yùn)行的分布式文件系統(tǒng)。它與現(xiàn)有的分布式文件系統(tǒng)有許多相似之處。但是,與其他分布式文件系統(tǒng)的區(qū)別很明顯。HDFS具有高度的容錯(cuò)能力,旨在部署在低成本硬件上。HDFS提供對(duì)應(yīng)用程序數(shù)據(jù)的高吞吐量訪問,并且適用于具有大數(shù)據(jù)集的應(yīng)用程序。HDFS放寬了一些POSIX要求,以實(shí)現(xiàn)對(duì)文件系統(tǒng)數(shù)據(jù)的流式訪問。HDFS最初是作為Apache Nutch Web搜索引擎項(xiàng)目的基礎(chǔ)結(jié)構(gòu)而構(gòu)建的。HDFS是Apache Hadoop Core項(xiàng)目的一部分,是 Hadoop 核心組件之一,作為最底層的分布式存儲(chǔ)服務(wù)而存在。
一、特點(diǎn)
- 高容錯(cuò):硬件故障是正常現(xiàn)象,而非例外。HDFS實(shí)例可能包含數(shù)百或數(shù)千個(gè)服務(wù)器計(jì)算機(jī),每個(gè)服務(wù)器計(jì)算機(jī)都存儲(chǔ)文件系統(tǒng)數(shù)據(jù)的一部分。存在大量組件并且每個(gè)組件的故障概率都很低的事實(shí)意味著HDFS的某些組件始終無法運(yùn)行。因此,檢測(cè)故障并快速,自動(dòng)地從故障中恢復(fù)是HDFS的核心目標(biāo)。
- 流數(shù)據(jù)訪問:在HDFS上運(yùn)行的應(yīng)用程序需要對(duì)其數(shù)據(jù)集進(jìn)行流式訪問。它們不是通常在通用文件系統(tǒng)上運(yùn)行的通用應(yīng)用程序。HDFS設(shè)計(jì)用于批處理,而不是用戶交互使用。重點(diǎn)在于數(shù)據(jù)訪問的高吞吐量,而不是數(shù)據(jù)訪問的低延遲。POSIX提出了許多針對(duì)HDFS的應(yīng)用程序不需要的硬性要求。在一些關(guān)鍵領(lǐng)域中,POSIX語義已經(jīng)被交易以提高數(shù)據(jù)吞吐率。
- 支持大數(shù)據(jù)集:在HDFS上運(yùn)行的應(yīng)用程序具有大量數(shù)據(jù)集。HDFS中的典型文件大小為GB到TB。因此,HDFS已調(diào)整為支持大文件。它應(yīng)提供較高的聚合數(shù)據(jù)帶寬,并可以擴(kuò)展到單個(gè)群集中的數(shù)百個(gè)節(jié)點(diǎn)。它應(yīng)該在單個(gè)實(shí)例中支持?jǐn)?shù)千萬個(gè)文件。
- 一次寫入多次讀取:HDFS應(yīng)用程序需要文件一次寫入多次讀取訪問模型。一旦創(chuàng)建,寫入和關(guān)閉文件,除了追加和截?cái)嗤?#xff0c;無需更改。支持將內(nèi)容追加到文件末尾,但不能在任意點(diǎn)更新。該假設(shè)簡(jiǎn)化了數(shù)據(jù)一致性問題并實(shí)現(xiàn)了高吞吐量數(shù)據(jù)訪問。MapReduce應(yīng)用程序或Web爬網(wǎng)程序應(yīng)用程序非常適合此模型。
- 移動(dòng)計(jì)算:如果應(yīng)用程序所請(qǐng)求的計(jì)算在其所操作的數(shù)據(jù)附近執(zhí)行,則效率會(huì)高得多。當(dāng)數(shù)據(jù)集的大小巨大時(shí),尤其如此。這樣可以最大程度地減少網(wǎng)絡(luò)擁塞,并提高系統(tǒng)的整體吞吐量。假設(shè)通常是將計(jì)算遷移到更靠近數(shù)據(jù)的位置,而不是將數(shù)據(jù)移動(dòng)到應(yīng)用程序正在運(yùn)行的位置。HDFS為應(yīng)用程序提供了接口,使它們自己更靠近數(shù)據(jù)所在的位置。
- 高度可移植性:HDFS是使用Java語言構(gòu)建的;任何支持Java的機(jī)器都可以運(yùn)行NameNode或DataNode軟件。高度可移植的Java語言的使用意味著HDFS可以部署在各種各樣的機(jī)器上。
- 運(yùn)行于商業(yè)硬件上: Hadoop不需要特別貴的、reliable的(可靠的)機(jī)器,可運(yùn)行于普通商用機(jī)器(可以從多家供應(yīng)商采購) ,商用機(jī)器不代表低端機(jī)器。在集群中(尤其是大的集群),節(jié)點(diǎn)失敗率是比較高的HDFS的目標(biāo)是確保集群在節(jié)點(diǎn)失敗的時(shí)候不會(huì)讓用戶感覺到明顯的中斷。
二、組成架構(gòu)
HDFS采用主/從體系結(jié)構(gòu),整個(gè)HDFS集群由一個(gè)Namenode和多個(gè)Datanode構(gòu)成master-worker(主從)模式。Namenode負(fù)責(zé)構(gòu)建命名空間,管理文件的元數(shù)據(jù)等,Datanode負(fù)責(zé)實(shí)際存儲(chǔ)數(shù)據(jù)和處理來自系統(tǒng)客戶端的讀寫請(qǐng)求。
群集中單個(gè)NameNode的存在極大地簡(jiǎn)化了系統(tǒng)的體系結(jié)構(gòu)。NameNode是所有HDFS元數(shù)據(jù)的仲裁器和存儲(chǔ)庫。該系統(tǒng)的設(shè)計(jì)方式使用戶數(shù)據(jù)永遠(yuǎn)不會(huì)流過NameNode。
具體來說,HDFS由四部分組成,HDFS Client、NameNode、DataNode和Secondary NameNode。
**HDFS客戶端:**就是客戶端。
1、提供一些命令來管理、訪問 HDFS,比如啟動(dòng)或者關(guān)閉HDFS。
2、與 DataNode 交互,讀取或者寫入數(shù)據(jù);讀取時(shí),要與 NameNode 交互,獲取文件的位置信息;寫入 HDFS 的時(shí)候,Client 將文件切分成 一個(gè)一個(gè)的Block,然后進(jìn)行存儲(chǔ)。
**NameNode:**即Master,
1、管理 HDFS 的名稱空間。
2、管理數(shù)據(jù)塊(Block)映射信息
3、配置副本策略
4、處理客戶端讀寫請(qǐng)求。
**DataNode:**就是Slave。NameNode 下達(dá)命令,DataNode 執(zhí)行實(shí)際的操作。
1、存儲(chǔ)實(shí)際的數(shù)據(jù)塊。
2、執(zhí)行數(shù)據(jù)塊的讀/寫操作。
**Secondary NameNode:**并非 NameNode 的熱備。當(dāng)NameNode 掛掉的時(shí)候,它并不能馬上替換 NameNode 并提供服務(wù)。
1、輔助 NameNode,分擔(dān)其工作量。
2、定期合并 fsimage和fsedits,并推送給NameNode。
3、在緊急情況下,可輔助恢復(fù) NameNode。
三、文件系統(tǒng)命名空間
HDFS支持傳統(tǒng)的分層文件組織。用戶或應(yīng)用程序可以創(chuàng)建目錄并將文件存儲(chǔ)在這些目錄中。文件系統(tǒng)名稱空間層次結(jié)構(gòu)與大多數(shù)其他現(xiàn)有文件系統(tǒng)相似。可以創(chuàng)建和刪除文件,將文件從一個(gè)目錄移動(dòng)到另一個(gè)目錄或重命名文件。HDFS支持用戶配額和訪問權(quán)限。HDFS不支持硬鏈接或軟鏈接。但是,HDFS體系結(jié)構(gòu)并不排除實(shí)現(xiàn)這些功能。
盡管HDFS遵循FileSystem的命名約定,但某些路徑和名稱(例如/.reserved和.snapshot)被保留。功能,如透明加密和快照使用預(yù)約路徑。
NameNode維護(hù)文件系統(tǒng)名稱空間。對(duì)文件系統(tǒng)名稱空間或其屬性的任何更改均由NameNode記錄。應(yīng)用程序可以指定應(yīng)由HDFS維護(hù)的文件副本的數(shù)量。文件的副本數(shù)稱為該文件的復(fù)制因子。此信息由NameNode存儲(chǔ)。
四、數(shù)據(jù)復(fù)制
HDFS旨在在大型群集中的計(jì)算機(jī)之間可靠地存儲(chǔ)非常大的文件。它將每個(gè)文件存儲(chǔ)為一系列塊。復(fù)制文件的塊是為了容錯(cuò)。塊大小和復(fù)制因子是每個(gè)文件可配置的。
文件中除最后一個(gè)塊外的所有塊都具有相同的大小,而在添加了對(duì)可變長度塊的支持后,用戶可以在不填充最后一個(gè)塊的情況下開始新的塊,而不用配置的塊大小。
應(yīng)用程序可以指定文件的副本數(shù)。復(fù)制因子可以在文件創(chuàng)建時(shí)指定,以后可以更改。HDFS中的文件只能寫入一次(追加和截?cái)喑?#xff09;,并且在任何時(shí)候都只能具有一個(gè)寫入器。
NameNode做出有關(guān)塊復(fù)制的所有決定。它定期從群集中的每個(gè)DataNode接收心跳信號(hào)和Blockreport。收到心跳信號(hào)表示DataNode正常運(yùn)行。Blockreport包含DataNode上所有塊的列表。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: TCP总结
- 下一篇: Shell脚本——函数