栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

presto内存配置

presto内存配置

目录

1. presto的内存结构2. 参考文献

1. presto的内存结构

下图是presto-worker节点的内存示意图:
图片来源于互联网
可以粗略的认为presto的jvm.properties配置文件中的jvm堆内存会被分为3份:

    系统内存池(SystemMemoryPool)保留内存池(ReservedMemoryPool)普通内存池(GeneralMemoryPool)

这三者的区别:

System Pool 是用来保留给系统使用的,默认为40%的内存空间留给系统使用。Reserved Pool和General Pool 是用来分配query运行时内存的。
其中大部分的query使用general Pool。 而最大的一个query,使用Reserved Pool, 所以Reserved Pool的空间等同于一个query在一个机器上运行使用的最大空间大小。
General则享有除了System Pool和General Pool之外的其他内存空间。

presto的官方文档中有几个内存配置项:

单个节点维度的内存配置项:

query.max-memory-per-node,一个 query可以使用的最大内存(用户内存),这对应的就是Reserved Pool的内存。默认jvm堆内存*0.1。query.max-total-memory-per-node,一个 query可以使用的最大内存(用户内存+系统内存,即包含系SystemMemoryPool内存),默认jvm堆内存*0.3。memory.heap-headroom-per-node,非查询使用的内存 。不确定是否属于SystemMemoryPool

presto集群维度的内存配置项:

query.max-memory,在presto集群中,一个query可以使用的最大内存(用户内存)。默认20Gquery.max-total-memory,在presto集群中,一个query可以使用的最大内存(用户内存+系统内存,即包含系SystemMemoryPool内存)。默认query.max-memory*2。

举个例子,presto-worker机器配置为32C128G,worker节点数为8,按如下进行分配:

presto的jvm堆内存分配70G,query.max-memory-per-node分配40G,query.max-total-memory-per-node分配45G,query.max-memory分配320G,40G*8=320G,query.max-total-memory分配360G,45G*8=360G,memory.heap-headroom-per-node分配21G,jvm堆内存*0.3=70G*0.3=21G(假如走的默认配置)。

根据上述配置可推出,

耗费内存最大的 一个 query,

在每个worker上能使用的内存=query.max-total-memory-per-node=45G,在整个presto集群上能使用的内存=query.max-total-memory=360G。 其他query,

在每个worker上能使用的内存=jvm堆内存 - query.max-total-memory-per-node - memory.heap-headroom-per-node = 70G - 45G - 21G = 4G,在整个presto集群上能使用的内存=4G*8=32G,感觉这里给少了。。

注:这个配置不一定合理,只是举这个例子来理解presto的内存配置。

2. 参考文献

[1] 深入理解Presto(3):Presto内存管理
[2] Presto内存调优及原理(基础篇)
[3] Presto 0.269 documentation

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号