sql >> データベース >  >> NoSQL >> HBase

ApacheHBaseスナップショットの概要

    CDHの現在の(4.2)リリース—ClouderaのApacheHadoopおよび関連プロジェクト(Apache HBaseを含む)の100%オープンソースディストリビューション—は、管理者が指定されたスナップショットを撮ることができる新しいHBase機能を導入しました。テーブル。

    CDH 4.2より前は、テーブルをバックアップまたはクローン化する唯一の方法は、テーブルのコピー/エクスポートを使用するか、テーブルを無効にした後、HDFS内のすべてのhfileをコピーすることでした。テーブルのコピー/エクスポートは、MapReduceを使用してテーブルをスキャンおよびコピーするツールのセットですが、リージョンサーバーのパフォーマンスに直接影響します。テーブルを無効にすると、すべての読み取りと書き込みが停止しますが、ほとんどの場合、これは受け入れられません。

    対照的に、HBaseスナップショットを使用すると、管理者はデータコピーなしで、リージョンサーバーへの影響を最小限に抑えてテーブルのクローンを作成できます。スナップショットを別のクラスターにエクスポートしても、どのリージョンサーバーにも直接影響しません。エクスポートは、追加のロジックを備えた単なるdistcpです。

    HBaseスナップショットのユースケースのいくつかを次に示します。

    • ユーザー/アプリケーションエラーからの回復
      • 既知の安全な状態から復元/回復します。
      • 以前のスナップショットを表示し、違いを選択的に本番環境にマージします。
      • 主要なアプリケーションのアップグレードまたは変更の直前にスナップショットを保存します。
    • 特定の時間におけるデータの表示に関する監査および/またはレポート
      • コンプライアンスの目的で月次データを取得します。
      • 1日の終わり/月/四半期のレポートを実行します。
    • アプリケーションテスト
      • スナップショットから本番環境と同様のデータでスキーマまたはアプリケーションの変更をテストし、それを破棄します。例:スナップショットを作成し、スナップショットのコンテンツ(スキーマとデータ)から新しいテーブルを作成し、スキーマを変更したり、行を追加および削除したりして、新しいテーブルを操作します。 (元のテーブル、スナップショット、および新しいテーブルは相互に独立したままです。)
    • 作業のオフロード
      • スナップショットを作成し、それを別のクラスターにエクスポートして、MapReduceジョブを実行します。エクスポートスナップショットはHDFSレベルで動作するため、CopyTableのようにメインのHBaseクラスターの速度を低下させることはありません。

    スナップショットとは何ですか?

    スナップショットは、管理者がテーブルの以前の状態に戻ることを可能にするメタデータ情報のセットです。スナップショットはテーブルのコピーではありません。これは単なるファイル名のリストであり、データをコピーするものではありません。完全なスナップショットの復元とは、以前の「テーブルスキーマ」に戻り、スナップショットの作成以降に行われた変更を失って以前のデータに戻ることを意味します。

    操作

    • スナップショットを作成する:この操作は、指定されたテーブルのスナップショットを作成しようとします。バランシング、分割、またはマージ中にリージョンが移動している場合、操作が失敗する可能性があります。
    • スナップショットのクローンを作成する:この操作では、同じスキーマを使用し、指定したスナップショットに同じデータが存在する新しいテーブルを作成します。この操作の結果、元のテーブルやスナップショットに影響を与えることなく変更できる、完全に機能する新しいテーブルが作成されます。
    • スナップショットを復元する:この操作により、テーブルスキーマとデータがスナップショット状態に戻ります。 (注:この操作では、スナップショットの作成以降に行われた変更はすべて破棄されます。)
    • スナップショットの削除:この操作により、システムからスナップショットが削除され、クローンや他のスナップショットに影響を与えることなく、非共有ディスク領域が解放されます。
    • スナップショットのエクスポート:この操作では、スナップショットデータとメタデータを別のクラスターにコピーします。操作にはHDFSのみが含まれるため、マスターサーバーまたはリージョンサーバーとの通信がないため、HBaseクラスターがダウンする可能性があります。

    スナップショットのゼロコピー、復元、クローン化

    スナップショットとCopyTable/ExportTableの主な違いは、スナップショット操作がメタデータのみを書き込むことです。大量のデータコピーは含まれていません。

    HBaseの主な設計原則の1つは、ファイルが書き込まれると、ファイルが変更されることはないということです。不変のファイルがあるということは、スナップショットがスナップショット操作の時点で使用されたファイルを追跡するだけであることを意味します。圧縮中に、ファイルを削除するのではなくアーカイブする必要があることをシステムに通知するのはスナップショットの責任です。

    同じ原則が、クローン操作または復元操作にも適用されます。ファイルは不変であるため、スナップショットによって参照されるファイルへの「リンク」だけで新しいテーブルが作成されます。

    他のクラスターにはデータファイルがないため、スナップショットのエクスポートはデータのコピーを必要とする唯一の操作です。

    スナップショットのエクスポートとテーブルのコピー/エクスポート

    コピー/エクスポートジョブと比較してスナップショットが提供できる一貫性が優れていることを除けば、スナップショットのエクスポートとテーブルのコピー/エクスポートの主な違いは、ExportSnapshotがHDFSレベルで動作することです。これは、マスターサーバーとリージョンサーバーがこの操作に関与していないことを意味します。その結果、データ用の不要なキャッシュが作成されることはなく、スキャンプロセス中に作成されたオブジェクトの数が原因で追加のGC一時停止がトリガーされることもありません。 HBaseクラスターのパフォーマンスへの影響は、DataNodeが経験する余分なネットワークとディスクのワークロードに起因します。

    HBaseシェル:スナップショット操作

    hbase.snapshot.enabledかどうかを確認して、スナップショットのサポートがオンになっていることを確認します hbase-site.xmlのプロパティがtrueに設定されています。指定したテーブルのスナップショットを作成するには、snapshotを使用します 指図。 (ファイルのコピーは実行されません)

    hbase> snapshot ‘tableName’, ‘snapshotName’
    

    すべてのスナップショットを一覧表示するには、list_snapshotを使用します 指図。スナップショット名、ソーステーブル、作成日時が表示されます。

    hbase> list_snapshots
    SNAPSHOT               TABLE + CREATION TIME
     TestSnapshot          TestTable (Mon Feb 25 21:13:49 +0000 2013)
    

    スナップショットを削除するには、delete_snapshotを使用します 指図。スナップショットを削除しても、クローンテーブルやその他の後続のスナップショットには影響しません。

    hbase> delete_snapshot 'snapshotName'
    

    指定されたスナップショット(クローン)から新しいテーブルを作成するには、clone_snapshotを使用します 指図。データのコピーは実行されないため、同じデータに2倍のスペースを使用することはありません。

    hbase> clone_snapshot 'snapshotName', 'newTableName'
    

    現在のテーブルスキーマ/データを指定されたスナップショットコンテンツに置き換えるには、restore_snapshot を使用します コマンド。

    hbase> restore_snapshot 'snapshotName'
    

    既存のスナップショットを別のクラスターにエクスポートするには、ExportSnapshotを使用します 道具。エクスポートはRegionServersのワークロードに影響を与えません。これは、HDFSレベルで機能し、HDFSの場所(他のクラスターのhbase.rootdir)を指定する必要があります。

    hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot
    SnapshotName -copy-to hdfs:///srv2:8082/hbase
    

    現在の制限

    スナップショットはいくつかの仮定に依存しており、現在、新機能と完全に統合されていないツールがいくつかあります。

    • スナップショットによって参照される領域をマージすると、スナップショットとクローンテーブルでデータが失われます。
    • 復元されたテーブルのレプリケーションがオンになっているテーブルを復元すると、2つのクラスターが同期しなくなります。テーブルはレプリカに復元されません。

    結論

    現在、スナップショット機能には必要な基本機能がすべて含まれていますが、指標、Web UI統合、ディスク使用量の最適化など、まだやるべきことがたくさんあります。

    HBaseの構成方法とスナップショットの使用方法の詳細については、ドキュメントを確認してください。

    Matteo Bertozziは、プラットフォームチームのソフトウェアエンジニアであり、HBaseコミッターです。


    1. MongoDB-10進数タイプの値はどうですか?

    2. その場で生成される非常に大きなファイルをクライアントにダウンロードさせる方法

    3. モンゴ:外部の重みで並べ替える方法

    4. Redisでハッシュマップ値の有効期限を設定しますか?