大數(shù)據(jù)知識的學(xué)習(xí)是比較難的,那在CGFT考試中也是要學(xué)習(xí)這樣的知識的,那你對讀數(shù)據(jù)的過程知道多少了?今天小編給你說說哦!讓你有個簡單的了解!

 

(1)客戶端通過FileSystem.open(打開文件,相應(yīng)地,在HDFS文件系統(tǒng)中,DistributedFileSystem具體實(shí)現(xiàn)了 FileSystem,因此,調(diào)用open()方法后,DistributedFileSystem會創(chuàng)建輸入流FSDatalnputStream,對于HDFS而言,具體的輸入流就是DFSInputStream

(2)DFSInputStream的構(gòu)造函數(shù)中,輸入流通過ClientProtocal.getBlockLocations()遠(yuǎn)程調(diào)用名稱節(jié)點(diǎn),獲得文件開始部分?jǐn)?shù)據(jù)塊的保存位置。對于該數(shù)據(jù)塊,名稱節(jié)點(diǎn)返回保存該數(shù)據(jù)塊的所有數(shù)據(jù)節(jié)點(diǎn)的地址,同時,根據(jù)距離客戶端的遠(yuǎn)近對數(shù)據(jù)節(jié)點(diǎn)進(jìn)行排序;然后,DistributedFileSystem會利用DFSInputStream來實(shí)例化FSDataInputStream,返回給客戶端,同時返回了數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn)地址。

(3)獲得輸入流FSDatalnputStream后,客戶端調(diào)用read()函數(shù)開始讀取數(shù)據(jù)。輸入流根據(jù)前面的排序結(jié)果,選擇距離客戶端*近的數(shù)據(jù)節(jié)點(diǎn)建立連接并讀取數(shù)據(jù)。

(4)數(shù)據(jù)從該數(shù)據(jù)節(jié)點(diǎn)讀到客戶端;當(dāng)該數(shù)據(jù)塊讀取完畢時,FSDataInputStream關(guān)閉和該數(shù)據(jù)節(jié)點(diǎn)的連接。

(5)輸入流通過getBlockLocations()方法查找下一個數(shù)據(jù)塊(如果客戶端緩存中已經(jīng)包含了該數(shù)據(jù)塊的位置信息,就不需要調(diào)用該方法)。

大數(shù)據(jù)技術(shù)原理與應(yīng)用——概念、存儲、處理、分析與應(yīng)用

(6)找到該數(shù)據(jù)塊的*數(shù)據(jù)節(jié)點(diǎn),讀取數(shù)據(jù)。

(7)當(dāng)客戶端讀取完畢數(shù)據(jù)的時候,調(diào)用FSDatalnputStreamclose()函數(shù),關(guān)閉輸入流。

需要注意的是,在讀取數(shù)據(jù)的過程中,如果客戶端與數(shù)據(jù)節(jié)點(diǎn)通信時出現(xiàn)錯誤,就會嘗試接包含此數(shù)據(jù)塊的下一個數(shù)據(jù)節(jié)點(diǎn)。