談?wù)勻v訊面試被問到的HDFS的讀寫流程(面試常問)
大家好,我是三少。
這是一道大數(shù)據(jù)面試中最常問的高頻熱點(diǎn)基礎(chǔ)題,主要考驗(yàn)大數(shù)據(jù)開發(fā)者對(duì)HDFS的讀寫原理流程是否熟悉?如果你還不熟悉,那么接下來的你要認(rèn)真的往下看哦。
HDFS的讀流程
如下圖:
(1)客戶端通過 Distributed FileSystem 向 NameNode 請(qǐng)求下載文件,NameNode 通過查詢?cè)獢?shù)據(jù),找到文件塊所在的 DataNode 地址。
(2)挑選一臺(tái) DataNode(就近原則,然后隨機(jī))服務(wù)器,請(qǐng)求讀取數(shù)據(jù)。
(3)DataNode 開始傳輸數(shù)據(jù)給客戶端(從磁盤里面讀取數(shù)據(jù)輸入流,以 Packet為單位來做校驗(yàn))。
(4)客戶端以 Packet 為單位接收,先在本地緩存,然后寫入目標(biāo)文件。
HDFS的寫流程
如下圖:
(1)客戶端通過 Distributed FileSystem 模塊向 NameNode 請(qǐng)求上傳文件,NameNode 檢查目標(biāo)文件是否已存在,父目錄是否存在。
(2)NameNode 返回是否可以上傳。
(3)客戶端請(qǐng)求第一個(gè) Block 上傳到哪幾個(gè) DataNode 服務(wù)器上。
(4)NameNode 返回 3 個(gè) DataNode 節(jié)點(diǎn),分別為 dn1、dn2、dn3。
(5)客戶端通過 FSDataOutputStream 模塊請(qǐng)求 dn1 上傳數(shù)據(jù),dn1 收到請(qǐng)求會(huì)繼續(xù)調(diào)用 dn2,然后 dn2 調(diào)用 dn3 ,將這個(gè)通信管道建立完成。
(6)dn1、dn2、dn3 逐級(jí)應(yīng)答客戶端。
(7)客戶端開始往 dn1 上傳第一個(gè) Block (先從磁盤讀取數(shù)據(jù)放到一個(gè)本地內(nèi)存緩存),以 Packet 為單位,dn1 收到一個(gè) Packet 就會(huì)傳給 dn2,dn2 傳給 dn3;dn1 每傳一個(gè) packet 會(huì)放入一個(gè)應(yīng)答隊(duì)列等待應(yīng)答。
(8)當(dāng)一個(gè) Block 傳輸完成之后,客戶端再次請(qǐng)求 NameNode 上傳第二個(gè) Block 的服務(wù)器。(重復(fù)執(zhí)行3-7步)。
作者:三少
歡迎關(guān)注微信公眾號(hào) :教你學(xué)懂大數(shù)據(jù)