大數(shù)據(jù)計算BUG處理:
創(chuàng)新互聯(lián)專注于武山網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供武山營銷型網(wǎng)站建設,武山網(wǎng)站制作、武山網(wǎng)頁設計、武山網(wǎng)站官網(wǎng)定制、成都微信小程序服務,打造武山網(wǎng)絡公司原創(chuàng)品牌,更為您提供武山網(wǎng)站排名全網(wǎng)營銷落地服務。
程序修改前資源情況:
Driver : 1臺
Worker : 2臺
程序提交申請內(nèi)存資源 : 1G內(nèi)存
內(nèi)存分配情況 :
1. 20%用于程序運行
2. 20%用于Shuffle
3. 60%用于RDD緩存
單條TweetBean大小 : 3k
1. 內(nèi)存溢出
原因:因為程序會把所有的TweetBean查詢出來并且合并(union),該操作在內(nèi)存中進行。則某個campaign數(shù)據(jù)量較大時,如500W數(shù)據(jù),則500W*10k=50G,超出內(nèi)存限制。
解決方法: 先按數(shù)據(jù)量切分task,避免單個task有很多數(shù)據(jù)造成內(nèi)存溢出。把所有的task切分完成放到task列表中。循環(huán)task列表,當取出的task的數(shù)據(jù)量大于200000時,合并所有的數(shù)據(jù)并拆分成16個RDD分片。循環(huán)取task列表直至結(jié)束。
批量取200000數(shù)據(jù)的原因:200000*3k=600M,兩臺機器可用于程序運行的內(nèi)存=2(機器數(shù))* 2G(程序申請的內(nèi)存大小) * 0.2(用于程序運行的內(nèi)存比例) = 800M,可以滿足存儲200000數(shù)據(jù),避免內(nèi)存溢出。
2. 運行緩慢
原因:因為兩臺機器,每臺機器可用于shuffle的內(nèi)存大小 = 2(機器數(shù))* 1G(程序申請的內(nèi)存大?。? 0.2(用于程序運行的內(nèi)存比例)= 400M。
200000(批量處理的數(shù)據(jù)量)* 3k(單條TweetBean大小)= 600M,批量Shuffle的數(shù)據(jù)量大于機器可用內(nèi)存,所以數(shù)據(jù)會Flush到硬盤,導致讀取數(shù)據(jù)緩慢。
解決方法:調(diào)整程序Shuffle可用內(nèi)存,如下:
程序申請內(nèi)存資源:2G
內(nèi)存分配情況 :
1. 20%用于程序運行
2. 60%用于Shuffle
3. 20%用于RDD緩存