ほとんどの人は、すでに持っている Hadoop ノードでTrino (以前の PrestoSQL)を実行しています。Facebook では通常、Hadoop クラスター内のいくつかのノードで Presto を実行して、ネットワーク負荷を分散させています。
一般に、新しいクラスターの業界標準の比率を使用します。余裕があれば、10 ギガビットのネットワークを使用して、ディスクごとに 2 コアと 2 ~ 4 ギガのメモリを使用します。数台のマシン (4 台以上) を用意したら、データに対するクエリを使用してベンチマークを行います。比率を調整する必要があるかどうかは明らかです。
クラスタのハードウェアをゼロからサイジングする場合、考慮すべき点がいくつかあります。
- 合計データ サイズによって、必要なディスクの数が決まります。HDFS には大きなオーバーヘッドがあるため、多くのディスクが必要になります。
- ディスクに対する CPU 速度の比率は、ホット データ (使用しているデータ) とコールド データ (アーカイブ データ) の比率によって異なります。データ ウェアハウスを開始したばかりの場合、すべてのデータが新しくてホットになるため、多くの CPU が必要になります。一方、ほとんどの物理ディスクは非常に高速にしかデータを配信できないため、ある時点で CPU を増やしても役に立ちません。
- メモリに対する CPU 速度の比率は、実行する集計と結合のサイズ、およびキャッシュする (ホット) データの量によって異なります。現在、Presto では、結合の最終的な集計結果とハッシュ テーブルが 1 台のマシンのメモリに収まるようにする必要があります (これらの制限の削除に積極的に取り組んでいます)。大量のメモリがある場合、OS はディスク ページをキャッシュするため、クエリのパフォーマンスが大幅に向上します。
2013 年、Facebook では Presto プロセスを次のように実行しました。
- 16 GB ヒープで JVM を実行し、ほとんどのメモリを OS バッファに使用できるようにしました
- Presto を実行したマシンでは、MapReduce タスクを実行しませんでした。
- ほとんどの Presto マシンには 16 個の実際のコアがあり、プロセッサ アフィニティ (最終的には cgroup) を使用して Presto を 12 個のコアに制限しました (Hadoop データ ノード プロセスやその他のものを簡単に実行できるようにするため)。
- ほとんどのサーバーは 10 ギガビット ネットワーク上にありましたが、1 ギガビットを使用する大規模で古い粗悪なクラスターが 1 つありました (これは正常に機能しました)。
- コーディネーターとワーカーには同じ構成を使用しました。
最近では、以下を実行しました。
- マシンには 256 GB のメモリがあり、200 GB の Java ヒープを実行しました。
- ほとんどのマシンには 24 ~ 32 の実際のコアがあり、Presto にはすべてのコアが割り当てられました。
- マシンにはログ用の最小限のローカル ストレージのみがあり、すべてのテーブル データはリモート (独自の分散ファイル システム内) にありました。
- ほとんどのサーバーには、ファブリック ネットワークへの 25 ギガビット ネットワーク接続がありました。
- コーディネーターとワーカーは同様の構成でした。