Hbaseの災害復旧とバックアップ
I.はじめに
この記事では主に、Hbaseで一般的に使用される3つの簡単な災害復旧バックアップソリューション、つまりCopyTable、Export / Import、Snapshotを紹介します。それらは次のように導入されます。
2、CopyTable
2.1はじめに
CopyTableは、既存のテーブルから新しいテーブルにデータをコピーでき、次の特徴があります。
- 時間間隔、行間隔、テーブル名の変更、列ファミリー名の変更、削除されたデータをコピーするかどうかなどの機能をサポートします。
- コマンドを実行する前に、元のテーブルと同じ構造の新しいテーブルを作成する必要があります。
CopyTable
操作は、HBaseクライアントAPIに基づいて、つまり書き込みにscan
使用されるクエリを使用put
して実行されます。
2.2コマンドフォーマット
Usage: CopyTable [general options] [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR] <tablename>
2.3一般的なコマンド
- 同じクラスター内のCopyTable
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=tableCopy tableOrig
- 異なるクラスターのCopyTable
# 两表名称相同的情况
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
--peer.adr=dstClusterZK:2181:/hbase tableOrig
# 也可以指新的表名
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
--peer.adr=dstClusterZK:2181:/hbase \
--new.name=tableCopy tableOrig
- 以下は、開始時刻と終了時刻、クラスターアドレスを指定し、指定された列ファミリーのみをコピーする、公式による比較的完全な例です。
hbase org.apache.hadoop.hbase.mapreduce.CopyTable \
--starttime=1265875194289 \
--endtime=1265878794289 \
--peer.adr=server1,server2,server3:2181:/hbase \
--families=myOldCf:myNewCf,cf2,cf3 TestTable
2.4その他のパラメーター
あなたは--help
より多くのサポートパラメータを見ることができます
# hbase org.apache.hadoop.hbase.mapreduce.CopyTable --help
3、エクスポート/インポート
3.1はじめに
Export
HDFSへのデータのエクスポートとHDFSImport
からのデータのインポートをサポートします。Export
また、エクスポートされたデータの開始時刻と終了時刻の指定もサポートされているため、増分バックアップに使用できます。Export
エクスポートCopyTable
し、HBasescan
操作に依存します
3.2コマンドフォーマット
# Export
hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]]
# Inport
hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
- エクスポートされた
outputdir
ディレクトリは事前に作成できません。プログラムは自動的に作成します。エクスポートが完了すると、エクスポートされたファイルの所有権は、exportコマンドを実行したユーザーによって所有されます。 - デフォルトで
Cell
は、バージョン履歴に関係なく、最新バージョンのみをエクスポートします。複数のバージョンをエクスポートするに<versions>
は、目的のパラメーターのバージョン番号を置き換える必要があります。
3.3一般的なコマンド
- エクスポートコマンド
hbase org.apache.hadoop.hbase.mapreduce.Export tableName hdfs 路径/tableName.db
- インポートコマンド
hbase org.apache.hadoop.hbase.mapreduce.Import tableName hdfs 路径/tableName.db
四、スナップショット
4.1はじめに
HBaseのスナップショット機能を使用すると、パフォーマンスのオーバーヘッドをほとんど発生させずに、テーブルのコピー(コンテンツとメタデータを含む)を取得できます。スナップショットにはテーブルメタデータとHFiles情報のみが保存されるためです。スナップショットclone
動作がスナップショットから新しいテーブルを作成し、スナップショットのrestore
操作内容は、スナップショット・テーブル・ノードに戻ります。clone
またrestore
、基になるHFile(データファイルを含むHBaseテーブル)は変更されず、変更されたメタデータ情報テーブルのみが変更されるため、操作でデータをコピーする必要はありません。
4.2構成
HBaseスナップショット機能はデフォルトではオンになっていません。スナップショットを開く場合はhbase-site.xml
、次の構成ファイルエントリを追加する必要があります。
<property>
<name>hbase.snapshot.enabled</name>
<value>true</value>
</property>
4.3一般的なコマンド
すべてのスナップショットコマンドは、HbaseShellインタラクティブコマンドラインで実行する必要があります。
1.スナップショットを撮る
# 拍摄快照
hbase> snapshot '表名', '快照名'
デフォルトでは、データの更新はスナップショットを作成する前にメモリで実行されます。メモリ内のデータがスナップショットに含まれていることを確認します。ただし、データをメモリに含めたくない場合は、SKIP_FLUSH
オプションを使用して更新を無効にすることができます。
# 禁止内存刷新
hbase> snapshot '表名', '快照名', {
SKIP_FLUSH => true}
2.スナップショットの一覧表示
# 获取快照列表
hbase> list_snapshots
3.スナップショットの削除
# 删除快照
hbase> delete_snapshot '快照名'
4.スナップショットからテーブルのクローンを作成します
# 从现有的快照创建一张新表
hbase> clone_snapshot '快照名', '新表名'
5.スナップショットを復元します
テーブルをスナップショットノードに復元します。復元操作では、最初にテーブルを無効にする必要があります
hbase> disable '表名'
hbase> restore_snapshot '快照名'
ここで、HBaseがレプリケーションベースのマスタースレーブレプリケーションで構成されている場合、レプリケーションはログレベルで機能し、スナップショットはファイルシステムレベルで機能するため、復元後、レプリカとマスターサーバーは異なる状態になることに注意してください。 。このとき、最初に同期を停止し、すべてのサーバーが一貫したデータポイントに復元された後で、同期を再確立できます。