Presto + query.max-每节点内存配置

Presto + query.max-memory-per-node configuration

我们没有在我们的 presto worker 中配置参数 - 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 仅 - 4402341478.40B(几个 GIGA 字节),所以这是小尺寸

当查询需要更多内存时,查询可能会崩溃

请大家指教,是否需要设置参数query.max-memory-per-node – in config.properties

为了设置更高的值作为20-30 GIGA

参考 - https://prestodb.github.io/presto-admin/docs/current/installation/presto-configuration.html

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 我们设置了默认值,因此您可以在集群中进行一些大型查询 运行ning。仅从这个值并不清楚确切的数字。如果您查看上面链接的文件中的配置,您会看到系统首先为“未计算的内存分配”保留 30% 的堆,因为 Presto 不会跟踪所有分配。那么 query.max-memory-per-node 只是对“用户”内存的限制,这是由查询作者控制的内存,例如 group byjoin 哈希表。此值不包括由 Presto 自动管理的输入和输出缓冲区。

将所有这些放在一起,我希望您可以使用默认值 运行 代码并发进行 3-5 个大型查询。

至于你想如何设置这些,这真的取决于你的工作量。如果您希望有一个大的混合工作负载,默认值可能适合您。如果您希望能够将整个集群专用于单个工作人员,您可以将值增加到接近堆大小(确保为未跟踪的分配留出空间)。