3

同じクラスター内の HBase にテーブル構造とデータのコピーを作成する効率的な方法はありますか? 明らかに、宛先テーブルの名前は異なります。私がこれまでに見つけたもの:

  1. 異なるHBase クラスター間でデータをコピーするためのツールとして説明されている CopyTable ジョブ。クラスター内の操作をサポートすると思いますが、そのシナリオを効率的に処理するように設計されているかどうかはわかりません。

  2. export+import ジョブを使用します。それはハックのように聞こえますが、私は HBase を初めて使用するので、それが本当の解決策になるのでしょうか?

なぜ私がこれをやろうとしているのかと尋ねる人もいるかもしれません。私のシナリオは、必要に応じて「スナップショット」状態で、アクセスする必要がある何百万ものオブジェクトがあるということです。これらのオブジェクトの多くを更新する、毎日実行されるバッチ プロセスがあります。そのバッチ プロセスのいずれかのステップが失敗した場合、元の状態に「ロールバック」できる必要があります。それだけでなく、バ​​ッチ処理中にリクエストを元の状態に戻す必要があります。

したがって、現在の流れは、元のテーブルを作業コピーに複製し、作業コピーを更新している間、元のテーブルを使用してリクエストを処理し続けることです。バッチ プロセスが正常に完了した場合は、すべてのサービスに新しいテーブルを使用するように通知します。それ以外の場合は、新しいテーブルを破棄します。

これは BDB を使用して正常に機能しましたが、現在、非常に大きなデータのまったく新しい世界にいるため、間違ったアプローチを取っている可能性があります。代わりに使用すべきパターンの提案があれば、大歓迎です。:-)

4

1 に答える 1

1

HBase のすべてのデータには特定のタイムスタンプがあります。特定のタイムスタンプの時点で最新バージョンのデータが必要であることを示すパラメーターを使用して、読み取り (Gets および Scans) を実行できます。できることの 1 つは、バッチ プロセスが開始する前の時間を指すこのパラメーターを使用して、要求をサーバーに読み取ることです。バッチが完了したら、読み取りタイムスタンプを現在の状態に上げます。

このアプローチを取る場合、注意すべき点がいくつかあります。

  • HBase テーブルは、特定のセルの最新の N バージョンを格納するように構成されています。セル内のデータを N 個の新しい値で上書きすると、次の圧縮時に古い値が失われます。(TTL を使用してセルを期限切れにするように構成することもできますが、それはあなたのケースに一致するようには聞こえません)。
  • 同様に、プロセスの一部としてデータを削除すると、次の圧縮後にデータを読み取ることができなくなります。

したがって、バッチ プロセスの一部として削除を発行せず、テーブルに既に存在する同じデータの、保存するように構成したよりも多くのバージョンを書き込まない場合は、古い要求を引き続き処理できます。更新している同じテーブルの。これにより、効果的にスナップショットが得られます。

于 2010-08-27T22:01:18.763 に答える