Presto进行大批量的数据计算。一开始是串行执行每个query,需要很长的时间才能计算完成。查看服务器占用以后,发现资源利用率很低,因此,决定使用并行计算,提高资源利用率。
Presto集群配置情况:
角色 | cpu | 内存 |
---|---|---|
coordinator | 4核 | 16G |
worker | 8核 | 32G |
worker | 8核 | 32G |
问题与分析
当开启并行以后,发现presto出现了重启的现象,并且并行的任务数越多重启的频率越频繁,并且参考https://cloud.tencent.com/developer/article/1156796调整presto内存参数之后问题依旧。
配置如下:
jvm.config:
-Xmx 15GB
config.propertities:
query.max-memory 2GB
query.max-memory-per-node 1GB
resources.reserved-system-memory 4GB
观察了worker的内存的占用情况,没有发现异常。
查阅coordinators所在机器的系统日志发现:
Out of memory: Kill process 324 (presto-server) score 373 or sacrifice child
[ 9138.843290] Killed process 324, UID 500, (presto-server) total-vm:13818884kB, anon-rss:6081652kB, file-rss:692kB
[10657.363339] barad_agent invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
[10657.366892] barad_agent cpuset=/ mems_allowed=0
[10657.366895] Pid: 1561, comm: barad_agent Not tainted 2.6.32-573.el6.x86_64 #1
显然,因为占用了过多的内存,系统的oom-killer直接将presto-server进程杀掉。经过咨询腾讯云发现,jvm.config的配置不仅在worker上生效也在coordinator上生效。因为Presto是master模式的,主节点上的coordinator要负责分析逻辑计划,安排执行物理计划,以及下发woker的请求,presto的master比core(worker)任务其实更重的。在并行数较多的时候,coordinator内存占用增长。
解决
升级coordinator配置到8核32G,问题解决。
网友评论