gpt4 book ai didi

快速配置

转载 作者:行者123 更新时间:2023-12-05 08:24:10 25 4
gpt4 key购买 nike

当我搭建一个Presto集群并尝试做一些性能调优时,我想知道是否有更全面的Presto配置指南,例如如何控制 Presto worker 可以使用多少个 CPU 内核。如果我在单个服务器上启动多个 presto worker(在这种情况下我不需要专用服务器来运行协调器),这是一种好习惯吗?

此外,我不太理解 task.max-memory 的说法。 presto worker 会为单个查询启动多个任务吗?如果是,也许我可以将 task.max-memory 与 -Xmx JVM 参数一起使用来控制并行级别?

提前致谢。

最佳答案

Presto 是一个多线程 Java 程序,在处理查询时努力使用所有可用的 CPU 资源(假设输入表足够大以保证这种并行性)。您可以使用 cgroups、CPU 亲和性等人为地限制 Presto 在操作系统级别使用的 CPU 资源量。

在一台机器上启动多个 Presto worker 没有任何理由或好处。您不应该这样做,因为它们会不必要地相互竞争资源,并且可能比单个进程的性能更差。

我们在拥有 50 多台机器的部署中使用专用协调器,因为我们发现让协调器处理查询会在执行查询协调工作时减慢速度,这会对整体查询性能产生负面影响。对于小型集群,专用于协调的机器可能是一种资源浪费。您需要使用自己的集群设置和工作负载运行一些实验,以确定哪种方式最适合您的环境。

您可以让单个 Presto 进程同时充当协调器和工作器,这对于小型集群或测试目的非常有用。为此,将其添加到 etc/config.properties 文件中:

coordinator=true
node-scheduler.include-coordinator=true

您在与工作进程共享的机器上启动专用协调器进程的想法很有趣。例如,在具有 16 个处理器的机器上,您可以使用 cgroups 或 CPU affinity 将 2 个内核专用于协调器进程,并将工作进程限制为 14 个内核。我们从未尝试过这种方法,但对于小型集群来说,这可能是一个不错的选择。

任务是在工作程序上运行的查询计划中的一个阶段(CLI 会在查询运行时显示阶段列表)。对于像 SELECT COUNT(*) FROM t 这样的查询,每个执行表扫描和部分聚合的工作都会有一个任务,而最终聚合的单个 worker 会有另一个任务。具有连接、子查询等的更复杂的查询可能会导致单个查询在每个工作节点上执行多个任务。

关于快速配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20038642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com