2

Presto のクラスターをセットアップし、いくつかのパフォーマンス チューニングを試みているので、Presto のより包括的な構成ガイドがあるのではないかと考えています。たとえば、Presto ワーカーが使用できる CPU コアの数を制御する方法などです。また、1 つのサーバーで複数の presto ワーカーを起動するのは良い方法ですか (この場合、コーディネーターを実行するための専用サーバーは必要ありません)。

その上、私は task.max-memory 引数をよく理解していません。presto ワーカーは、1 つのクエリに対して複数のタスクを開始しますか? はいの場合、並列処理のレベルを制御するために -Xmx JVM 引数と一緒に task.max-memory を使用できますか?

前もって感謝します。

4

3 に答える 3

13

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 つのクエリに対してすべてのワーカー ノードで複数のタスクが発生する可能性があります。

于 2013-11-18T07:02:48.323 に答える