Presto调优总结

Presto进行大批量的数据计算。一开始是串行执行每个query,需要很长的时间才能计算完成。查看服务器占用以后,发现资源利用率很低,因此,决定使用并行计算,提高资源利用率。
Presto集群配置情况:

角色 cpu 内存
coordinator 4核 16G
worker 8核 32G
worker 8核 32G
问题与分析 当开启并行以后,发现presto出现了重启的现象,并且并行的任务数越多重启的频率越频繁,并且参考https://cloud.tencent.com/developer/article/1156796调整presto内存参数之后问题依旧。
【Presto调优总结】配置如下:
jvm.config: -Xmx 15GBconfig.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,问题解决。

    推荐阅读