hadoop的分布式文件系統(tǒng)HDFS

1.HDFS性能介紹

HDFS(Hadoop Distributed File System)是一個(gè)分布式文件系統(tǒng)。它具有高容錯(cuò)性并提供了高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用,它提供了一個(gè)高度容錯(cuò)性和高吞吐量的海量數(shù)據(jù)存儲解決方案。

1)高吞吐量訪問:HDFS的每個(gè)Block分布在不同的Rack上,在用戶訪問時(shí),HDFS會計(jì)算使用最近和訪問量最小的服務(wù)器給用戶提供。由于Block在不同的Rack上都有備份,所以不再是單數(shù)據(jù)訪問,所以速度和效率是非??斓?。另外HDFS可以并行從服務(wù)器集群中讀寫,增加了文件讀寫的訪問帶寬。

2)高容錯(cuò)性:系統(tǒng)故障是不可避免的,如何做到故障之后的數(shù)據(jù)恢復(fù)和容錯(cuò)處理是至關(guān)重要的。HDFS通過多方面保證數(shù)據(jù)的可靠性,多份復(fù)制并且分布到物理位置的不同服務(wù)器上,數(shù)據(jù)校驗(yàn)功能、后臺的連續(xù)自檢數(shù)據(jù)一致性功能都為高容錯(cuò)提供了可能。

3)線性擴(kuò)展:因?yàn)镠DFS的Block信息存放到NameNode上,文件的Block分布到DataNode上,當(dāng)擴(kuò)充的時(shí)候僅僅添加DataNode數(shù)量,系統(tǒng)可以在不停止服務(wù)的情況下做擴(kuò)充,不需要人工干預(yù)。

2.hadoop主從結(jié)構(gòu)圖

HDFS是Master和Slave的結(jié)構(gòu)

如上圖所示HDFS是Master和Slave的結(jié)構(gòu),分為NameNode、Secondary NameNode和DataNode三種角色。

1)NameNode:在Hadoop1.X中只有一個(gè)Master節(jié)點(diǎn),管理HDFS的名稱空間和數(shù)據(jù)塊映射信息、配置副本策略和處理客戶端請求;

2)Secondary NameNode:輔助NameNode,分擔(dān)NameNode工作,定期合并fsimage和fsedits并推送給NameNode,緊急情況下可輔助恢復(fù)NameNode;

3)DataNode:Slave節(jié)點(diǎn),實(shí)際存儲數(shù)據(jù)、執(zhí)行數(shù)據(jù)塊的讀寫并匯報(bào)存儲信息給NameNode;

3.HDFS讀操作流程圖詳解

讀操作流程

1)客戶端通過調(diào)用FileSystem對象的open()方法來打開希望讀取的文件,對于HDFS來說,這個(gè)對象是分布文件系統(tǒng)的一個(gè)實(shí)例;

2)DistributedFileSystem通過使用RPC來調(diào)用NameNode以確定文件起始塊的位置,同一Block按照重復(fù)數(shù)會返回多個(gè)位置,這些位置按照Hadoop集群拓?fù)浣Y(jié)構(gòu)排序,距離客戶端近的排在前面;

3)前兩步會返回一個(gè)FSDataInputStream對象,該對象會被封裝成DFSInputStream對象,DFSInputStream可以方便的管理datanode和namenode數(shù)據(jù)流,客戶端對這個(gè)輸入流調(diào)用read()方法;

4)存儲著文件起始塊的DataNode地址的DFSInputStream隨即連接距離最近的DataNode,通過對數(shù)據(jù)流反復(fù)調(diào)用read()方法,可以將數(shù)據(jù)從DataNode傳輸?shù)娇蛻舳耍?/p>

5)到達(dá)塊的末端時(shí),DFSInputStream會關(guān)閉與該DataNode的連接,然后尋找下一個(gè)塊的最佳DataNode,這些操作對客戶端來說是透明的,客戶端的角度看來只是讀一個(gè)持續(xù)不斷的流;

6)一旦客戶端完成讀取,就對FSDataInputStream調(diào)用close()方法關(guān)閉文件讀取。

4.HDFS寫操作流程圖詳解

寫操作流程圖

1)客戶端通過調(diào)用DistributedFileSystem的create()方法創(chuàng)建新文件;

2)DistributedFileSystem通過RPC調(diào)用NameNode去創(chuàng)建一個(gè)沒有Blocks關(guān)聯(lián)的新文件,創(chuàng)建前NameNode會做各種校驗(yàn),比如文件是否存在、客戶端有無權(quán)限去創(chuàng)建等。如果校驗(yàn)通過,NameNode會為創(chuàng)建新文件記錄一條記錄,否則就會拋出IO異常;

3)前兩步結(jié)束后會返回FSDataOutputStream的對象,和讀文件的時(shí)候相似,F(xiàn)SDataOutputStream被封裝成DFSOutputStream,DFSOutputStream可以協(xié)調(diào)NameNode和Datanode??蛻舳碎_始寫數(shù)據(jù)到DFSOutputStream,DFSOutputStream會把數(shù)據(jù)切成一個(gè)個(gè)小的數(shù)據(jù)包,并寫入內(nèi)部隊(duì)列稱為“數(shù)據(jù)隊(duì)列”(Data Queue);

4)DataStreamer會去處理接受Data Queue,它先問詢NameNode這個(gè)新的Block最適合存儲的在哪幾個(gè)DataNode里,比如重復(fù)數(shù)是3,那么就找到3個(gè)最適合的DataNode,把他們排成一個(gè)pipeline.DataStreamer把Packet按隊(duì)列輸出到管道的第一個(gè)Datanode中,第一個(gè)DataNode又把Packet輸出到第二個(gè)DataNode中,以此類推;

5)DFSOutputStream還有一個(gè)對列叫Ack Quene,也是有Packet組成,等待DataNode的收到響應(yīng),當(dāng)Pipeline中的所有DataNode都表示已經(jīng)收到的時(shí)候,這時(shí)Akc Quene才會把對應(yīng)的Packet包移除掉;

6)客戶端完成寫數(shù)據(jù)后調(diào)用close()方法關(guān)閉寫入流;

7)DataStreamer把剩余的包都刷到Pipeline里然后等待Ack信息,收到最后一個(gè)Ack后,通知NameNode把文件標(biāo)示為已完成。

5.HDFS中常用到的命令

#查看hdfs上的目錄結(jié)構(gòu)

hadoop fs -ls /? ??

# 遞歸查看hdfs上的目錄結(jié)構(gòu)? ? ? ? ? ?

hadoop fs -lsr

#在hdfs上創(chuàng)建目錄

hadoop fs -mkdir /user/hadoop

#將本地文件上傳到hdfs,保留本地文件:

hadoop fs -put a.txt /user/hadoop/

#將文件從HDFS下載到本地文件系統(tǒng)

hadoop fs -get /user/hadoop/a.txt /

#復(fù)制hdfs中的src為dst

hadoop fs -cp src dst

##移動/改名hdfs中的src為dst

hadoop fs -mv src dst

#查看hdfs上文件a.txt的內(nèi)容

hadoop fs -cat /user/hadoop/a.txt

#刪除目錄下的文件

hadoop fs -rm /user/hadoop/a.txt

#刪除目錄

hadoop fs -rmr /user/hadoop/a

#為了避免誤刪數(shù)據(jù),加了一個(gè)確認(rèn)

hadoop fs -rmi /user/hadoop/a.txt

#將源文件輸出為文本格式。允許的格式是zip和TextRecordInputStream

hadoop fs -text /user/hadoop/a.txt

#將本地文件上傳到hdfs,保留本地文件:

hadoop fs -copyFromLocal localsrc dst 與hadoop fs -put功能類似。

#將本地文件上傳到hdfs,同時(shí)刪除本地文件:

hadoop fs -moveFromLocal localsrc dst? ??

#顯示目錄中所有文件大小,或者指定一個(gè)文件時(shí),顯示此文件大小

hadoop fs -du??/user/hadoop/a.txt

#計(jì)數(shù)文件個(gè)數(shù)及所占空間的詳情

hadoop fs -count? /

5.1HDFS中常用到的命令

# 報(bào)告文件系統(tǒng)的基本信息和統(tǒng)計(jì)信息?

hadoop dfsadmin -report?

文件系統(tǒng)的基本信息

hadoop dfsadmin -safemode enter | leave | get | wait

# 安全模式維護(hù)命令。安全模式是 Namenode 的一個(gè)狀態(tài),這種狀態(tài)下,Namenode??

# 1. 不接受對名字空間的更改(只讀)?

# 2. 不復(fù)制或刪除塊?

# Namenode 會在啟動時(shí)自動進(jìn)入安全模式,當(dāng)配置的塊最小百分比數(shù)滿足最小的副本數(shù)條件時(shí),會自動離開安全模式。安全模式可以手動進(jìn)入,但是這樣的話也必須手動關(guān)閉安全模式。

5.2HDFS中常用到的命令

#運(yùn)行 HDFS 文件系統(tǒng)檢查工具

hadoop fsck

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

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

  • 首先,我們在使用前先看看HDFS是什麼?這將有助于我們是以后的運(yùn)維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,473評論 0 2
  • HDFS的設(shè)計(jì) HDFS以流式數(shù)據(jù)訪問模式來存儲超大文件,運(yùn)行于商用硬件集群上。 超大文件:指的是幾百M(fèi)B、幾百G...
    Vechace閱讀 940評論 0 1
  • HDFS的設(shè)計(jì)目標(biāo) 通過上一篇文章的介紹我們已經(jīng)了解到HDFS到底是怎樣的東西,以及它是怎樣通過多副本機(jī)制來提供高...
    陌上疏影涼閱讀 1,541評論 0 3
  • 對于一個(gè)長期有意識訓(xùn)練學(xué)莊子基本功的人來說,最顯著的效果就是能很快察覺到自己的狀態(tài)不對,并能迅速找到原因。 在這短...
    西班牙蝸牛閱讀 459評論 0 4
  • 13年我們相識,當(dāng)時(shí)我們互不了解對方,通過電話一點(diǎn)點(diǎn)變成相知,異地戀的愛情,在別人眼里是那樣的異樣,我相信...
    A儉丹閱讀 226評論 0 0

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