メインコンテンツまでスキップ
に最終更新

エラスティックコンピュートノード

エラスティックコンピュートノードは特殊な 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_tableprefer_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 ノードの数を制限できます。

注:

  1. バージョン 2.1 より後では、min_backend_num_for_external_table に -1 を設定できます。それより前のバージョンでは、このパラメーターには正の数を指定する必要があります。このパラメーターは、prefer_compute_node_for_external_table = true の場合にのみ有効です。

  2. min_backend_num_for_external_table の値が BE ノードの総数より大きい場合、選択されるのは最大でもすべての BE ノードです。

  3. 上記のパラメーターは、ADMIN SET FRONTEND CONFIG コマンドで FE ノードを再起動せずに動的に変更できます。すべての FE ノードで設定する必要があります。または、fe.conf に設定を追加して FE ノードを再起動します。

ベストプラクティス​

フェデレーションクエリのリソース分離と柔軟なスケーリング​

フェデレーションクエリでは、外部テーブルのデータに対するクエリ専用のコンピュートノード群をデプロイできます。これにより、Hive に対する大規模な分析などの外部テーブルのクエリ負荷を、低レイテンシーの高速なデータ分析などの内部テーブルのクエリ負荷から分離できます。

また、コンピュートノードはステートレスな BE ノードなので、簡単に増減できます。たとえば、k8s を使用してエラスティックコンピュートノードのクラスター群をデプロイし、業務のピーク時にはデータレイク分析用のコンピュートノードを増やし、閑散時には速やかに減らしてコストを削減できます。

よくある質問​

  1. 混合ノードとコンピュートノードは相互に変換できますか?

コンピュートノードは混合ノードに変換できます。ただし、混合ノードをコンピュートノードに変換することはできません。

  1. コンピュートノードにデータストレージ用のディレクトリを設定する必要はありますか?

はい。コンピュートノードのデータストレージ用ディレクトリにはユーザーデータは保存されず、cluster_id などの BE ノード自体の情報ファイルと、動作中に生成される一時ファイルのみが保存されます。

コンピュートノードのストレージディレクトリに必要なディスク容量は少量(MB 単位)で、ノードとともにいつでも削除でき、ユーザーデータには影響しません。

  1. コンピュートノードと混合ノードにファイルキャッシュディレクトリを設定できますか?

ファイルキャッシュは、最近アクセスしたリモートストレージシステム(HDFS またはオブジェクトストレージ)のデータファイルをキャッシュし、同じデータに対する後続のクエリを高速化します。

コンピュートノードと混合ノードのどちらにもファイルキャッシュディレクトリを設定できます。ファイルキャッシュディレクトリは事前に作成する必要があります。

  1. コンピュートノードを廃止するには、DECOMMISION 操作を行う必要がありますか?

いいえ。コンピュートノードは DROP BACKEND 操作で直接削除できます。

  1. コンピュートノードで内部テーブルをクエリすると has no queryable replicas で失敗するのはなぜですか?

これは想定された動作です。computation タイプの BE ノードは内部テーブルのクエリを一切処理しません。クラスター内のすべての BE ノードが computation タイプである場合(または、クラスター内の mix タイプのノードが内部テーブルのレプリカを保持するには不足している場合)、内部テーブルのクエリはこのエラーで失敗します。

対処方法: 内部テーブルのクエリを処理できるように、クラスター内に少なくとも一つの mix タイプの BE ノードを残すか、追加してください。

  1. ストレージとコンピューティングの分離モードでは、NodeRole 列(SHOW BACKENDS で表示)が常に mix です。これは be_node_role = computation の設定が有効になっていないことを意味しますか?

いいえ。ストレージとコンピューティングの分離モードでは、NodeRole 列(SHOW BACKENDS で表示)には常に mix と表示されます。これは既知の表示上の動作で、実際の be_node_role 設定(be.conf 内)とは関係ありません。このパラメーターは分離モードでも有効で、computation に設定されたノードは外部テーブルのクエリにのみ参加します。