Menggunakan HBase snapshot - Amazon EMR

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

Menggunakan HBase snapshot

HBase menggunakan fungsionalitas snapshot 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 for Java. Untuk informasi selengkapnya tentang jenis HBase cadangan lainnya, lihat HBase pencadangan di 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 for 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 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 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");

Impor snapshot dari Amazon S3

Meskipun ini adalah impor, HBase opsi yang digunakan di sini masihexport.

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 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");

Kembalikan tabel dari snapshot di 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. 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 for Java:

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