CGFT大數(shù)據技術中,讀數(shù)據的過程是很重要的。具體有什么,隨融躍小編往下看!

客戶端連續(xù)調用open()、read()、close()讀取數(shù)據時,HDFS內部的執(zhí)行過程:

1. 客戶端通過filesystem.open()打開文件,相應的,在HDFS文件系統(tǒng)中,disterbutedfilesysrem具體體現(xiàn)了filesystem,因此,調用open()后,disterbutedfilesysrem會創(chuàng)建輸入流filesystem,而對于HDFS而言,具體的輸入流就是dfsinputstream。

2. 在dfsinputstream的構造函數(shù)中,輸入流通過clientProtocal.getblocklocations()遠程調用名稱節(jié)點,獲得文件開始部分數(shù)據塊的保存位置。對于該數(shù)據塊,名稱節(jié)點返回保存該數(shù)據塊的所有數(shù)據節(jié)點的地址,同時,根據距離客戶端的遠近對數(shù)據節(jié)點進行排序。然后,disterbutedfilesysrem會利用dfsinputstream來實例化fsdatainputstream,返回給客戶端,同時返回了數(shù)據塊的數(shù)據節(jié)點地址。

特許全球金融科技師CGFT一級

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

4. 數(shù)據從該數(shù)據節(jié)點讀到客戶端,當該數(shù)據塊讀取完畢時,fsdatainputstream關閉和該數(shù)據節(jié)點的連接。

5. 輸入流通過getblocklocations()方法查找下一個數(shù)據塊。

6. 找到該數(shù)據塊的zui佳數(shù)據節(jié)點,讀取數(shù)據。

7. 當客戶端讀取完畢數(shù)據的時候,調用fsdatainputstream的close()函數(shù),關閉輸入流。

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