技.藝.道:“地攤經濟”話“HDFS文件讀寫”

一、HDFS組件介紹

由於這是一篇原創文章,爲了保證其原創性(和權威性),我不得不親手從官網截來一張圖:

Namenode:名稱節點,作爲master,負責namespace管理(其實就是目錄結構,這也是叫“namenode的原因”),block管理(其中包括 filename->block,block->datanode list的對應關係)

Datanodes:數據節點,作爲slave,負責數據的具體存儲

Client:客戶端,作爲數據讀寫請求的發起方。

講到這裏,忍不住要作圖一幅:

 如果大家視力尚可,應該是可以看得懂的。下面我們講HDFS的讀數據流程。

二、HDFS讀數據流程

1.正經流程圖

2.流程說明

  1. 客戶端->Namenode:請求下載文件a
  2. Namenode->客戶端:返回目標文件的元數據,即a文件涉及到哪些數據塊,這些數據塊存在於哪些Datanode上。
  3. 客戶端->Datanode:請求讀數據
  4. Datanode->客戶端:傳輸數據

(第3、4步驟通常會進行多次,因爲通常一個文件會涉及到多個數據塊。這類似於一個訂單通常會涉及到多個商品)

3. “地攤場景”類比圖

4.對白

客戶A:老闆,我要一瓶冰闊落、一包辣條、一輛自行車!

老闆兼前臺:好的,冰闊落在攤位D,辣條在攤位A,自行車在攤位E,您直接去拿就可以啦!

客戶A找到攤位D,對攤位D的工作人員說:你好,我要一瓶冰闊落。

攤位D的工作人員從冰箱裏取出一瓶冰闊落遞到客戶A手中,說:您好,這是您要的冰闊落,請拿好哈!

客戶A又找到攤位A,對攤位A的工作人員說:你好,我要一包辣條。

攤位A的工作人員從貨架上取出一包辣條遞到客戶A手中,說:您好,這是您要的辣條,請拿好哈!

客戶A最後找到攤位E,對攤位E的工作人員說:你好,我要一輛自行車。

攤位E的工作人員從後面推出一輛自行車,交到客戶A手中,說:您好,這是您要的自行車,請推好哈!

三、HDFS寫數據流程

1.正經流程圖

2.流程說明

  1. 客戶端->Namenode:請求上傳文件a。
  2. Namenode->客戶端:返回請求結果。當HDFS未滿且運轉正常時,會返回“允許上傳”,否則返回“不允許上傳”。
  3. 客戶端->Namenode:請求上傳第1個block(數據塊,大小可配),申請獲取可以存儲的Datanode列表。
  4. Namenode->客戶端:返回可用的Datanode列表。如dn1,dn2,dn3。
  5. 客戶端->Datanode->Datanode->Datanode:請求建立block傳輸通道。這叫流水線複製機制。即:同一個block塊客戶只上傳一份到某個節點如a,其他某個節點b會從這個結點a複製一份,然後再有其他結點c從該節點b複製,以此類推,直到副本數達到配置文件中設置的值。
  6. Datanode->Datanode->Datanode->客戶端:應答成功。
  7. 客戶端->Datanode->Datanode->Datanode:傳輸數據包。
  8. 客戶端->Namenode:通知傳輸完成。

3. “地攤場景”類比圖

4.對白

客戶A:老闆,現在可以寄賣東西嗎?

老闆兼前臺:可以啊!我們店業務正常,且有空位。

客戶A:好的,我要寄賣一包辣條!

老闆兼前臺:找到三個有空位的攤位攤位A,攤位B,攤位C您直接拿過去就可以啦!

客戶A找到攤位A,對攤位A的工作人員說:你好,我要寄賣一包辣條。

(攤位A的工作人員聽到後,又對攤位B說:嘿老兄,有人要寄賣東西了哈!)

(攤位B的工作人員聽到後,又對攤位C說:嘿老妹,有人要寄賣東西了哈!)

攤位A的工作人員對客戶A說:好的先生,可以的。您把辣條給我就行了。

(攤位B的工作人員對攤位A的工作人員說:好的老兄,等會辣條來了,我從你這複製一份就可以。)

(攤位C的工作人員對攤位B的工作人員說:好的老兄,等會辣條來了,我從你這複製一份就可以。)

客戶A把一包辣條交給了攤位A的工作人員,說:這就是我要寄賣的辣條了,給你。

(攤位A的工作人員把東西複製一份給攤位B的工作人員說:這就是客人要寄賣的辣條了,給你。)

(攤位B的工作人員把東西複製一份給攤位C的工作人員說:這就是客人要寄賣的辣條了,給你。)

客戶A臨走告訴老闆兼前臺:老闆,要寄賣的東西我已經交給攤位工作人員了哈,我走啦!

好了,我已經沒什麼好說的了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章