一、HDFS讀過程
1.1 HDFS API 讀文件
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path file = new Path("demo.txt");
FSDataInputStream inStream = fs.open(file);
String data = inStream.readUTF();
System.out.println(data);
inStream.close();
1.2 HDFS讀取文件過程
1.初始化FileSystem,然後客戶端(client)用FileSystem的open()函數打開文件
2.FileSystem用RPC調用元數據節點,得到文件的數據塊信息,對於每一個數據塊,元數據節點返回保存數據塊的數據節點的地址。
3.FileSystem返回FSDataInputStream給客戶端,用來讀取數據,客戶端調用stream的read()函數開始讀取數據。
4.DFSInputStream連接保存此文件第一個數據塊的最近的數據節點,data從數據節點讀到客戶端(client)
5.當此數據塊讀取完畢時,DFSInputStream關閉和此數據節點的連接,然後連接此文件下一個數據塊的最近的數據節點。
6.當客戶端讀取完畢數據的時候,調用FSDataInputStream的close函數。
7.在讀取數據的過程中,如果客戶端在與數據節點通信出現錯誤,則嘗試連接包含此數據塊的下一個數據節點。
8. 失敗的數據節點將被記錄,以後不再連接。【注意:這裏的序號不是一一對應的關係】
1.3HDFS讀取文件過程圖
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path file = new Path("demo.txt");
FSDataOutputStream outStream = fs.create(file);
outStream.writeUTF("Welcome to HDFS Java API!!!");
outStream.close();
2.2 HDFS寫文件過程