溫馨提示×

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

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

HDFS中Short-Circuit是什么

發(fā)布時(shí)間:2021-12-09 14:32:30 來源:億速云 閱讀:233 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“HDFS中Short-Circuit是什么”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“HDFS中Short-Circuit是什么”這篇文章吧。

解釋下 HDFS 的 Short-Circuit ?

這是一個(gè)比較高段位的冷門問題了,我也是一般在面高階的程序員才會(huì)拋出這樣的問題,對(duì)于考察系統(tǒng)底層原理掌握度方面還是挺有好的。

先說目的:

因?yàn)镠adoop的一大基本原則就是移動(dòng)數(shù)據(jù)不如移動(dòng)計(jì)算,所以一般HDFS的client端經(jīng)常會(huì)和提供數(shù)據(jù)的DataNode在同一個(gè)節(jié)點(diǎn),Short Circuit Local Reads的目的就是提高在這種情況下的數(shù)據(jù)讀取性能。

正常的數(shù)據(jù)讀取流程,DataNode必須為每個(gè)正在讀取數(shù)據(jù)塊的客戶端保留一個(gè)線程和一個(gè)TCP套接字。內(nèi)核中會(huì)有TCP協(xié)議的開銷,以及DataTransferProtocol協(xié)議的開銷,因此這里有很大的優(yōu)化空間。

再說流程:

1. client 會(huì)向DataNode請(qǐng)求創(chuàng)建一塊共享內(nèi)存,DataNode創(chuàng)建共享內(nèi)存文件并將共享內(nèi)存文件描述符返回給 client。(內(nèi)存文件描述符,Unix的一種機(jī)制,目的是讓DataNode不是將整個(gè)目錄傳遞給客戶端,而是打開塊文件和元數(shù)據(jù)文件,保證數(shù)據(jù)的安全性)

2. client  申請(qǐng)共享內(nèi)存中的槽位,并向DataNode請(qǐng)求要讀取的副本文件描述符,DataNode打開副本文件并將數(shù)據(jù)塊文件和元數(shù)據(jù)文件的文件描述符返回給 client。

3. client 讀取完副本后,異步向DataNode請(qǐng)求釋放文件描述符及相應(yīng)槽位。

另外,其實(shí)這個(gè)問題也不一定要等面試官問了才回答,在他問你HDFS的讀寫過程的時(shí)候,你也可以在最后適當(dāng)?shù)夭迳蟽删洌癸@逼格。

像這樣:

“剛才我說的還是比較基礎(chǔ)和常規(guī)的讀寫流程,實(shí)際上HDFS還有一個(gè)Short-Circuit機(jī)制可以來做數(shù)據(jù)本地讀取的優(yōu)化,這是更加底層的內(nèi)容了...”

接下來可以先別急著講,先看看面試官的反應(yīng)看他有沒有興趣聽,有的話就可以把上面這一段說出去了,當(dāng)然也有可能連面試官都沒聽過這個(gè)東西,那就無所謂了,你說的內(nèi)容已經(jīng)唬到他了。

之前說過在面試的過程中可以適當(dāng)?shù)匾龑?dǎo)面試官的提問方向,往你擅長(zhǎng)的方向上帶,剛才說的其實(shí)就是一種引導(dǎo)的手段了,掌握這個(gè)技能的話你會(huì)發(fā)現(xiàn)你在面試中能表現(xiàn)得更自如,不用被牽著鼻子走。


當(dāng)兩個(gè)客戶端嘗試訪問對(duì)HDFS相同的文件,會(huì)發(fā)生什么?

HDFS只支持獨(dú)占寫入。

當(dāng)?shù)谝粋€(gè)客戶端連接Namenode打開文件進(jìn)行寫入時(shí),Namenode授予租約的客戶端創(chuàng)建這個(gè)文件。當(dāng)?shù)诙€(gè)客戶端試圖打開同一個(gè)文件寫入時(shí),Namenode會(huì)發(fā)現(xiàn)該文件的租約已經(jīng)授予給另一個(gè)客戶端,并拒絕第二個(gè)客戶端打開請(qǐng)求。

這個(gè)問題還是比較簡(jiǎn)單的,考查的是你是不是真的有實(shí)操過,是不是有踩過坑且有思考。


為什么 HDFS 不適合存儲(chǔ)過多的小文件?

兩個(gè)重點(diǎn),一個(gè)是多,一個(gè)是小,分別解釋。

1)小文件過多,會(huì)過多占用namenode的內(nèi)存,并浪費(fèi)block。 

  • 文件的元數(shù)據(jù),都是存儲(chǔ)在namenode上 

元數(shù)據(jù)包括文件被分成了哪些blocks,每個(gè)block存儲(chǔ)在哪些服務(wù)器的哪個(gè)block塊上。小文件過多,元數(shù)據(jù)必定過多。HDFS的每個(gè)文件、目錄、數(shù)據(jù)塊占用150B,因此300M內(nèi)存情況下,只能存儲(chǔ)不超過300M/150=2M個(gè)文件/目錄/數(shù)據(jù)塊的元數(shù)據(jù) 

  • dataNode會(huì)向NameNode發(fā)送兩種類型的報(bào)告:增量報(bào)告和全量報(bào)告

增量報(bào)告是當(dāng)dataNode接收到block或者刪除block時(shí),會(huì)向nameNode報(bào)告。全量報(bào)告是周期性的,NN處理100萬的block報(bào)告需要1s左右,這1s左右NN會(huì)被鎖住,其它的請(qǐng)求會(huì)被阻塞。

2)文件過小,尋道時(shí)間大于數(shù)據(jù)讀寫時(shí)間,這不符合HDFS的設(shè)計(jì): 

HDFS為了使數(shù)據(jù)的傳輸速度和硬盤的傳輸速度接近,則設(shè)計(jì)將尋道時(shí)間相對(duì)最小化,將block的大小設(shè)置的比較大,這樣讀寫數(shù)據(jù)塊的時(shí)間將遠(yuǎn)大于尋道時(shí)間,接近于硬盤的傳輸速度。

以上是“HDFS中Short-Circuit是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(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)容。

AI