數(shù)據(jù)傾斜
在上面的任務(wù)處理中出現(xiàn)了shuffle的操作 。shuffle也叫洗牌 , 在上面講partition和分布式計(jì)算原理的時(shí)候 , 我們知道分布式計(jì)算就是把數(shù)據(jù)劃分很多個(gè)數(shù)據(jù)片存放在很多個(gè)不同的節(jié)點(diǎn)上 , 然后在這些數(shù)據(jù)片上并發(fā)執(zhí)行同樣的計(jì)算任務(wù)來(lái)達(dá)到分布式計(jì)算的目的 , 這些任務(wù)互相是獨(dú)立的 , 比如我們執(zhí)行一個(gè)count操作 , 也就是計(jì)算這個(gè)數(shù)據(jù)的行數(shù) 。實(shí)際的操作其實(shí)是針對(duì)每個(gè)數(shù)據(jù)分片 , 也就是partition分別執(zhí)行count的操作 。比如我們有3個(gè)分片分別是A,B,C , 那執(zhí)行count的時(shí)候其實(shí)是并發(fā)3個(gè)線程 , 每個(gè)線程去計(jì)算一個(gè)partition的行數(shù) , 他們都計(jì)算完畢后 , 再匯總到driver程序中 , 也就是A,B,C這三個(gè)計(jì)算任務(wù)的計(jì)算過(guò)程是彼此獨(dú)立互不干擾的 , 只在計(jì)算完成后進(jìn)行聚合 。但并不是所有的計(jì)算任務(wù)都可以這樣獨(dú)立的 , 比如你要執(zhí)行一個(gè)groupby的sql操作 。就像上面的圖中 , 我要先把數(shù)據(jù)按單詞分組 , 之后才能做其他的統(tǒng)計(jì)計(jì)算 , 比如統(tǒng)計(jì)詞頻或者其他相關(guān)操作 。那么首先spark要做的是根據(jù)groupby的字段做哈希 , 相同值的數(shù)據(jù)傳送到一個(gè)固定的partition上 。這樣就像上圖一樣 , 我們把數(shù)據(jù)中擁有相同key值的數(shù)分配到一個(gè)partition , 這樣從數(shù)據(jù)分片上就把數(shù)據(jù)進(jìn)行分組隔離 。然后我們要統(tǒng)計(jì)詞頻的話 , 只需要才來(lái)一個(gè)count操作就可以了 。shuffle的出現(xiàn)是為了計(jì)算能夠高效的執(zhí)行下去 , 把相似的數(shù)據(jù)聚合到相同的partition上就可以方便之后的計(jì)算任務(wù)依然是獨(dú)立隔離的并且不會(huì)觸發(fā)網(wǎng)絡(luò)IO 。這是方便后續(xù)計(jì)算的設(shè)計(jì)模式 , 也就是節(jié)省了后續(xù)一系列計(jì)算的開(kāi)銷 。但代價(jià)是shuffle本身的開(kāi)銷 , 而且很多情況下shuffle本身的開(kāi)銷也是很大的 。尤其是shuffle會(huì)因?yàn)閿?shù)據(jù)傾斜而出現(xiàn)著名的長(zhǎng)尾現(xiàn)象 。
根據(jù)shuffle的理論 , 相似的數(shù)據(jù)會(huì)聚合到同一個(gè)partition上 。但是如果我們的數(shù)據(jù)分布不均勻會(huì)出現(xiàn)什么情況呢? 比如我們要針對(duì)職業(yè)這個(gè)字段做groupby的操作 , 但是如果100W行數(shù)據(jù)中有90W行的數(shù)據(jù)都是程序員這個(gè)職業(yè)的話 , 會(huì)出現(xiàn)什么情況? 你會(huì)發(fā)現(xiàn)有90W行的數(shù)據(jù)都跑到了同一個(gè)partition上造成一個(gè)巨大的partition 。這樣就違背了分布式計(jì)算的初衷 , 分布式計(jì)算的初衷就是把數(shù)據(jù)切分成很多的小數(shù)據(jù)分布在不同的節(jié)點(diǎn)內(nèi)存中 , 利用多個(gè)節(jié)點(diǎn)的并行計(jì)算能力來(lái)加速計(jì)算過(guò)程 。但是現(xiàn)在我們絕大部分的數(shù)據(jù)都匯聚到了一個(gè)partition中 , 這樣就又變成了單點(diǎn)計(jì)算 。而且這里還有一個(gè)特別大的問(wèn)題 , 就是我們?cè)谔峤蝗蝿?wù)到hadoop yarn上的時(shí)候 , 申請(qǐng)的資源是固定且平均分配的 。比如我申請(qǐng)10個(gè)container去計(jì)算這份數(shù)據(jù) , 那這10個(gè)container的資源是相等的 , 哪個(gè)也不多 , 哪個(gè)也不少 。但是我們的數(shù)據(jù)分片的大小卻是不一樣的 , 比如90W行的分片需要5個(gè)G的內(nèi)存 , 但是其他的數(shù)據(jù)分片可能1個(gè)G就夠了 。所以如果我們不知道有數(shù)據(jù)傾斜的情況出現(xiàn)而導(dǎo)致申請(qǐng)的資源教少 , 就會(huì)導(dǎo)致任務(wù)OOM而掛掉 。而如果我們?yōu)榱司薮蟮臄?shù)據(jù)分片為每個(gè)container都申請(qǐng)了5G的資源 , 那又造成了資源浪費(fèi) 。
數(shù)據(jù)傾斜和shuffle是業(yè)界經(jīng)典難題 , 很難處理 。在很多大數(shù)據(jù)產(chǎn)品中都會(huì)有根據(jù)數(shù)據(jù)大小自動(dòng)調(diào)整申請(qǐng)資源的功能 。而數(shù)據(jù)傾斜就是這種功能絕對(duì)的天敵 。處理不好的話 , 要不會(huì)變成申請(qǐng)過(guò)大資源承包集群 , 要不會(huì)申請(qǐng)過(guò)小資源導(dǎo)致任務(wù)掛掉 。而我們?cè)跍y(cè)試階段要做的 , 就是模擬出這種數(shù)據(jù)傾斜的數(shù)據(jù) , 然后驗(yàn)證ETL程序的表現(xiàn) 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 男人如何處理婆媳關(guān)系 聰明男人處理婆媳關(guān)系
- 目前最好的cpu排名 電腦cpu處理器最新排名
- iphone手機(jī)丟失解決措施 蘋(píng)果手機(jī)被盜怎么找回處理
- 該如何處理婆媳關(guān)系 怎么解決婆媳關(guān)系
- 老婆出軌了該怎么處理才是最好的 出軌的婚姻能撐多久
- 老婆外遇怎樣處理 怎樣處理老婆出軌的情況
- ?老公外遇怎么處理 老公有外遇怎么辦
- 老公出軌后的真實(shí)心理 男人出軌后女人錯(cuò)誤的處理方法
- 二婚夫妻怎么處理財(cái)務(wù)問(wèn)題 二婚夫妻誰(shuí)管錢(qián)好
- ubuntu上不了網(wǎng)處理方法 ubuntu上不了網(wǎng)怎么辦
