Presto配置

Rui*_* Li 0 presto

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

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

提前致谢.

Dav*_*ips 10

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

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

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

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

coordinator=true
node-scheduler.include-coordinator=true
Run Code Online (Sandbox Code Playgroud)

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

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

  • 有意思,谢谢你的问题.我们在测试中没有看到,但我们通常使用Facebook版本的Hadoop,这可能已经解决了这个问题.如果这对于Presto来说是一个问题,我们将在最终解决它,而不是强迫每个最终用户做一些黑客,比如在一台机器上运行多个工作人员.我们对Presto的理念是,所有东西都应尽可能"正常工作",以便您在运行Presto时不必担心这些细节. (2认同)