Presto内存配置是开发者很关心的核心配置:
很难给出确切的数字,因为这些数字应该根据您的工作量来设置。所以,我能做的就是为你提供一些数字,然后你应该试验这些配置和你的工作量来微调它们。
假设每个节点有47G,你可以从35G的Xmx开始,因为你应该为本机内存留出一些开销,并为机器上运行的操作系统和其他守护进程留出一些空间,如果有的话。在生产中,我们使用32M的G1区域大小,这也是部署文档中记录的值。
鉴于最大堆大小为35G,我认为您可以开始尝试使用以下值并确定适合您的工作负载的值:
query.max-memory-per-node = 12GB
query.max-total-memory-per-node = 15GB
memory.heap-headroom-per-node = 8GB(这是作为余量/缓冲区留出的堆内存量(例如,用于未跟踪的分配))。
每个节点的净空间为8G,最大总内存为15G,每个工作站的总体池大小为35-8-15 = 12G,整个群集中的12G * 11 = 132G。当我们确定query.max-memory(峰值全局用户内存限制)时,我们还会考虑散列分区计数(query.initial-hash-partitions配置,即分布式连接和聚合的分区数)。由于你有11个节点,你可以设置query.initial-hash-partitions 为8,如果我们设置query.max-memory为48G,将导致每个节点内存使用量大约48/8 = 6GB(如果没有偏差,数据分布均匀),并且因为我们有query.max-memory-per-node12GB,这意味着我们允许偏斜因子为12/6 = 2(也就是说,当数据分布不均时,我们允许任务消耗两倍的内存)。同样,你一定要试验和调整这些值,并弄清楚什么对你有用。