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

