記一次Hadoop集群資料上傳緩慢案例分析

2021-10-24 16:25:59 字數 2378 閱讀 2120

手上管理的其中乙個hadoop集群,承接著大量的資料流量,一直以來執行平穩,最近突然發現集群有時會出現mr作業執行緩慢,put檔案至hdfs偶發速度慢的問題,像大資料集群這種問題,有點疑難雜症的味道,本次也是經歷了10多個小時的定位才真正把問題解決。

使用客戶端節點執行hdfs dfs -put檔案上傳至hdfs偶發慢,集群內部節點put檔案也出現偶發速度慢;檢視hadoop集群相關監控指標未見異常;

業務反饋入庫作業有積壓,資料積壓於上傳介面機;

檢視某mr作業發現101個map task執行緩慢,101個map task分布在多個節點,資料量與成功跑完的task無較大差異,暫無法定位到是否是某些節點的問題。

檢視hadoop集群相關監控指標,namenode rpc連線數、rpc佇列,hdfs使用情況、小檔案數均為正常,集群服務沒問題;

使用fsck命令檢視多個上傳慢檔案的block塊所在的dn節點是否重疊來判斷是否存在問題節點,發現涉及的ip較多,沒有明顯規律;

hdfs fsck –block filename –files –blocks -locations
嘗試檢視所有datanode服務日誌,看是否有異常日誌;執行egrep -o 「slow.*?(took|cost)」 /data01/var/log/hadoop/hdfs/*log | sort | uniq -c,發現slow blockreceiver write packet to mirror took提示遠高於其他資訊,初步判定是網路問題;

因為慢現象為偶發現象,所以不可能是所有節點都慢,懷疑是部分節點慢,進一步分析slow blockreceiver write packet to mirror took的資訊,發現某幾個的slow blockreceiver write packet to mirror took提示明顯高於其他節點,達到100多萬,該批節點很有可能存在問題。此處需要說明:如果所有節點的slow日誌大致一樣,那無法說明問題;

既然懷疑是網路問題,於是對相關節點進行丟包率和網速測試;發現某一網段部分節點丟包率嚴重達到60%,且網速僅有100多kb/s,這對於10gb頻寬的業務網顯然不正常;注意:ping 測試丟包率時需使用ping大包的方式進行,使用ping –s指定包的大小,否則無法測出丟包率,謹記;

聯絡網路運維的同事協助排查網路問題,多次配合交換機工程師追蹤包的傳輸過程,發出網路測試,經數次測試後發現一台交換機有資料丟失現象;

交換機工程師對交換機多次測試,確定了某一網段接入交換機的乙個上聯光口存在丟包情況,將丟包的交換機口down掉,ping丟包測試和網速測試隨即正常;

交換機工程師對交換機光口進行報障修復;

業務側和平台側同時測試,再未見put任務慢現象。

既然是交換機帶來的網路問題,自然是通過修復交換機硬體故障來解決。

本次運維事件也暴露出了網路運維同事對交換機監控的不足,如果網路側能夠及時發現交換機硬體故障,也不會對上層集群產生這麼大的影響。

雖然故障原因很簡單,但是本案例的分析過程值得我們總結。事後我對hadoop原始碼提示slow blockreceiver write packet to mirror警告的**段進行了分析,發現其為資料塊橫向複製過程中超時所列印,證實了前面的猜想。

//first write the packet to the mirror:

if(mirrorout != null &&

!mirrorerror)

}catch

(ioexception e)

}

同時,我們可以總結到:

集群作業慢首先檢視集群監控指標是否正常,是否存在冷熱資料、小檔案問題;其次排查網路狀態;

datanode慢日誌可大致說明是否是網路問題;下表對常見slow日誌進行了說明;

排查網路需使用ping大包和網速測試,需多次測試;

建議網路側加強對網路層的監控,提前發現網路層硬體問題。 日誌

原因slow blockreceiver write packet to mirror

為將資料寫入對端的datanode耗時,判斷為對端的datanode慢導致

slow managewriteroscache

呼叫os介面將資料寫入快取慢

slow flushorsync或slow blockreceiver write data to disk cost

這表示在將塊寫入os快取或磁碟時存在延遲

記一次略微曲折的上傳

現在傳是傳上去了,但是沒有返回完整路徑,也不知道傳哪兒去了,這咋整 掃當前目錄啥也沒掃到 然後掃了波一級目錄,發現存在upload目錄,2.通過bp的intruder功能對字尾名進行批量fuzz,發現都被攔截,這裡又測試上傳test.aaa,內容為this is a test,發現可以上傳,那麼猜測...

記一次Excel匯入資料

使用excel匯入過程比較簡單,就是由於poi的版本,所以之前的一些方法可能不能使用了,特此開一篇文章記錄.使用poi依賴org.apache.poi poi3.17 主要 value upload method requestmethod.post public operaresult uploa...

記一次除錯

這是我最近幾個月來遇到的最棘手的乙個問題 昨天花了4個小時找出第一層次的原因 這個糾結啊,本來和老婆說好準時下班回家吃飯的,結果被這個問題拖了老久。這是乙個gradle的plugin,用來resolve公司內部的dependency的,弄完了跑測試專案的,拋乙個npe,而且npe還不在自己的 裡面。...