Presto配置

时间:2013-11-18 01:35:43

标签: presto

当我设置一个Presto集群并尝试进行一些性能调整时,我想知道是否有更全面的Presto配置指南,例如:如何控制Presto工作者可以使用的CPU核心数。如果我在一台服务器上启动多个presto worker(在这种情况下我不需要专用服务器来运行协调器),这是一种很好的做法吗?

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

提前致谢。

3 个答案:

答案 0 :(得分:10)

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

在一台计算机上启动多个Presto worker没有任何理由或好处。你不应该这样做,因为他们将不必要地相互竞争资源,并且可能比单个过程表现更差。

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

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

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

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

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

答案 1 :(得分:0)

-Xmx必须高于task.max-memory,或至少相等。 否则你可能会看到OOM问题,因为我之前已经经历过。 而且,由于Presto-0.113,他们改变了Presto管理查询内存和配置的方式。 请参考此链接: https://prestodb.io/docs/current/installation/deployment.html

答案 2 :(得分:0)

关于“Presto工作人员可以使用的许多CPU核心”的问题,我认为它受参数task.concurrency控制,默认情况下为16