温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SPARK大数据计算BUG处理:

发布时间:2020-07-05 09:18:23 来源:网络 阅读:682 作者:谁伴我闯荡 栏目:大数据

大数据计算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缓存


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI