您好,登錄后才能下訂單哦!
大數據計算BUG處理:
程序修改前資源情況:
Driver : 1臺
Worker : 2臺
程序提交申請內存資源 : 1G內存
內存分配情況 :
1. 20%用于程序運行
2. 20%用于Shuffle
3. 60%用于RDD緩存
單條TweetBean大小 : 3k
1. 內存溢出
原因:因為程序會把所有的TweetBean查詢出來并且合并(union),該操作在內存中進行。則某個campaign數據量較大時,如500W數據,則500W*10k=50G,超出內存限制。
解決方法: 先按數據量切分task,避免單個task有很多數據造成內存溢出。把所有的task切分完成放到task列表中。循環task列表,當取出的task的數據量大于200000時,合并所有的數據并拆分成16個RDD分片。循環取task列表直至結束。
批量取200000數據的原因:200000*3k=600M,兩臺機器可用于程序運行的內存=2(機器數)* 2G(程序申請的內存大小) * 0.2(用于程序運行的內存比例) = 800M,可以滿足存儲200000數據,避免內存溢出。
2. 運行緩慢
原因:因為兩臺機器,每臺機器可用于shuffle的內存大小 = 2(機器數)* 1G(程序申請的內存大小)* 0.2(用于程序運行的內存比例)= 400M。
200000(批量處理的數據量)* 3k(單條TweetBean大小)= 600M,批量Shuffle的數據量大于機器可用內存,所以數據會Flush到硬盤,導致讀取數據緩慢。
解決方法:調整程序Shuffle可用內存,如下:
程序申請內存資源:2G
內存分配情況 :
1. 20%用于程序運行
2. 60%用于Shuffle
3. 20%用于RDD緩存
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。