エラスティックコンピュートノード
エラスティックコンピュートノードは特殊な BE ノードで、データストレージ機能を持たず、データの計算処理のみを担当します。そのため、ステートレスな BE ノードと見なすことができ、簡単に追加や削除ができます。
レイクハウスのデータ分析では、エラスティックコンピュートノードを使用して、Hive、Iceberg、Hudi、Paimon、JDBC などの外部データソースにクエリを実行できます。Doris は外部データソースのデータを保存しないため、エラスティックコンピュートノードを使えば、外部データソースに対する計算能力を簡単に拡張できます。また、コンピュートノードにはキャッシュディレクトリを設定して外部データソースの頻繁にアクセスされるデータをキャッシュでき、データの読み取りをさらに高速化できます。
エラスティックコンピュートノードは、ストレージとコンピューティングの統合モードとストレージとコンピューティングの分離モードの両方で使用できます。主な用途は、データレイク(外部テーブル)のクエリに使う計算リソースを、内部テーブルのクエリに使う計算リソースから分離することです。
- ストレージとコンピューティングの統合モード: BE ノードのデフォルトのタイプは
mixで、ストレージと計算処理の両方を担当します。外部テーブルのクエリ専用にcomputationタイプの BE ノード群を別途デプロイすれば、内部テーブルのデータストレージに影響を与えずに、ノード数を柔軟に増減できます。 - ストレージとコンピューティングの分離モード: BE ノードはすでにステートレスであり、簡単に増減できます。それでも一部の BE ノードを
computationタイプに設定して、データレイク(外部テーブル)のクエリ専用にすることで、内部テーブルのクエリを処理する BE ノードとワークロードを分離できます。
computationタイプに設定した BE ノードは、データレイク(外部テーブル)のクエリのみを処理し、内部テーブルのクエリは一切処理しません。クラスター内のすべての BE ノードをcomputationに設定すると、内部テーブルのクエリはhas no queryable replicasエラーで失敗します。内部テーブルのクエリを処理できるように、少なくとも一つのmixタイプの BE ノードをクラスター内に残してください。- ストレージとコンピューティングの分離モードでは、
NodeRole列(SHOW BACKENDSで表示)は常にmixとなり、BE 設定ファイルのbe_node_roleの設定には左右されません。これは既知の表示上の動作であり、ノードの実際のロールは引き続きbe_node_roleの値(be.conf内)によって決まります。
コンピュートノードの使い方
BE ノードのタイプ
ストレージとコンピューティングの統合モードでは、BE ノードは次の二種類に分かれます。
-
Mix
混合ノード。BE ノードのデフォルトのタイプです。計算処理と Doris 内部テーブルのデータストレージの両方を担当します。
-
Computation
エラスティックコンピュートノード。データストレージは担当せず、計算処理のみを担当します。
コンピュートノードの追加
BE の設定ファイル be.conf に次の設定を追加します。
be_node_role=computation
その後、BE ノードを起動すると、Computation タイプとして動作します。
続いて Doris に接続し、次のコマンドを実行します。
ALTER SYSTEM ADD BACKEND
これで BE ノードが追加されます。追加に成功すると、ノードのタイプは computation として、NodeRole 列(SHOW BACKENDS で表示)で確認できます。
コンピュートノードの利用
コンピュートノードを有効にしてその動作を制御するには、FE の設定ファイル fe.conf に次のパラメーターを設定します。
| パラメーター名 | 説明 |
|---|---|
prefer_compute_node_for_external_table | デフォルト値は false です。true に設定すると、外部テーブルのクエリは優先的にコンピュートノードに割り当てられます。false の場合、外部テーブルのクエリは任意の BE ノードに割り当てられます。クラスター内にコンピュートノードがない場合、このパラメーターは効果がありません。 |
min_backend_num_for_external_table | prefer_compute_node_for_external_table が true の場合にのみ有効です。クラスター内のコンピュートノード数がこの値より少ない場合、外部テーブルのクエリには、ノードの合計数がこの値に達するように混合ノードも割り当てようとします。コンピュートノード数がこの値より多い場合、外部テーブルのクエリはコンピュートノードにのみ割り当てられます。バージョン 2.0 以前(同バージョンを含む)のデフォルト値は 3 でした。バージョン 2.1 より後のデフォルト値は -1 で、現在のコンピュートノード数のみを使用することを意味します。 |
min_backend_num_for_external_table について、さらに説明します。
クラスター内にコンピュートノードが 3 つ、混合ノードが 5 つあるとします。
min_backend_num_for_external_table を 3 以下に設定すると、外部テーブルのクエリは 3 つのコンピュートノードのみを使用します。3 より大きい値、たとえば 6 に設定すると、外部テーブルのクエリは 3 つのコンピュートノードに加えて、さらに 3 つの混合ノードを計算処理に使用します。
つまり、このパラメーターは主に、外部テーブルの計算処理に参加できる BE ノードの最小数を指定するもので、コンピュートノードが優先して選択されます。値を増やすと、コンピュートノードに限らず、より多くの BE ノードが外部テーブルのクエリ処理に参加できます。値を減らすと、参加する BE ノードの数を制限できます。
注:
バージョン 2.1 より後では、
min_backend_num_for_external_tableに-1を設定できます。それより前のバージョンでは、このパラメーターには正の数を指定する必要があります。このパラメーターは、prefer_compute_node_for_external_table = trueの場合にのみ有効です。
min_backend_num_for_external_tableの値が BE ノードの総数より大きい場合、選択されるのは最大でもすべての BE ノードです。上記のパラメーターは、
ADMIN SET FRONTEND CONFIGコマンドで FE ノードを再起動せずに動的に変更できます。すべての FE ノードで設定する必要があります。または、fe.confに設定を追加して FE ノードを再起動します。
ベストプラクティス
フェデレーションクエリのリソース分離と柔軟なスケーリング
フェデレーションクエリでは、外部テーブルのデータに対するクエリ専用のコンピュートノード群をデプロイできます。これにより、Hive に対する大規模な分析などの外部テーブルのクエリ負荷を、低レイテンシーの高速なデータ分析などの内部テーブルのクエリ負荷から分離できます。
また、コンピュートノードはステートレスな BE ノードなので、簡単に増減できます。たとえば、k8s を使用してエラスティックコンピュートノードのクラスター群をデプロイし、業務のピーク時にはデータレイク分析用のコンピュートノードを増やし、閑散時には速やかに減らしてコストを削減できます。
よくある質問
- 混合ノードとコンピュートノードは相互に変換できますか?
コンピュートノードは混合ノードに変換できます。ただし、混合ノードをコンピュートノードに変換することはできません。
- コンピュートノードにデータストレージ用のディレクトリを設定する必要はありますか?
はい。コンピュートノードのデータストレージ用ディレクトリにはユーザーデータは保存されず、cluster_id などの BE ノード自体の情報ファイルと、動作中に生成される一時ファイルのみが保存されます。
コンピュートノードのストレージディレクトリに必要なディスク容量は少量(MB 単位)で、ノードとともにいつでも削除でき、ユーザーデータには影響しません。
- コンピュートノードと混合ノードにファイルキャッシュディレクトリを設定できますか?
ファイルキャッシュは、最近アクセスしたリモートストレージシステム(HDFS またはオブジェクトストレージ)のデータファイルをキャッシュし、同じデータに対する後続のクエリを高速化します。
コンピュートノードと混合ノードのどちらにもファイルキャッシュディレクトリを設定できます。ファイルキャッシュディレクトリは事前に作成する必要があります。
- コンピュートノードを廃止するには、DECOMMISION 操作を行う必要がありますか?
いいえ。コンピュートノードは DROP BACKEND 操作で直接削除できます。
- コンピュートノードで内部テーブルをクエリすると
has no queryable replicasで失敗するのはなぜですか?
これは想定された動作です。computation タイプの BE ノードは内部テーブルのクエリを一切処理しません。クラスター内のすべての BE ノードが computation タイプである場合(または、クラスター内の mix タイプのノードが内部テーブルのレプリカを保持するには不足している場合)、内部テーブルのクエリはこのエラーで失敗します。
対処方法: 内部テーブルのクエリを処理できるように、クラスター内に少なくとも一つの mix タイプの BE ノードを残すか、追加してください。
- ストレージとコンピューティングの分離モードでは、
NodeRole列(SHOW BACKENDSで表示)が常にmixです。これはbe_node_role = computationの設定が有効になっていないことを意味しますか?
いいえ。ストレージとコンピューティングの分離モードでは、NodeRole 列(SHOW BACKENDS で表示)には常に mix と表示されます。これは既知の表示上の動作で、実際の be_node_role 設定(be.conf 内)とは関係ありません。このパラメーターは分離モードでも有効で、computation に設定されたノードは外部テーブルのクエリにのみ参加します。