Presto 是一个多线程 Java 程序,在处理查询时努力使用所有可用的 CPU 资源(假设输入表足够大以保证这种并行性)。您可以使用 cgroups、CPU 亲和性等人为地限制 Presto 在操作系统级别使用的 CPU 资源量。
在一台机器上启动多个 Presto 工作器没有任何理由或好处。您不应该这样做,因为它们将不必要地相互竞争资源,并且可能比单个进程执行得更差。
我们在拥有 50 多台机器的部署中使用专用协调器,因为我们发现让协调器处理查询会在它执行查询协调工作时减慢它的速度,这会对整体查询性能产生负面影响。对于小型集群,专用一台机器进行协调可能是一种资源浪费。您需要对自己的集群设置和工作负载进行一些实验,以确定哪种方式最适合您的环境。
您可以让单个 Presto 进程同时充当协调器和工作器,这对于小型集群或测试目的很有用。为此,请将其添加到etc/config.properties
文件中:
coordinator=true
node-scheduler.include-coordinator=true
您在与工作进程共享的机器上启动专用协调进程的想法很有趣。例如,在具有 16 个处理器的机器上,您可以使用 cgroups 或 CPU 亲和性将 2 个内核专用于协调进程,并将工作进程限制为 14 个内核。我们从未尝试过,但对于小型集群来说,这可能是一个不错的选择。
任务是在工作人员上运行的查询计划中的一个阶段(CLI 会在查询运行时显示阶段列表)。对于像这样的查询SELECT COUNT(*) FROM t
,每个工作上都会有一个任务来执行表扫描和部分聚合,而单个工作人员上会有另一个任务来进行最终聚合。具有连接、子查询等的更复杂的查询可能会导致每个工作节点上的多个任务用于单个查询。