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) 初始化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中的另外兩個資料節點。元資料節點則被通知此資料塊是複製塊數不足,將來會再建立第三份備份。
啦啦啦
Hadoop HDFS 讀寫資料
1 初始化filesystem,然後客戶端 client 用filesystem的open 函式開啟檔案 2 filesystem用rpc呼叫元資料節點,得到檔案的資料塊資訊,對於每乙個資料塊,元資料節點返回儲存資料塊的資料節點的位址。3 filesystem返回fsdatainputstream給...
hadoop hdfs 資料讀寫
向 namenode 請求上傳檔案 響應可以上傳檔案 向 namenode 請求,上傳到哪幾台 datanode namenode 返回,指定檔案上傳的 datanode 節點資料 通過獲取到的 namenode 節點資訊,客戶端向乙個節點傳送通訊,開通資料通訊管道 確認建立通道 建立 fsdata...
Hadoop HDFS讀寫流程
1 客戶端呼叫 distributedfilesystem 的 open 方法開啟檔案。2 distributedfilesystem 用 rpc 連線到 namenode 請求獲取檔案的資料塊的資訊 namenode 返回檔案的部分或者全部資料塊列表 對於每個資料塊,namenode 都會返回該資...