大多数人在他们已经拥有的 Hadoop 节点上运行Trino(以前称为 PrestoSQL) 。在 Facebook,我们通常在 Hadoop 集群中的几个节点上运行 Presto,以分散网络负载。
一般来说,我会采用新集群的行业标准比率:每个磁盘有 2 个内核和 2-4 gig 内存,如果你能负担得起的话,使用 10 gigabit 网络。在您拥有几台机器(4 台以上)之后,使用您对数据的查询进行基准测试。如果您需要调整比率,这应该很明显。
在从头开始为集群调整硬件大小方面需要考虑一些事情:
- 总数据大小将决定您需要的磁盘数量。HDFS 的开销很大,因此您将需要大量磁盘。
- CPU 速度与磁盘的比率取决于热数据(您正在使用的数据)和冷数据(归档数据)之间的比率。如果您刚刚开始数据仓库,您将需要大量 CPU,因为所有数据都是新的和热的。另一方面,大多数物理磁盘只能如此快速地传输数据,因此在某些时候更多的 CPU 无济于事。
- CPU 速度与内存的比率取决于您要执行的聚合和连接的大小以及您要缓存的(热)数据量。目前,Presto 需要最终聚合结果和用于连接的哈希表以适合单台机器上的内存(我们正在积极努力消除这些限制)。如果您有大量内存,操作系统将缓存磁盘页面,这将显着提高查询性能。
2013 年,我们在 Facebook 运行 Presto 流程如下:
- 我们使用 16 GB 堆运行 JVM,以将大部分内存留给 OS 缓冲区
- 在我们运行 Presto 的机器上,我们没有运行 MapReduce 任务。
- 大多数 Presto 机器有 16 个真实内核,并使用处理器亲和性(最终是 cgroups)将 Presto 限制为 12 个内核(因此 Hadoop 数据节点进程和其他东西可以轻松运行)。
- 大多数服务器都在 10 Gb 网络上,但我们确实有一个使用 1 Gb 的大型旧集群(运行良好)。
- 我们对协调器和工作器使用相同的配置。
最近,我们运行了以下内容:
- 这些机器有 256 GB 内存,我们运行了 200 GB Java 堆
- 大多数机器有 24-32 个真实核心,Presto 被分配了所有核心。
- 这些机器只有最少的本地日志存储,所有表数据都是远程的(在专有的分布式文件系统中)。
- 大多数服务器都有一个到结构网络的 25 Gb 网络连接。
- 协调器和工作器具有相似的配置。