HDFS的讀寫流程
阿新 • • 發佈:2020-10-23
HDFS的讀寫流程
HDFS寫流程(上傳流程)
- 需要的東西:要上傳的檔案、客戶端Client、NameNode
- 首先,需要在客戶端Client上建立一個分散式檔案系統的物件(DistributedFileSystem),然後客戶端申請向NameNode上傳檔案,NameNode會向客戶端響應是否可以上傳檔案。(判斷的標準:要申請的上傳檔案的目錄不存在,且具有寫許可權)
- 緊接著,客戶端會開一個HDFS的輸出流叫做FSDataOutputStream,請求NameNode上傳第一個檔案塊,然後NameNode會返回一個DataNode的列表(副本數)給客戶端,告訴客戶端可以上傳的檔案塊的位置在哪裡。
- 這時候,客戶端採用就近原則,先與DN1建立TCP的通訊通道(序列通道),緊接著和DN2、DN3建立通訊通道,建立通道以後,會相應的給出應答。然後客戶端就會以Packet(64KB)資料包的形式傳送資料給DN1,DN1一邊往磁碟快取資料,一邊同步資料到DN2、DN3中。
- 之後,會上傳第二個檔案塊,與上述描述情況類似。
- 最後,當兩個檔案塊的資料都上傳完以後,客戶端會告訴NameNode檔案上傳完畢,NameNode就更在元資料中更新一下元資料,整個HDFS寫流程就完畢了。
HDFS讀流程(下載流程)
- 需要的東西:客戶端Client、NameNode
- 首先,需要在客戶端建立一個分散式檔案系統的物件(DistributedFileSystem),然後客戶端會申請向NameNode下載檔案,NameNode會給客戶端響應要下載的檔案存在還是不存在。(判斷的標準:申請的檔案是存在的、且具有讀許可權)
- 緊接著,客戶端會開一個HDFS的輸入流叫做FSDataInputStream,請求NameNode來下載第一個檔案塊,然後NameNode會向客戶端返回一個DataNode的列表給客戶端,表示可以在哪些DataNode中讀取檔案塊。
- 這時候,客戶端會採用就近的原則,向第一個DN1建立通訊通道,DN1應答成功,以Packet資料包的形式傳輸資料到客戶端,並且會往本地磁碟寫資料。
- 之後,會下載第二個檔案塊,與上述的描述情況類似。
- 最後,NameDode會向客戶端通知資料傳輸完畢。