當某台機器上的乙個datanode程序down掉,hdfs為了保證檔案的副本滿足設定的副本數,會進行資料塊的恢復操作。塊恢復操作主要受兩個引數影響:
a)dfs.namenode.replication.work.multiplier.per.iteration namenode計算集群每個週期每個datanode平均恢復的資料塊數量;如果該引數配置得太小,則dfs.namenode.replication.max-streams配置得再大沒有用;
b)dfs.namenode.replication.max-streams單個datanode最大同時恢復的塊數量,可以間接控制datanode恢復資料塊的帶來的網路等壓力;
同時,資料塊恢復與檔案系統讀寫檔案一樣,不會受限制移動資料塊引數的限制,該引數做balance的時候才起作用:
hdfs dfsadmin -setbalancerbandwidth 62914563
以上所有測試場景檔案大小為1mb,3臺作為datanode的機器為記憶體大小為16gb,網絡卡為1000mb。(下面所有的網路圖以最右邊的乙個波形圖作為測試的網路值)
引數dfs.namenode.replication.max-streams=600,需要恢復資料塊數量18016,兩個datanode節點參與恢復,則每個節點平均需要恢復9008。
則每個節點1分鐘修復近1000個塊,30個節點每分鐘修復3000個塊,那麼3百萬個塊需要100分鐘左右
從網絡卡的角度計算,每台機器1秒鐘輸出資料量為20mb,則1分鐘輸出資料量為20*60=1200mb,則10分鐘輸出流量為12000mb,因為乙個檔案大小為1mb,則大約為12000個檔案,可能其中有些資料塊出現過傳輸失敗然後又重新傳輸,因此與評價每個節點修復9008個資料塊差不多。
引數dfs.namenode.replication.max-streams=3000,需要恢復資料塊數量24618,兩個datanode節點參與恢復,則每個節點平均需要恢復12308。
時間6分鐘,每分鐘完成2051(每3秒完成200個),30個節點每分鐘完成61530,50分鐘完成300萬資料塊修復。
該網路資料為測試場景1網絡卡資料的2倍,因此相同時間內完成資料量翻倍。
其中一台機器網路情況
由前兩個測試結果可以看出,隨著dfs.namenode.replication.max-streams配置引數增大,資料塊恢復速度在加快,網路速度也在增加。引數dfs.namenode.replication.max-streams=3000,需要恢復資料塊數量34780,3個datanode節點參與恢復,其中兩個datanode在同一臺機器,所有單機器參與修復的執行緒可以達到3000*2個,則每個節點平均需要恢復11593。
共花費時間15分鐘,平均每分鐘每個節點772個塊左右。
其中一台機器網路情況
由第三個測試可以看出,雖然有3有三個datanode參與資料塊修復,因為恢復的執行緒數量太多,導致部分資料塊恢復超時,這部分資料塊幾分鐘後需要重新恢復,多耗費了一段時間,從上圖的第二個波形圖可以看出,在15:33,輸出的網路流量幾乎變為0,大約4分鐘後又有輸出網路流量,如果忽略這部分時間,則恢復資料塊花費時間為7分鐘,則平均每個節點每分鐘恢復資料塊則為1656個塊,是之前計算結果的2倍,因此同時執行的恢復資料塊的執行緒數量不是越多越好。需要根據集群情況找乙個合理值。引數dfs.namenode.replication.max-streams=6000,需要恢復資料塊數量25947,3個datanode節點參與恢復,每個datanode在單獨的一台機器上,所有單機器參與修復的執行緒可以達到3000*2個,則每個節點平均需要恢復8649。
總耗時8分鐘,每分鐘每個節點修復1235
其中一台機器網路情況
由第三,四兩個測試可以看出,雖然每個datanode均有6000個執行緒參與資料塊恢復,單台機器啟動乙個datanode比單臺機器啟動多個datanode效能要好,當然如果執行緒數相對比較小,因為兩者結果大致相等。
另外在單台機器上啟動兩個datanode與啟動乙個datanode的環境中,進行10kb大小檔案大小的寫測試,結果一樣,通過觀察網路資料,最大僅可達到13mb左右,根據之前對client與datanode通訊效能分析,讀寫小檔案過程中,更多的時間消耗在於磁碟互動,因此寫小檔案流量上不去,應該跟磁碟效能有關係,測試環境使用sata盤,如果使用ssd,或sas磁碟效果應該會更好。
Hadoop系列之HDFS 資料塊 12
要把大檔案儲存在 hdfs上,hdfs 會把大檔案分割成小塊,即我們通常說的資料塊 block 它是 hadoop 分布式檔案系統最小的儲存單元,而且我們沒辦法決定指定塊的儲存節點位址,這些 namenode 會替我們決定。資料塊預設大小是 128mb,比作業系統裡面的塊概念要大很多 作業系統塊大小...
hdfs合併塊 HADOOP知識梳理之HDFS
hdfs是乙個分布式檔案系統 管理服務 提供檔案的讀取服務 寫入服務 檢視目錄資訊服務 hdfs是一套分布式軟體系統,裡面有很多服務角色 namenode datanode secondary namenode 客戶端 檔案在hdfs中分塊儲存的,乙個檔案會被分成多個塊 按照128m分塊 每個塊 隨...
HDFS 資料塊損壞
由斷電或其它原因引起的hdfs服務不正常或者塊損壞 一 檢查hdfs的檔案的健康狀態hdfs fsck 二 檢視損壞的塊以及檔案的對應關係hdfs fsck list corruptfileblocks 三 解決辦法 資料可以從其它地方找到 比如mysql 將資料重新重新整理乙份到hdfs上 hdf...