presto 调优

摘要:
动态调整Presto集群规模3、内存调优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_POOLquery.max-memory:表示单个查询在分布在所有相关节点上能用的内存之和的最大值。

Presto 调优


0、presto 原理架构

https://www.cnblogs.com/tgzhu/p/6033373.html


1、Presto 存在的问题

  1. Coordinator单点问题(常见方案:ip漂移、nginx代理动态获取等)

  2. 大查询容易OOM(0.186+版本支持dump到磁盘 未验证)

  3. 没有容错能力,无重试机制

  4. Presto部署环境复杂,MPP架构容易受到单台机器影响

  5. Presto并发能力不足


2、调优策略

  1. 部署多台Coordinator避免单点问题,上层封装一层查询服务 避免jdbc直连

  2. 如果有必要在查询服务进行重试操作(需要判断任务状态)

  3. 对worker相关内存参数进行合理配置,避免OOM

  4. 启用Presto本身资源队列的同时,构建符合业务场景的查询队列,控制并发量及查询优先级,确保任务高效完成

  5. 开发Presto监控系统,监测Presto集群状态,及时预警。动态调整Presto集群规模


3、内存调优

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

  • query.max-memory:表示单个查询在分布在所有相关节点上能用的内存之和的最大值。

  • query.max-memory-per-node:单个查询在单个节点上用户内存能用的最大值,从定义上就能看出:query.max-memory-per-node 必须小于query.max-total-memory-per-node

  • 同样: query.max-memory 也必须小于query.max-total-memory

  • 另外:query.max-total-memory-per-node 与memory.heap-headroom-per-node 之和必须小于 jvm max memory .也就是jvm.config 中配置的-Xmx

  • 注意:memory.heap-headroom-per-node:JVM max memory * 0.3

img

img

整体内存配置受以下场景的影响:

  1. 用户查询数据量、复杂性(决定该用多大的查询内存)

  2. 用户查询的并发度(决定该用多大的jvm堆)

需要注意的是:单纯的增大RESERVED_POOL的值并不能解决Presto的查询问题,因为RESERVED_POOL大部分时间是不参与计算的,只有满足以下情景才会被使用,而且只能被一个Query所使用。

  1. GENERAL_POOL有节点出现阻塞节点的情况,即内存不足

  2. RESERVED_POOL没有被使用

所以三者需要配置合理的值,如果并发比较大需要SYSTEM_POOL保持默认或者稍微再大一点,RESERVED_POOL可以稍微增大到八分之一左右。

同时对于jvm OOM的问题,需要对Presto的jvm.config进行配置:

-XX:G1ReservePercent=15
-XX:InitiatingHeapOccupancyPercent=40
-XX:ConcGCThreads=8

4、参考

https://cloud.tencent.com/developer/article/1156796

https://www.jianshu.com/p/f2b7d1550884

https://www.cnblogs.com/jixin/p/11234861.html

https://prestodb.io/docs/current/admin/properties.html

免责声明:文章转载自《presto 调优》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇启用国行Lumia 830/930的联通4G网络RocketMQ的安装配置:配置jdk环境,配置RocketMQ环境,配置集群环境,配置rocketmq-console下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux查询网址

1、man查询手册 LINUX MAN PAGES ONLINE: http://man.he.net/ 2、编码规范 https://www.kernel.org/doc/Documentation/CodingStyle 3、深度开源 http://www.open-open.com/solution/view/1319816219625 4、GPLV...

玩转StyleGan2:手把手教你安装并运行项目!

时间过得是真快,离上次分享《用AI生成一堆漂亮且独一无二的女朋友!》已经快过去半个多月了。光分享效果,而不分享如何实现,这不是我的风格。所以从今天开始,我会带大家一起玩转这个强大的高清人脸生成项目(不懂开源项目的可以理解为软件)。 目前规划了几个主题 1. 安装并运行 2. 虚拟人脸编辑,操控虚拟人物表情 3. 真实人脸编辑,操控任何人的表情。 4. 云端...

多种方式安装GitLabRunner

1. 使用GItLab官方仓库安装 Add GitLab’s official repository: 添加官方仓库 # For Debian/Ubuntu/Mint curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | s...

pyspider安装使用遇到的坑

一、pip install pyspider 安装出现错误: Command "python setup.py egg_info" failed with error code 10 in C:UsersxxxAppDataLocalTemppip-install-tc5uvu7lpycurl  经过网上大拿的经验需要安装wheel,执行命令pip3 in...

钉钉前端开发

钉钉前端开发 钉钉一年半多,罗列一些常用的功能和网址,着重前端部分,毕竟前端开发哇。 希望有所帮助,有不足之处,希望指点下哈! 目前主要使用的是,第三方应用开发,大致感觉就是基于钉钉的H5页面,在钉钉中打开。  初步理解 先抛开钉钉官方推荐的NowaGUI开发工具,以及推荐saltUI样式库。大致理解如下。 那如果是不涉及到钉钉功能的常规H5页面,由管理员...

Redis内存碎片

目录 一、什么是内存碎片 二、如何判断有内存碎片 三、内存碎片是怎么形成的 3.1 jemalloc分配机制导致 3.2 数据的修改删除操作导致 四、如何清理内存碎片 4.1 重启 4.2 redis内存碎片自动清理机制 五、和现实的类比 一、什么是内存碎片 redis数据删除后,所占用内存不会马上还给操作系统,而是交给内存分配管理器,...