

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan HBase snapshot
<a name="emr-hbase-snapshot"></a>

HBase menggunakan fungsionalitas [snapshot](https://hbase.apache.org/book.html#ops.snapshots) bawaan untuk membuat cadangan tabel yang ringan. Dalam klaster EMR, backup ini dapat diekspor ke Amazon S3 menggunakan EMRFS. Anda dapat membuat snapshot pada node utama menggunakan HBase shell. Topik ini menunjukkan kepada Anda cara menjalankan perintah ini secara interaktif dengan shell atau melalui langkah menggunakan `command-runner.jar` dengan AWS CLI atau AWS SDK untuk Java. Untuk informasi selengkapnya tentang jenis HBase cadangan lainnya, lihat [HBase pencadangan](https://hbase.apache.org/book.html#ops.backup) di dokumentasi. HBase 

## Buat snapshot menggunakan tabel
<a name="w2aac33c49b4"></a>

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

Menggunakan command-runner.jar dari 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 untuk Java

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

**catatan**  
Jika nama snapshot Anda tidak unik, pembuatan operasi gagal dengan kode kembali `-1` atau `255` tetapi Anda mungkin tidak melihat pesan kesalahan yang menyatakan apa yang salah. Untuk menggunakan nama snapshot yang sama, Hapus dan kemudian buat ulang.

## Hapus snapshot
<a name="w2aac33c49b6"></a>

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

## Lihat info snapshot
<a name="w2aac33c49b8"></a>

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

## Ekspor snapshot ke Amazon S3
<a name="w2aac33c49c10"></a>

**penting**  
Jika Anda tidak menentukan `-mappers` nilai saat mengekspor snapshot, HBase gunakan perhitungan arbitrer untuk menentukan jumlah mapper. Nilai ini bisa sangat besar tergantung ukuran tabel Anda, yang secara negatif mempengaruhi tugas yang berjalan selama ekspor. Untuk alasan ini, kami menyarankan Anda untuk menentukan `-mappers` parameter `-bandwidth` parameter (yang menentukan konsumsi bandwidth dalam megabyte per detik), atau keduanya untuk membatasi klaster sumber daya yang digunakan oleh operasi ekspor. Atau, Anda dapat menjalankan operasi snapshot ekspor selama periode penggunaan rendah.

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

Menggunakan `command-runner.jar` dari 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 untuk Java:

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

## Impor snapshot dari Amazon S3
<a name="w2aac33c49c12"></a>

Meskipun ini adalah impor, HBase opsi yang digunakan di sini masih`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
```

Menggunakan `command-runner.jar` dari 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 untuk 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");
```

## Kembalikan tabel dari snapshot di dalam shell HBase
<a name="w2aac33c49c14"></a>

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

HBase saat ini tidak mendukung semua perintah snapshot yang ditemukan di HBase shell. Misalnya, tidak ada opsi HBase baris perintah untuk memulihkan snapshot, jadi Anda harus mengembalikannya di dalam shell. Ini berarti bahwa `command-runner.jar` harus menjalankan perintah Bash. 

**catatan**  
Karena perintah yang digunakan di sini adalah `echo`, adalah mungkin bahwa perintah shell Anda masih akan gagal bahkan jika perintah dijalankan oleh Amazon EMR mengembalikan `0` kode keluar. Periksa log langkah jika Anda memilih untuk menjalankan perintah shell sebagai langkah.

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

Berikut adalah langkah menggunakan AWS CLI. Pertama, buat file `snapshot.json` berikut ini:

```
[
  {
    "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 untuk Java:

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