hdfs檔案上傳及下載的流程
阿新 • • 發佈:2018-12-03
1.檔案上傳的流程
1)客戶端向namenode傳送檔案上傳的請求
2)namenode會進行一系列的檢查:
- 父目錄是否存在
- 檔案是否已經上傳
- 是否有檔案上傳許可權等
- 如果檢查沒問題,則會發送允許上傳的響應
3)客戶端傳送真正的上傳請求 包含重要的資訊 檔案的大小(或長度)
4)namenode會向客戶端返回上傳檔案的節點。
- 根據檔案的大小進行計算返回的節點數的206/128M=2 2*副本3=6個節點 - 返回哪些節點?: - 根據距離和空間 - 先返回客戶端所在機器節點>>>>同機架的節點>>>>>不同機架的節點
5)客戶端開始準備上傳
6)客戶端對資料進行邏輯切塊
7)客戶端開始上傳第一個資料塊
8)客戶端構建第一個資料塊的pipline
- 客戶端—-》hadoop01——>hadoop02——》hadoop03擴散
- 同時會開啟一個阻塞服務,這個服務的作用
- 1)用於檢測上傳的檔案是否和原檔案一樣
- 2)等待客戶端上傳成功的響應
9)客戶端開始進行真正的資料上傳,最終上傳成功之後,給客戶端響應
10)關閉當前的pipline
11)開始進行第二個塊的上傳,步驟重複 8,9,10
12)所有的塊都上傳成功之後 迴向namenode響應
2.檔案下載的流程
1)客戶端向namenode傳送檔案下載的請求
2)namenode也會進行一系列的檢查
檔案是否存在,是否有許可權等
如果這一系列的檢查沒有問題,這個時候開始查詢自己的元資料庫
返回資料對應的塊以及塊的儲存位置給客戶端
例如:
hadoop.tar.gz
blk_9988789:hadoop01 hadoop02
blk_9988790:hadoop02 hadoop03
3)客戶端拿到資料快的儲存資訊,開始進行第一個塊的下載
從哪一個節點下載?就近原則,優先選擇客戶端所在的節點》》》同機架》》》不同機架 如果塊下載失敗怎麼辦?會再進行嘗試一次, 如果還失敗客戶端會將這個失敗的節點返回給namenode 同時會繼續從另外的節點進行下載這個塊。
4)第一個塊下載完成之後,會進行crc校驗,如果校驗通過 則認為下載成功。
5)開始進行第二個塊的下載,重複步驟4,進行檔案追加
6)當所有的資料塊下載成功之後,客戶端向namenode反饋