您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“HDFS中Short-Circuit是什么”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“HDFS中Short-Circuit是什么”這篇文章吧。
解釋下 HDFS 的 Short-Circuit ?
這是一個比較高段位的冷門問題了,我也是一般在面高階的程序員才會拋出這樣的問題,對于考察系統底層原理掌握度方面還是挺有好的。
先說目的:
因為Hadoop的一大基本原則就是移動數據不如移動計算,所以一般HDFS的client端經常會和提供數據的DataNode在同一個節點,Short Circuit Local Reads的目的就是提高在這種情況下的數據讀取性能。
正常的數據讀取流程,DataNode必須為每個正在讀取數據塊的客戶端保留一個線程和一個TCP套接字。內核中會有TCP協議的開銷,以及DataTransferProtocol協議的開銷,因此這里有很大的優化空間。
再說流程:
1. client 會向DataNode請求創建一塊共享內存,DataNode創建共享內存文件并將共享內存文件描述符返回給 client。(內存文件描述符,Unix的一種機制,目的是讓DataNode不是將整個目錄傳遞給客戶端,而是打開塊文件和元數據文件,保證數據的安全性)
2. client 申請共享內存中的槽位,并向DataNode請求要讀取的副本文件描述符,DataNode打開副本文件并將數據塊文件和元數據文件的文件描述符返回給 client。
3. client 讀取完副本后,異步向DataNode請求釋放文件描述符及相應槽位。
另外,其實這個問題也不一定要等面試官問了才回答,在他問你HDFS的讀寫過程的時候,你也可以在最后適當地插上兩句,凸顯逼格。
像這樣:
“剛才我說的還是比較基礎和常規的讀寫流程,實際上HDFS還有一個Short-Circuit機制可以來做數據本地讀取的優化,這是更加底層的內容了...”
接下來可以先別急著講,先看看面試官的反應看他有沒有興趣聽,有的話就可以把上面這一段說出去了,當然也有可能連面試官都沒聽過這個東西,那就無所謂了,你說的內容已經唬到他了。
之前說過在面試的過程中可以適當地引導面試官的提問方向,往你擅長的方向上帶,剛才說的其實就是一種引導的手段了,掌握這個技能的話你會發現你在面試中能表現得更自如,不用被牽著鼻子走。
當兩個客戶端嘗試訪問對HDFS相同的文件,會發生什么?
HDFS只支持獨占寫入。
當第一個客戶端連接Namenode打開文件進行寫入時,Namenode授予租約的客戶端創建這個文件。當第二個客戶端試圖打開同一個文件寫入時,Namenode會發現該文件的租約已經授予給另一個客戶端,并拒絕第二個客戶端打開請求。
這個問題還是比較簡單的,考查的是你是不是真的有實操過,是不是有踩過坑且有思考。
為什么 HDFS 不適合存儲過多的小文件?
兩個重點,一個是多,一個是小,分別解釋。
1)小文件過多,會過多占用namenode的內存,并浪費block。
文件的元數據,都是存儲在namenode上
元數據包括文件被分成了哪些blocks,每個block存儲在哪些服務器的哪個block塊上。小文件過多,元數據必定過多。HDFS的每個文件、目錄、數據塊占用150B,因此300M內存情況下,只能存儲不超過300M/150=2M個文件/目錄/數據塊的元數據
dataNode會向NameNode發送兩種類型的報告:增量報告和全量報告
增量報告是當dataNode接收到block或者刪除block時,會向nameNode報告。全量報告是周期性的,NN處理100萬的block報告需要1s左右,這1s左右NN會被鎖住,其它的請求會被阻塞。
2)文件過小,尋道時間大于數據讀寫時間,這不符合HDFS的設計:
HDFS為了使數據的傳輸速度和硬盤的傳輸速度接近,則設計將尋道時間相對最小化,將block的大小設置的比較大,這樣讀寫數據塊的時間將遠大于尋道時間,接近于硬盤的傳輸速度。
以上是“HDFS中Short-Circuit是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。