程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Hadoop之HDFS文件讀寫過程,

Hadoop之HDFS文件讀寫過程,

編輯:JAVA綜合教程

Hadoop之HDFS文件讀寫過程,


一、HDFS讀過程

      1.1 HDFS API 讀文件 

1 Configuration conf = new Configuration(); 2 FileSystem fs = FileSystem.get(conf); 3 Path file = new Path("demo.txt"); 4 FSDataInputStream inStream = fs.open(file); 5 String data = inStream.readUTF(); 6 System.out.println(data); 7 inStream.close(); View Code

       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讀取文件過程圖

    

    

二、HDFS寫過程          2.1 HDFS API 寫文件   1 Configuration conf = new Configuration(); 2 FileSystem fs = FileSystem.get(conf); 3 Path file = new Path("demo.txt"); 4 FSDataOutputStream outStream = fs.create(file); 5 outStream.writeUTF("Welcome to HDFS Java API!!!"); 6 outStream.close(); View Code  2.2 HDFS寫文件過程   

 

       1.初始化FileSystem,客戶端調用create()來創建文件        2.FileSystem用RPC調用元數據節點,在文件系統的命名空間中創建一個新的文件,元數據節點首先確定文件原來不存在,並且客戶端有創建文件的權限,然後創建新文件。        3.FileSystem返回DFSOutputStream,客戶端用於寫數據,客戶端開始寫入數據。        4.DFSOutputStream將數據分成塊,寫入data queue。data queue由Data Streamer讀取,並通知元數據節點分配數據節點,用來存儲數據塊(每塊默認復制3塊)。分配的數據節點放在一個pipeline裡。Data Streamer將數據塊寫入pipeline中的第一個數據節點。第一個數據節點將數據塊發送給第二個數據節點。第二個數據節點將數據發送給第三個數據節點。        5.DFSOutputStream為發出去的數據塊保存了ack queue,等待pipeline中的數據節點告知數據已經寫入成功。        6.當客戶端結束寫入數據,則調用stream的close函數。此操作將所有的數據塊寫入pipeline中的數據節點,並等待ack queue返回成功。最後通知元數據節點寫入完畢。        7.如果數據節點在寫入的過程中失敗,關閉pipeline,將ack queue中的數據塊放入data queue的開始,當前的數據塊在已經寫入的數據節點中被元數據節點賦予新的標示,則錯誤節點重啟後能夠察覺其數據塊是過時的,會被刪除。失敗的數據節點從pipeline中移除,另外的數據塊則寫入pipeline中的另外兩個數據節點。元數據節點則被通知此數據塊是復制塊數不足,將來會再創建第三份備份。        2.3HDFS寫文件過程圖         

 

     

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved