メインコンテンツまでスキップ

Data lake

Data lake関連のFAQ

このトピックでは、データレイクに関するいくつかのよくある質問(FAQ)を説明し、これらの問題への解決策を提供します。このトピックで言及されているいくつかのメトリクスは、SQLクエリのプロファイルからのみ取得できます。SQLクエリのプロファイルを取得するには、set enable_profile=trueと指定する必要があります。

HDFSノードの遅延

問題の説明

HDFSクラスタに格納されているデータファイルにアクセスする際、実行するSQLクエリのプロファイルから__MAX_OF_FSIOTime__MIN_OF_FSIOTimeメトリクスの値に大きな差があることがあります。これはHDFSノードの遅延を示しています。次の例は、HDFSノードの遅延の問題を示す典型的なプロファイルです。

 - InputStream: 0
- AppIOBytesRead: 22.72 GB
- __MAX_OF_AppIOBytesRead: 187.99 MB
- __MIN_OF_AppIOBytesRead: 64.00 KB
- AppIOCounter: 964.862K (964862)
- __MAX_OF_AppIOCounter: 7.795K (7795)
- __MIN_OF_AppIOCounter: 1
- AppIOTime: 1s372ms
- __MAX_OF_AppIOTime: 4s358ms
- __MIN_OF_AppIOTime: 1.539ms
- FSBytesRead: 15.40 GB
- __MAX_OF_FSBytesRead: 127.41 MB
- __MIN_OF_FSBytesRead: 64.00 KB
- FSIOCounter: 1.637K (1637)
- __MAX_OF_FSIOCounter: 12
- __MIN_OF_FSIOCounter: 1
- FSIOTime: 9s357ms
- __MAX_OF_FSIOTime: 60s335ms
- __MIN_OF_FSIOTime: 1.536ms

解決策

この問題を解決するために、以下の解決策のいずれかを使用できます。

  • [推奨] データキャッシュ機能を有効にすると、外部ストレージシステムからデータを自動的にStarRocksクラスタのBEにキャッシュすることで、遅延したHDFSノードの影響をクエリから排除できます。
  • Hedged Read機能を有効にする。この機能を有効にすると、ブロックからの読み取りが遅い場合、StarRocksは新しい読み取りを起動し、元の読み取りと並列して別のブロックレプリカに対して読み取りを行います。2つの読み取りのいずれかが返ってくると、もう一方の読み取りはキャンセルされます。Hedged Read機能は読み取りの高速化に役立ちますが、Java仮想マシン(JVM)上のヒープメモリの消費量も大幅に増加させます。そのため、物理マシンのメモリ容量が小さい場合は、Hedged Read機能を有効にしないことをお勧めします。

[推奨] データキャッシュ

データキャッシュを参照してください。

Hedged Read

HDFSクラスタでHedged Read機能を有効にし、設定するために、BEの設定ファイル be.confで以下のパラメータ(v3.0以降でサポート)を使用します。

パラメータ

デフォルト値

説明

hdfs_client_enable_hedged_read

false

Hedged Read機能を有効にするかどうかを指定します。

hdfs_client_hedged_read_threadpool_size

128

HDFSクライアントのHedged Readスレッドプールのサイズを指定します。スレッドプールのサイズは、HDFSクライアントで実行されるHedged Readのスレッド数を制限します。このパラメータは、HDFSクラスタのhdfs-site.xmlファイルでのdfs.client.hedged.read.threadpool.sizeパラメータと同等です。

hdfs_client_hedged_read_threshold_millis

2500

Hedged Readを開始する前に待機するミリ秒数を指定します。たとえば、このパラメータを30に設定した場合、ブロックからの読み取りが30ミリ秒以内に返らない場合、HDFSクライアントはすぐに別のブロックレプリカに対してHedged Readを開始します。このパラメータは、HDFSクラスタのhdfs-site.xmlファイルでのdfs.client.hedged.read.threshold.millisパラメータと同等です。

クエリのプロファイルで以下のメトリクスの値が0を超えている場合、Hedged Read機能が有効になっています。

メトリクス

説明

TotalHedgedReadOps

開始されたHedged Readの数

TotalHedgedReadOpsInCurThread

Hedged Readスレッドプールがhdfs_client_hedged_read_threadpool_sizeパラメータで指定された最大サイズに達したために、StarRocksが現在のスレッドでHedged Readを開始する回数

TotalHedgedReadOpsWin

Hedged Readが元の読み取りを上回った回数

xicalBlock>