一 問題背景
項目中遇到大數(shù)據(jù)任務(wù)執(zhí)行時間比較長,需要進行優(yōu)化,使得大數(shù)據(jù)的任務(wù)執(zhí)行時間優(yōu)化至客戶可以接受的時間。
二 原因分析
·業(yè)務(wù)場景分析
本場景下的大數(shù)據(jù)任務(wù)主要對數(shù)據(jù)進行mapreduce操作,該任務(wù)包含兩個子任務(wù),第一個子任務(wù)的map(每個map的大小為128M)個數(shù)為4300左右(這些map任務(wù)都是分散在不同的服務(wù)器上,TaiShan集群有6400+個核可以處理,可以充分利用TaiShan多核優(yōu)勢),map執(zhí)行時間為10分鐘,但是reduce個數(shù)固定寫為200個(即最多有200個核并行處理reduce任務(wù)),reduce執(zhí)行時間為1小時30分鐘左右,耗時較長,同時reduce個數(shù)相比map個數(shù)很少,不能充分利用TaiShan多核優(yōu)勢,第二個子任務(wù)也是reduce階段耗時較長
·服務(wù)器基礎(chǔ)性能分析
在大數(shù)據(jù)任務(wù)執(zhí)行時,cpu利用率不高,磁盤io以及網(wǎng)卡IO都沒有瓶頸,不過網(wǎng)卡中斷需要進行綁核,同時磁盤緩存參數(shù)可以進行調(diào)優(yōu)來提升性能
三解決方案
3.1 網(wǎng)卡調(diào)優(yōu)
3.1.1 中斷綁核
中斷親和度描述為可以為特定中斷提供響應(yīng)的一組CPU,如果應(yīng)用程序可以通過關(guān)聯(lián)到相關(guān)的CPU,在相同的CPU上下文中處理接收到的數(shù)據(jù)包,則可以減少等待時間,提高CPU利用率。
因此,我們可以將處理網(wǎng)卡中斷的CPU core設(shè)置在網(wǎng)卡所在的NUMA上,從而減少跨NUMA的內(nèi)存訪問所帶來的額外開銷,提升網(wǎng)絡(luò)處理性能。
3.2磁盤參數(shù)調(diào)優(yōu)
3.2.1 磁盤讀預(yù)取參數(shù)
/sys/block/sdX/queue/read_ahead,這個參數(shù)對順序讀非常有用,意思是,一次提前讀多少內(nèi)容,無論實際需要多少。默認一次讀128kb遠小于要讀的,設(shè)置大些對讀大文件非常有用,可以有效的減少讀seek的次數(shù),這個參數(shù)可以使用blockdev–setra來設(shè)置,setra設(shè)置的是多少個扇區(qū),所以實際的字節(jié)是除以2,比如設(shè)置512,實際是讀256個字節(jié).
原服務(wù)器值是128kb,設(shè)置為4096Kb。
3.2.2 緩存寫入磁盤參數(shù)調(diào)整
/proc/sys/vm/dirty_ratio 從20改成40
這個參數(shù)控制文件系統(tǒng)的文件系統(tǒng)寫緩沖區(qū)的大小,單位是百分比,表示系統(tǒng)內(nèi)存的百分比,表示當寫緩沖使用到系統(tǒng)內(nèi)存多少的時候,開始向磁盤寫出數(shù)據(jù)。增大之會使用更多系統(tǒng)內(nèi)存用于磁盤寫緩沖,也可以極大提高系統(tǒng)的寫性能。
/proc/sys/vm/dirty_background_ratio 從10改為20
這個參數(shù)控制文件系統(tǒng)的pdflush進程,在何時刷新磁盤。單位是百分比,表示系統(tǒng)內(nèi)存的百分比,意思是當寫緩沖使用到系統(tǒng)內(nèi)存多少的時候,pdflush開始向磁盤寫出數(shù)據(jù)。
增大之會使用更多系統(tǒng)內(nèi)存用于磁盤寫緩沖,也可以極大提高系統(tǒng)的寫性能。
/proc/sys/vm/dirty_writeback_centisecs 從500改為800
這個參數(shù)控制內(nèi)核的臟數(shù)據(jù)刷新進程pdflush的運行間隔。單位是1/100秒。缺省數(shù)值是500,也就是5秒
/proc/sys/vm/dirty_expire_centisecs 從3000改為30000
這個參數(shù)聲明Linux內(nèi)核寫緩沖區(qū)里面的數(shù)據(jù)多“舊”了之后,pdflush進程就開始考慮寫到磁盤中去。單位是1/100秒。缺省是30000,也就是30秒的數(shù)據(jù)就算舊了,將會刷新磁盤。
對于特別重載的寫操作來說,這個值適當縮小也是好的,但也不能縮小太多,因為縮小太多也會導(dǎo)致IO提高太快
3.3 應(yīng)用程序調(diào)優(yōu)
3.3.1 Reduce個數(shù)優(yōu)化
在大數(shù)據(jù)平臺調(diào)整reduce設(shè)置,使最大reduce個數(shù)從原來的200改為500,性能提升明顯
3.3.2 Reduce并行copy參數(shù)maprd.reduce.parallel.copies優(yōu)化
Reduce的并發(fā)拷貝數(shù)默認是5,后來調(diào)整至30可以提升reduce的最大并發(fā)拷貝數(shù)
經(jīng)過調(diào)優(yōu),最終大數(shù)據(jù)任務(wù)執(zhí)行時間有明顯提升
四 總結(jié)
調(diào)優(yōu)后,TaiShan集群服務(wù)器上任務(wù)執(zhí)行時間有明顯改善。對相關(guān)思路總結(jié)如下:
·分析確認大數(shù)據(jù)任務(wù)執(zhí)行時各個階段的耗時,重點分析耗時階段,提升reduce并發(fā),充分利用TaiShan多核優(yōu)勢。
·明確性能瓶頸,并對服務(wù)器各個子模塊進行參數(shù)調(diào)優(yōu)。