Presto + query.max-memory-per-node 配置
Posted
技术标签:
【中文标题】Presto + query.max-memory-per-node 配置【英文标题】:Presto + query.max-memory-per-node configuration 【发布时间】:2019-12-16 12:00:15 【问题描述】:我们没有在 presto workers 中配置参数 - query.max-memory-per-node
从日志看来query.max-memory-per-node
的值是自动设置的
grep -r "query.max-memory-per-node" /presto/data/var/log/server.log
2019-08-08T14:25:03.840Z INFO main Bootstrap query.max-memory-per-node 4402341478.40B
我的问题
我们需要在config.properties
中设置query.max-memory-per-node
吗?
或者query.max-memory-per-node
的值,将由presto设置
但是从日志中我们可以看出,presto set only - 4402341478.40B
(几个 GIGA 字节),所以这是小尺寸
当查询需要更多内存时,查询可能会崩溃
请您的意见,我们是否需要在config.properties
中设置参数query.max-memory-per-node
为了将更高的值设置为20-30 GIGA
参考 - https://prestodb.github.io/presto-admin/docs/current/installation/presto-configuration.html
【问题讨论】:
【参考方案1】:query.max-memory-per-node
的默认值是可用堆内存的 10%。该属性的默认设置在这里:
https://github.com/trinodb/trino/blob/master/presto-main/src/main/java/io/prestosql/memory/NodeMemoryConfig.java#L35
IIRC 我们设置了默认值,因此您可以在集群中运行一些大型查询。仅从这个值并不清楚确切的数字。如果您查看上面链接的文件中的配置,您会看到系统首先为“未计算的内存分配”保留 30% 的堆,因为 Presto 不会跟踪所有分配。那么query.max-memory-per-node
只是对“用户”内存的限制,它是由查询作者控制的内存,例如group by
和join
哈希表。此值不包括 Presto 自动管理的输入和输出缓冲区。
将所有这些放在一起,我希望使用默认值,您可以在代码上同时运行 3-5 个大型查询。
至于你想如何设置这些,这真的取决于你的工作量。如果您希望有大量混合工作负载,则默认值可能适合您。如果您希望能够将整个集群专用于单个工作程序,您可以将值增加到接近堆大小(确保为未跟踪的分配留出空间)。
【讨论】:
首先非常感谢您对我的集群的明确回答 - 是的,我们预计会有很大的混合工作负载,所以从您的回答中我可以理解设置 query.max 会很有用 -每个节点的内存接近堆大小,(例如 query.max-memory-per-node=50GB ),我们的 Xmx 是 55GB,所以如果我错了,请纠正我的 -:) 另外一件小事——我们需要在config.properties中设置query.max-memory-per-node吗?以上是关于Presto + query.max-memory-per-node 配置的主要内容,如果未能解决你的问题,请参考以下文章
Presto系列 | 三Presto Architecture
Presto系列 | 三Presto Architecture