Presto因其优秀的查询速度被我们所熟知,它本身基于MPP架构,可以快速的对Hive数据进行查询,同时支持扩展Connector,目前对Mysql、MongoDB、Cassandra、Hive等等一系列的数据库都提供了Connector进行支持。是我们常用的SQL on Hadoop的解决方案。那么我们今天就来看一下,当我们选择Presto作为我们的查询引擎之后,我们需要考虑的问题。
Presto分为三类内存池,分别为GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。
SYSTEM_POOL是系统预留内存,worker初始化和执行任务必要的内存,默认为Xmx0.4 也可由resources.reserved-system-memory指定 RESERVED_POOL是最大查询内存,Presto会将当前好用内存最大的query切到该内存区域,默认为Xmx0.1 由query.max-memory-per-node配置 GENERAL_POOL其他查询内存,即除最大查询外其他query的查询内存,大小为Xmx-SYSTEM_POOL-RESERVED_POOL
整体内存配置受以下场景的影响:
需要注意的是:单纯的增大RESERVED_POOL的值并不能解决Presto的查询问题,因为RESERVED_POOL大部分时间是不参与计算的,只有满足以下情景才会被使用,而且只能被一个Query所使用。
所以三者需要配置合理的值,如果并发比较大需要SYSTEM_POOL保持默认或者稍微再大一点,RESERVED_POOL可以稍微增大到八分之一左右。
同时对于jvm OOM的问题,需要对Presto的jvm.config进行配置:
-XX:G1ReservePercent=15
-XX:InitiatingHeapOccupancyPercent=40
-XX:ConcGCThreads=8
Presto自带的监控页面只能显示当前Presto集群的状态和最近的部分查询,不能满足需求。需要对查询相关信息进行数据采集:
同时满足以下两点时,Presto便认为集群超出要求的内存了:
Resource Groups 可以认为是Presto实现了一个弱资源限制和隔离功能。其可以为每个group指定队列大小、并发大小、内存使用大小。为每个group设置合理的hardConcurrencyLimit(最大并发数)、softMemoryLimit(内存最大使用值)及maxQueued(队列大小)一方面可以使不同业务影响降低,另一方面也大概率避免OOM问题,当然善于运用user及做下二次开发,就可以让Presto支持多用户共用同一分组和权限认证功能。
参考资料: http://armsword.com/2018/05/22/the-memory-management-and-tuning-experience-of-presto/
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有