在CGFT考試中也是要學習這樣的知識的,大數(shù)據(jù)知識的學習是比較難的,那你對讀數(shù)據(jù)的過程知道多少了?今天小編給你說說哦!讓你有個簡單的了解!
?
(1)客戶端通過FileSystem.open(打開文件,相應地,在HDFS文件系統(tǒng)中,DistributedFileSystem具體實現(xiàn)了 FileSystem,因此,調(diào)用open()方法后,DistributedFileSystem會創(chuàng)建輸入流FSDatalnputStream,對于HDFS而言,具體的輸入流就是DFSInputStream。
(2)在DFSInputStream的構(gòu)造函數(shù)中,輸入流通過ClientProtocal.getBlockLocations()遠程調(diào)用名稱節(jié)點,獲得文件開始部分數(shù)據(jù)塊的保存位置。對于該數(shù)據(jù)塊,名稱節(jié)點返回保存該數(shù)據(jù)塊的所有數(shù)據(jù)節(jié)點的地址,同時,根據(jù)距離客戶端的遠近對數(shù)據(jù)節(jié)點進行排序;然后,DistributedFileSystem會利用DFSInputStream來實例化FSDataInputStream,返回給客戶端,同時返回了數(shù)據(jù)塊的數(shù)據(jù)節(jié)點地址。
(3)獲得輸入流FSDatalnputStream后,客戶端調(diào)用read()函數(shù)開始讀取數(shù)據(jù)。輸入流根據(jù)前面的排序結(jié)果,選擇距離客戶端*近的數(shù)據(jù)節(jié)點建立連接并讀取數(shù)據(jù)。
(4)數(shù)據(jù)從該數(shù)據(jù)節(jié)點讀到客戶端;當該數(shù)據(jù)塊讀取完畢時,FSDataInputStream關閉和該數(shù)據(jù)節(jié)點的連接。
(5)輸入流通過getBlockLocations()方法查找下一個數(shù)據(jù)塊(如果客戶端緩存中已經(jīng)包含了該數(shù)據(jù)塊的位置信息,就不需要調(diào)用該方法)。
大數(shù)據(jù)技術原理與應用——概念、存儲、處理、分析與應用
(6)找到該數(shù)據(jù)塊的*數(shù)據(jù)節(jié)點,讀取數(shù)據(jù)。
(7)當客戶端讀取完畢數(shù)據(jù)的時候,調(diào)用FSDatalnputStream的close()函數(shù),關閉輸入流。
需要注意的是,在讀取數(shù)據(jù)的過程中,如果客戶端與數(shù)據(jù)節(jié)點通信時出現(xiàn)錯誤,就會嘗試接包含此數(shù)據(jù)塊的下一個數(shù)據(jù)節(jié)點。