読み取り時に複数の HFile が存在する場合、HBase は問題の行が存在するかどうかをチェックします。そこにある場合、HBase はすべての HFiles (および memstore) からその行を読み取るため、クライアントは常に最新のデータを取得します。よく分からなくてすみませんblock filters
。これについて読んだ情報源を教えてください。それはあなたに完全な答えを提供するのに役立ちます.(ブルームフィルターのことですか?)
メタブロックの目的は、大量のデータを保持することです。メタブロックは、BloomFilter を格納するために HFile によって使用され、文字列キーが各メタブロックに関連付けられます。メタブロックは、HFile.close() が呼び出されるまでメモリに保持されます。
読み取りを高速化するために、メタブロックのインデックスが書き込まれます。これらのインデックスには、ブロック情報 (ブロック オフセット、サイズ、および最初のキー) を含む n レコード (n はブロック数) が含まれます。最後に、Fixed File Trailer が HFile に書き込まれます。これには、すべての HFile インデックス、HFile バージョン、圧縮コーデックなどのオフセットとカウントが含まれています。読み取りが開始されると、最初にHFile.loadFileInfo()
呼び出され、以前に書き込まれたファイル トレーラがすべてのインデックスとともにメモリにロードされます。キーを効率的にクエリできます。次に、HFileScanner
クライアントの助けを借りて、指定されたキーをシークし、それを反復処理してデータを読み取ります。
これらのことを理解するのに役立ったリンクを紹介したいと思います。うまくいけば、それらが役に立つでしょう。
リンク 1: Apache HBase I/O – HFile (Cloudera)
リンク 2: HBase I/O: HFile (th30z)
リンク 3: HBase でのスキャン
HTH