下面是斷斷續續的記錄,後續會出流程圖,以及原始碼片段
一:建立資料管道 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...