我怀疑答案是"视情况而定",但是对于计划为 Presto 使用哪种硬件,是否有任何一般指导?
由于 Presto 使用一个协调器和一组工作线程,并且工作线程使用数据运行,我想主要问题将是为协调器提供足够的 RAM,足够的网络带宽用于从工作线程发送到协调器的部分结果等。
如果您能就如何适当地调整大小提供一些一般想法,我很想听听。
大多数人在他们已经拥有的Hadoop节点上运行Trino(以前称为PrestoSQL)。 在Facebook,我们通常在Hadoop集群中的几个节点上运行Presto,以分散网络负载。
通常,我会使用新集群的行业标准比率:每个磁盘 2 个内核和 2-4 GB 内存,如果您负担得起,可以使用 10 GB 网络。 拥有几台计算机 (4+) 后,使用对数据的查询进行基准测试。 如果您需要调整比率,这应该是显而易见的。
在从头开始调整群集的硬件大小方面,需要考虑以下事项:
- 总数据大小将决定所需的磁盘数。 HDFS的开销很大,所以你需要大量的磁盘。
- CPU 速度与磁盘的比率取决于热数据(您正在使用的数据)和冷数据(存档数据)之间的比率。 如果您刚刚启动数据仓库,您将需要大量 CPU,因为所有数据都是新的和热的。 另一方面,大多数物理磁盘只能以这么快的速度传输数据,因此在某些时候,更多的 CPU 无济于事。
- CPU 速度与内存的比率取决于要执行的聚合和联接的大小以及要缓存的(热)数据量。 目前,Presto 需要最终聚合结果和用于连接的哈希表,以适合单台机器上的内存(我们正在积极努力消除这些限制)。 如果内存量较大,操作系统将缓存磁盘页,这将显著提高查询性能。
2013年,在Facebook,我们运行了Presto流程如下:
- 我们使用 16 GB 堆运行 JVM,以便为操作系统缓冲区保留大部分内存
- 在我们运行Presto的机器上,我们没有运行MapReduce任务。
- 大多数 Presto 机器都有 16 个真正的内核,并使用处理器亲和力(最终是 cgroups)将 Presto 限制为 12 个内核(因此 Hadoop 数据节点进程和其他东西可以轻松运行)。
- 大多数服务器都在 10 GB 的网络上,但我们确实有一个使用 1 GB 的大型旧集群(工作正常)。
- 我们对协调器和工作人员使用了相同的配置。
最近,我们运行了以下内容:
- 机器有 256 GB 的内存,我们运行了一个 200 GB 的 Java 堆。
- 大多数机器有24-32个真正的核心,Presto被分配了所有核心。
- 这些机器只有最少的本地日志存储,所有表数据都是远程的(在专有的分布式文件系统中)。
- 大多数服务器与结构网络具有 25 GB 的网络连接。
- 协调员和工作人员具有类似的配置。