Presto はマルチスレッドの Java プログラムであり、クエリを処理するときに利用可能なすべての CPU リソースを使用するために懸命に働きます (入力テーブルがそのような並列処理を保証するのに十分な大きさであると仮定します)。cgroups、CPU アフィニティなどを使用して、オペレーティング システム レベルで Presto が使用する CPU リソースの量を人為的に制限できます。
1 台のマシンで複数の Presto ワーカーを起動する理由やメリットはありません。リソースを求めて互いに不必要に競合し、単一のプロセスよりもパフォーマンスが低下する可能性があるため、これを行うべきではありません。
50 台以上のマシンがある展開では専用のコーディネーターを使用します。これは、コーディネーターがクエリの調整作業を実行している間にクエリを処理すると速度が低下し、クエリの全体的なパフォーマンスに悪影響を及ぼすことがわかったためです。小規模なクラスターの場合、1 台のマシンを調整専用にすることは、リソースの浪費になる可能性があります。環境に最適な方法を判断するには、独自のクラスター設定とワークロードでいくつかの実験を実行する必要があります。
単一の Presto プロセスをコーディネーターとワーカーの両方として機能させることができます。これは、小さなクラスターやテスト目的に役立ちます。これを行うには、これをetc/config.properties
ファイルに追加します。
coordinator=true
node-scheduler.include-coordinator=true
ワーカー プロセスと共有されているマシンで専用のコーディネーター プロセスを開始するというあなたのアイデアは興味深いものです。たとえば、16 個のプロセッサを搭載したマシンでは、cgroup または CPU アフィニティを使用して 2 つのコアをコーディネーター プロセス専用にし、ワーカー プロセスを 14 コアに制限することができます。私たちはこれを試したことはありませんが、小さなクラスターには良い選択肢かもしれません.
タスクは、ワーカーで実行されるクエリ プランのステージです (CLI は、クエリの実行中にステージのリストを表示します)。のようなクエリの場合SELECT COUNT(*) FROM t
、テーブル スキャンと部分的な集計を実行するすべての作業にタスクがあり、最終的な集計のために単一のワーカーに別のタスクがあります。結合、サブクエリなどを含むより複雑なクエリでは、1 つのクエリに対してすべてのワーカー ノードで複数のタスクが発生する可能性があります。