View a markdown version of this page

Menggunakan snapshot HBase - Amazon EMR

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

Menggunakan snapshot HBase

HBase menggunakan fungsi snapshot bawaan untuk membuat backup tabel ringan. Dalam klaster EMR, backup ini dapat diekspor ke Amazon S3 menggunakan EMRFS. Anda dapat membuat snapshot pada node utama menggunakan shell HBase. 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 lain dari cadangan HBase, lihat HBase cadangan dalam dokumentasi HBase.

Buat snapshot menggunakan tabel

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

hbase shell >> delete_snapshot 'snapshotName'

Lihat info snapshot

hbase snapshot info -snapshot snapshotName

Ekspor snapshot ke Amazon S3

penting

Jika Anda tidak menentukan -mappers nilai ketika mengekspor snapshot, HBase menggunakan perhitungan sewenang-wenang untuk menentukan jumlah pemeta. 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

Meskipun ini adalah impor, opsi HBase 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");

Mengembalikan tabel dari snapshot dalam shell HBase

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

HBase saat ini tidak mendukung semua perintah snapshot yang ditemukan di HBase shell. Sebagai contoh, tidak ada HBase opsi baris perintah untuk memulihkan snapshot, sehingga Anda harus mengembalikannya 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");