hdfs原始碼深度解析 四 檔案上傳全流程

2021-10-25 16:16:35 字數 907 閱讀 5945

下面是斷斷續續的記錄,後續會出流程圖,以及原始碼片段

一:建立資料管道  dfsoutputstream setpipeline(nextblockoutputstream)

二: 啟動了responseprocessor,用來監聽我們乙個packet傳送是否成功

initdatastreaming() ->啟動乙個執行緒->run()讀取下游結果->如果傳送成功就把ackqueue裡packet移除

dataqueue和ackqueue目的是容錯。

資料以packat寫到dataqueue,datastreamer將資料寫入datanode同時寫到ackqueue,如果寫到datanode成功了ackqueue.removefirst()移除packet

如果寫datanode失敗了,ackqueue將packet放到dataqueue。

flush() 到dataxceiverserver->dataxceiver

packet->存到ackqueue同時往下游傳送->如果下游寫入成功,ackqueue中將packet移除,如果寫不成功,ackqueue中資料再往下游發

如果不是資料管道最後乙個節點,讀取下游的結果 

管道如果沒有建立成功,就移除block,跟申請相反的操作,然後將host放到exclude中,while迴圈重試,判斷exclude長度,申請block將這個沒成功的host排除

寫資料容錯分析

寫資料寫著寫著失敗了怎麼辦??

datastreamer->run()->one.writeto(blockstream)->失敗了errorindex變為0,haserror=true;->關閉各種流->ackqueue資料挪到dataqueue然後重新處理

重新建立資料管道,把出問題的node記錄下來

HDFS 四 檔案寫入解析

1 客戶端向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。2 namenode返回是否可以上傳。3 客戶端請求第乙個 block上傳到哪幾個datanode伺服器上。4 namenode返回3個datanode節點,分別為dn1 dn2 dn3。5 客戶端請求...

Spring原始碼解析(四) 元件註冊4

給容器中註冊元件 1 包掃瞄 元件標註註解 controller service repository component 自己寫的類 2 bean 匯入的第三方包裡面的元件 3 import 快速給容器中匯入乙個元件 1 import 要匯入到容器中的元件 容器中就會自動註冊這個元件,id預設是全...

Django原始碼解析 四 中介軟體

django原始碼解析 一 開篇 django原始碼解析 二 manage.py django原始碼解析 三 django開發伺服器,wsgi規範實現 django原始碼解析 四 中介軟體 django原始碼解析 五 url配置 django中介軟體型別 django的中間型別分為五種 請求 req...