このトピックでは、ApsaraDB for SelectDB のデータレイクハウス関連のファイルキャッシュ機能について説明します。 ファイルキャッシュ機能を使用すると、外部データソースに対して効率的にフェデレーテッド分析を実行できます。
概要
ファイルキャッシュ機能は、Hadoop Distributed File System(HDFS)やオブジェクトストレージシステムなどの最近アクセスされたリモートストレージシステムのデータファイルをキャッシュすることにより、同じデータを読み取るクエリを高速化します。同じデータに頻繁にアクセスするシナリオでは、ファイルキャッシュ機能は、リモートアクセスを繰り返すことを防ぐことでコストを削減し、ホットデータのクエリと分析のパフォーマンスと安定性を向上させることができます。
仕組み
ファイルキャッシュ機能は、アクセスされたリモートデータを ApsaraDB for SelectDB のローカルバックエンド(BE)ノードにキャッシュします。元のデータファイルは、I/O サイズによってブロックに分割されます。ブロックはローカルファイル cache_path/hash(filepath).substr(0, 3)/hash(filepath)/offset
に保存され、ブロックのメタデータは BE ノードに保存されます。
同じリモートデータにアクセスする場合、ApsaraDB for SelectDB は、アクセスするファイルのデータがローカルキャッシュに存在するかどうかを確認し、ブロックのオフセットとサイズに基づいて、どのデータがローカルブロックから読み取られ、どのデータがリモートで取得されるかを判断します。さらに、ApsaraDB for SelectDB は、リモートでプルされた新しいデータをキャッシュします。 BE ノードが再起動されると、ApsaraDB for SelectDB は cache_path
ディレクトリをスキャンし、ブロックメタデータを復元します。
キャッシュサイズが上限に達すると、ApsaraDB for SelectDB は、Least Recently Used(LRU)原則に基づいて、しばらくアクセスされていないブロックをクリアします。
機能の使用
デフォルトでは、ファイルキャッシュ機能は無効になっています。この機能を有効にするには、フロントエンド(FE)ノードと BE ノードの両方で関連パラメータを設定する必要があります。
FE の設定
現在のセッションでファイルキャッシュ機能を有効にします。
SET enable_file_cache = true; // ファイルキャッシュ機能を有効にする
グローバルにファイルキャッシュ機能を有効にします。
SET GLOBAL enable_file_cache = true; // ファイルキャッシュ機能をグローバルに有効にする
ファイルキャッシュ機能は、Hive や Hudi に保存されているデータのクエリなど、ファイルの外部テーブルで実行されるクエリに対してのみ有効です。ファイルキャッシュ機能は、内部テーブルまたはファイル以外の外部テーブルで実行されるクエリ(Java Database Connectivity(JDBC)を使用して接続されたデータベースのクエリや Elasticsearch に保存されているデータのクエリなど)には有効になりません。
BE の設定
次の表に示すパラメータを BE ノードの conf/be.conf
設定ファイルに追加し、BE ノードを再起動して設定を有効にします。
パラメータ | 説明 |
enable_file_cache | ファイルキャッシュ機能を有効にするかどうかを指定します。デフォルト値:true。 |
file_cache_path | JSON 形式のキャッシュディレクトリに関連する設定。例:
設定では、path はキャッシュパスを指定し、total_size は最大キャッシュサイズを指定し、query_limit は単一のクエリで使用できる最大キャッシュサイズを指定します。 |
file_cache_min_file_segment_size | 単一ブロックの最小サイズ。単位:バイト。デフォルト値:1048576。値は 4096 より大きい必要があります。 |
file_cache_max_file_segment_size | 単一ブロックの最大サイズ。単位:バイト。デフォルト値:4194304。値は 4096 より大きい必要があります。 |
enable_file_cache_query_limit | 単一のクエリで使用されるキャッシュサイズを制限するかどうかを指定します。デフォルト値:false。 |
clear_file_cache | BE ノードの再起動中に既存のキャッシュデータを削除するかどうかを指定します。デフォルト値:false。 |
キャッシュヒットの詳細の表示
set enable_profile=true
コマンドを実行して、セッション変数 enable_profile を有効にします。その後、FE ノードのウェブページの [クエリ] タブでジョブプロファイルを表示できます。ファイルキャッシュ機能には、次のメトリックがあります。
- FileCache:
- IOHitCacheNum: 552 // キャッシュヒット数
- IOTotalNum: 835 // リモートアクセス数
- ReadFromFileCacheBytes: 19.98 MB // キャッシュファイルから読み取られたデータ量
- ReadFromWriteCacheBytes: 0.00 // 書き込みキャッシュから読み取られたデータ量
- ReadTotalBytes: 29.52 MB // 読み取られたデータの合計量
- WriteInFileCacheBytes: 915.77 MB // キャッシュファイルに保存されたデータ量
- WriteInFileCacheNum: 283 // 保存されたブロック数
次の表に、メトリックを示します。
メトリック | 説明 |
IOTotalNum | リモートアクセスの回数。 |
IOHitCacheNum | キャッシュヒットの回数。 |
ReadFromFileCacheBytes | キャッシュファイルから読み取られたデータ量。 |
ReadTotalBytes | 読み取られたデータの合計量。 |
SkipCacheBytes | キャッシュファイルの作成に失敗したか、キャッシュファイルが削除されたためにリモートで再度読み取られたデータ量。 |
WriteInFileCacheBytes | キャッシュファイルに保存されたデータ量。 |
WriteInFileCacheNum | 保存されているブロック数。平均ブロックサイズは、WriteInFileCacheBytes/WriteInFileCacheBytes の式を使用して計算できます。 |
次の場合、すべてのクエリでキャッシュがヒットします。
IOHitCacheNum/IOTotalNum = 1
ReadFromFileCacheBytes/ReadTotalBytes = 1