

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# HBase のスナップショットを使用する
<a name="emr-hbase-snapshot"></a>

HBase では、組み込みの[スナップショット](https://hbase.apache.org/book.html#ops.snapshots)機能を使用して、テーブルの軽量バックアップが作成されます。EMR クラスターでは、EMRFS を使用してこれらのバックアップを Amazon S3 にエクスポートすることもできます。HBase シェルを使用すると、プライマリノードのスナップショットも作成できます。このトピックでは、シェルでこれらのコマンドをインタラクティブに実行する方法、または AWS CLI または `command-runner.jar`で を使用してステップを実行する方法について説明します AWS SDK for Java。HBase バックアップの他の種類については、HBase のドキュメントで「[HBase Backup](https://hbase.apache.org/book.html#ops.backup)」の項を参照してください。

## テーブルを使用してスナップショットを作成する
<a name="w2aac33c49b4"></a>

```
hbase snapshot create -n snapshotName -t tableName
```

から command-runner.jar を使用する AWS CLI:

```
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \
--steps Name="HBase Shell Step",Jar="command-runner.jar",\
Args=[ "hbase", "snapshot", "create","-n","snapshotName","-t","tableName"]
```

AWS SDK for Java

```
HadoopJarStepConfig hbaseSnapshotConf = new HadoopJarStepConfig()
  .withJar("command-runner.jar")
  .withArgs("hbase","snapshot","create","-n","snapshotName","-t","tableName");
```

**注記**  
スナップショット名が一意でない場合、作成処理はリターンコード `-1` または `255` で失敗になりますが、問題点を記述したエラーメッセージが表示されない可能性があります。同じスナップショット名を使用するには、いったん削除してから再作成してください。

## スナップショットを削除する
<a name="w2aac33c49b6"></a>

```
hbase shell
>> delete_snapshot 'snapshotName'
```

## スナップショット情報を表示する
<a name="w2aac33c49b8"></a>

```
hbase snapshot info -snapshot snapshotName
```

## Amazon S3 にスナップショットをエクスポートする
<a name="w2aac33c49c10"></a>

**重要**  
スナップショットをエクスポートするときに `-mappers` 値を指定しないと、HBase は任意の計算を使用してマッパーの数を判断します。この値は、テーブルサイズによっては非常に大きくなる場合があり、エクスポート時のジョブの実行に悪影響を及ぼします。したがって、`-mappers` パラメータ、`-bandwidth` パラメータ (帯域幅の消費をメガバイト/秒で指定)、または両方を指定してエクスポートオペレーションで使用されるクラスターリソースを制限することをお勧めします。または、使用量が低下する期間にスナップショットのエクスポートオペレーションを実行できます。

```
hbase snapshot export -snapshot snapshotName \
-copy-to s3://amzn-s3-demo-bucket/folder -mappers 2
```

`command-runner.jar` から を使用する AWS CLI:

```
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \
--steps Name="HBase Shell Step",Jar="command-runner.jar",\
Args=[ "hbase", "snapshot", "export","-snapshot","snapshotName","-copy-to","s3://amzn-s3-demo-bucket/folder","-mappers","2","-bandwidth","50"]
```

AWS SDK for Java:

```
HadoopJarStepConfig hbaseImportSnapshotConf = new HadoopJarStepConfig()
  .withJar("command-runner.jar")
  .withArgs("hbase","snapshot","export",
      "-snapshot","snapshotName","-copy-to",
      "s3://bucketName/folder",
      "-mappers","2","-bandwidth","50");
```

## Amazon S3 からスナップショットをインポートする
<a name="w2aac33c49c12"></a>

操作はインポートですが、ここで使用する HBase は `export` です。

```
sudo -u hbase hbase snapshot export \
-D hbase.rootdir=s3://amzn-s3-demo-bucket/folder \
-snapshot snapshotName \
-copy-to hdfs://masterPublicDNSName:8020/user/hbase \
-mappers 2
```

`command-runner.jar` から を使用する AWS CLI:

```
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \
--steps Name="HBase Shell Step",Jar="command-runner.jar", \
Args=["sudo","-u","hbase","hbase snapshot export","-snapshot","snapshotName", \
"-D","hbase.rootdir=s3://amzn-s3-demo-bucket/folder", \
"-copy-to","hdfs://masterPublicDNSName:8020/user/hbase","-mappers","2","-chmod","700"]
```

AWS SDK for Java:

```
HadoopJarStepConfig hbaseImportSnapshotConf = new HadoopJarStepConfig()
  .withJar("command-runner.jar")
  .withArgs("sudo","-u","hbase","hbase","snapshot","export", "-D","hbase.rootdir=s3://path/to/snapshot",
      "-snapshot","snapshotName","-copy-to",
      "hdfs://masterPublicDNSName:8020/user/hbase",
      "-mappers","2","-chuser","hbase");
```

## HBase シェル内のスナップショットからテーブルを復元する
<a name="w2aac33c49c14"></a>

```
hbase shell
>> disable tableName
>> restore_snapshot snapshotName
>> enable tableName
```

HBase では現在、HBase シェルで見つかるスナップショットコマンドがすべてサポートされていません。たとえば、スナップショットを復元する HBase コマンドラインオプションはないため、シェルで復元する必要があります。つまり、`command-runner.jar` で Bash コマンドを実行する必要があります。

**注記**  
ここで使用されているコマンドは `echo` であるため、Amazon EMR で実行されたコマンドが終了コード `0` を返しても、シェルコマンドは失敗する可能性があります。ステップとしてシェルコマンドを実行する場合は、ステップログを確認してください。

```
echo 'disable tableName; \
restore_snapshot snapshotName; \
enable tableName' | hbase shell
```

 AWS CLIを使用するステップを次に示します。まず、以下の内容 `snapshot.json` ファイルを作成します。

```
[
  {
    "Name": "restore",
    "Args": ["bash", "-c", "echo $'disable \"tableName\"; restore_snapshot \"snapshotName\"; enable \"tableName\"' | hbase shell"],
    "Jar": "command-runner.jar",
    "ActionOnFailure": "CONTINUE",
    "Type": "CUSTOM_JAR"
  }
]
```

```
aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \
--steps file://./snapshot.json
```

AWS SDK for Java:

```
HadoopJarStepConfig hbaseRestoreSnapshotConf = new HadoopJarStepConfig()
  .withJar("command-runner.jar")
  .withArgs("bash","-c","echo $'disable \"tableName\"; restore_snapshot \"snapshotName\"; enable \"snapshotName\"' | hbase shell");
```