溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HDFS的基本原理有哪些

發(fā)布時間:2020-08-03 11:50:06 來源:億速云 閱讀:117 作者:Leah 欄目:編程語言

HDFS的基本原理有哪些?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

1、NameNode概述

NameNodeHDFS的核心,相信這一點大家都知道,所以NameNode也被稱為Master。NameNode僅存儲HDFS的元數(shù)據(jù):文件系統(tǒng)中所有文件的目錄樹,并跟蹤整個集群中的文件。NameNode不存儲實際數(shù)據(jù)或數(shù)據(jù)集。數(shù)據(jù)本身實際存儲在DataNodes中。NameNode知道HDFS中任何給定文件的塊列表及其位置。使用此信息NameNode知道如何從塊中構(gòu)建文件。NameNode并不持久化存儲每個文件中各個塊所在的 DataNode 的位置信息,這些信息會在系統(tǒng)啟動時從數(shù)據(jù)節(jié)點重建。NameNode對于HDFS至關(guān)重要,當(dāng)NameNode關(guān)閉時,HDFS / Hadoop集群無法訪問??偨Y(jié)一下,NameNodeHadoop集群中的單點故障。NameNode所在機器通常會配置有大量內(nèi)存(RAM)。

2、DataNode概述

DataNode負責(zé)將實際數(shù)據(jù)存儲在HDFS中。DataNode也稱為Slave。NameNodeDataNode會保持不斷通信。DataNode啟動時,它將自己發(fā)布到NameNode并匯報自己負責(zé)持有的塊列表。當(dāng)某個DataNode關(guān)閉時,它不會影響數(shù)據(jù)或群集的可用性。NameNode將安排由其他DataNode管理的塊進行副本復(fù)制。DataNode所在機器通常配置有大量的硬盤空間。因為實際數(shù)據(jù)存儲DataNode中。DataNode會定期向NameNode發(fā)送心跳,如果NameNode長時間沒有接受到DataNode發(fā)送的心跳, NameNode就會認為該DataNode失效。block匯報時間間隔取參數(shù)dfs.blockreport.intervalMsec,參數(shù)未配置的話默認為6小時。

3HDFS的工作機制

NameNode負責(zé)管理整個文件系統(tǒng)元數(shù)據(jù);DataNode負責(zé)管理具體文件數(shù)據(jù)塊存儲;Secondary NameNode協(xié)助NameNode進行元數(shù)據(jù)的備份。HDFS的內(nèi)部工作機制對客戶端保持透明,客戶端請求訪問HDFS都是通過向NameNode申請來進行。HDFS寫數(shù)據(jù)流程和HDFS讀數(shù)據(jù)流程總結(jié)如下:

1HDFS寫數(shù)據(jù)流程

Aclient發(fā)起文件上傳請求,通過RPCNameNode建立通訊,NameNode檢查目標(biāo)文件是否已存在,父目錄是否存在,返回是否可以上傳;

Bclient請求第一個block該傳輸?shù)侥男?span>DataNode服務(wù)器上;

CNameNode根據(jù)配置文件中指定的備份數(shù)量及副本放置策略進行文件分配,返回可用的DataNode的地址,如:A、B、C

Dclient請求3DataNode中的一臺A上傳數(shù)據(jù)(本質(zhì)上是一個RPC調(diào)用,建立pipeline),A收到請求會繼續(xù)調(diào)用B,然后B調(diào)用C,將整個pipeline建立完成,后逐級返回client;

Eclient開始往A上傳第一個block,以packet為單位(默認64K),A收到一個packet就會傳給 B,B 傳給 C;A 每傳一個packet會放入一個應(yīng)答隊列等待應(yīng)答。

F.?dāng)?shù)據(jù)被分割成一個個packet數(shù)據(jù)包在pipeline上依次傳輸,在pipeline反方向上,逐個發(fā)送ack(命令正確應(yīng)答),最終由pipeline中第一個DataNode節(jié)點Apipeline ack發(fā)送給client;

G.當(dāng)一個block傳輸完成之后,client再次請求NameNode上傳第二個block到服務(wù)器。

2HDFS讀數(shù)據(jù)流程

A、Client NameNode 發(fā)起 RPC 請求,來確定請求文件 block 所在的位置;

BNameNode 會視情況返回文件的部分或者全部block 列表,對于每個block,NameNode 都會返回含有該block副本的DataNode地址;

C.這些返回的DN地址,會按照集群拓撲結(jié)構(gòu)得出 DataNode 與客戶端的距離,然后進行排序,排序兩個規(guī)則:網(wǎng)絡(luò)拓撲結(jié)構(gòu)中距離 Client 近的排靠前;心跳機制中超時匯報的DN 狀態(tài)為STALE,這樣的排靠后;

DClient 選取排序靠前的DataNode來讀取block,如果客戶端本身就是DataNode,那么將從本地直接獲取數(shù)據(jù);

E.底層上本質(zhì)是建立Socket  StreamFSDataInputStream),重復(fù)的調(diào)用父類DataInputStreamread方法,直到這個塊上的數(shù)據(jù)讀取完畢;

F.當(dāng)讀完列表的block后,若文件讀取還沒有結(jié)束,客戶端會繼續(xù)向NameNode獲取下一批的block列表;

G.讀取完一個block都會進行checksum驗證,如果讀取DataNode時出現(xiàn)錯誤,客戶端會通知 NameNode,然后再從下一個擁有該block副本的DataNode繼續(xù)讀。

Hread 方法是并行的讀取block信息,不是一塊一塊的讀?。?span>NameNode只是返回Client 請求包含塊的DataNode地址,并不是返回請求塊的數(shù)據(jù);

I.最終讀取來所有的block會合并成一個完整的最終文件。

看完上述內(nèi)容,你們掌握HDFS的基本原理有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI