溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SPARK大數(shù)據(jù)計(jì)算BUG處理:

發(fā)布時(shí)間:2020-07-05 09:18:23 來(lái)源:網(wǎng)絡(luò) 閱讀:697 作者:誰(shuí)伴我闖蕩 欄目:大數(shù)據(jù)

大數(shù)據(jù)計(jì)算BUG處理:


程序修改前資源情況:

Driver : 1臺(tái)

Worker : 2臺(tái)

程序提交申請(qǐng)內(nèi)存資源 : 1G內(nèi)存

內(nèi)存分配情況 : 

1. 20%用于程序運(yùn)行

2. 20%用于Shuffle

3. 60%用于RDD緩存


單條TweetBean大小 : 3k


1. 內(nèi)存溢出

原因:因?yàn)槌绦驎?huì)把所有的TweetBean查詢出來(lái)并且合并(union),該操作在內(nèi)存中進(jìn)行。則某個(gè)campaign數(shù)據(jù)量較大時(shí),如500W數(shù)據(jù),則500W*10k=50G,超出內(nèi)存限制。

解決方法: 先按數(shù)據(jù)量切分task,避免單個(gè)task有很多數(shù)據(jù)造成內(nèi)存溢出。把所有的task切分完成放到task列表中。循環(huán)task列表,當(dāng)取出的task的數(shù)據(jù)量大于200000時(shí),合并所有的數(shù)據(jù)并拆分成16個(gè)RDD分片。循環(huán)取task列表直至結(jié)束。

批量取200000數(shù)據(jù)的原因:200000*3k=600M,兩臺(tái)機(jī)器可用于程序運(yùn)行的內(nèi)存=2(機(jī)器數(shù))* 2G(程序申請(qǐng)的內(nèi)存大?。?* 0.2(用于程序運(yùn)行的內(nèi)存比例) = 800M,可以滿足存儲(chǔ)200000數(shù)據(jù),避免內(nèi)存溢出。



2. 運(yùn)行緩慢

原因:因?yàn)閮膳_(tái)機(jī)器,每臺(tái)機(jī)器可用于shuffle的內(nèi)存大小 = 2(機(jī)器數(shù))* 1G(程序申請(qǐng)的內(nèi)存大?。? 0.2(用于程序運(yùn)行的內(nèi)存比例)= 400M。

200000(批量處理的數(shù)據(jù)量)* 3k(單條TweetBean大?。? 600M,批量Shuffle的數(shù)據(jù)量大于機(jī)器可用內(nèi)存,所以數(shù)據(jù)會(huì)Flush到硬盤,導(dǎo)致讀取數(shù)據(jù)緩慢。

解決方法:調(diào)整程序Shuffle可用內(nèi)存,如下:

程序申請(qǐng)內(nèi)存資源:2G

內(nèi)存分配情況 : 

1. 20%用于程序運(yùn)行

2. 60%用于Shuffle

3. 20%用于RDD緩存


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI