1. 程式人生 > >hdfs檔案上傳及下載的流程

hdfs檔案上傳及下載的流程

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反饋

在這裡插入圖片描述