Siapkan cadangan dan replikasi untuk Apache HBase dan Apache Phoenix di HDInsight

Apache HBase mendukung beberapa pendekatan untuk menjaga terhadap kehilangan data:

  • Menyalin hbase folder
  • Ekspor lalu Impor
  • Menyalin tabel
  • Rekam jepret
  • Replikasi

Catatan

Apache Phoenix menyimpan metadatanya dalam tabel HBase, sehingga metadata dicadangkan saat Anda mencadangkan tabel katalog sistem HBase.

Bagian berikut menjelaskan skenario penggunaan untuk setiap pendekatan ini.

Menyalin folder hbase

Dengan pendekatan ini, Anda menyalin semua data HBase, tanpa dapat memilih subset tabel atau kumpulan kolom. Pendekatan berikutnya memberikan kontrol yang lebih besar.

HBase dalam HDInsight menggunakan penyimpanan default yang dipilih saat membuat kluster, baik Azure Storage blob atau Azure Data Lake Storage. Dalam kedua kasus, HBase menyimpan file data dan metadatanya di bawah jalur berikut:

/hbase

  • Di akun Azure Storage, hbase folder berada di akar kontainer blob:

    wasbs://<containername>@<accountname>.blob.core.windows.net/hbase

  • Di Azure Data Lake Storage, hbase folder berada di bawah jalur root yang Anda tentukan saat menyediakan kluster. Jalur akar ini biasanya memiliki clusters folder, dengan subfolder yang dinamai sesuai dengan kluster HDInsight Anda:

    /clusters/<clusterName>/hbase

Dalam kedua kasus, hbase folder berisi semua data yang telah dibersihkan HBase ke disk, tetapi mungkin tidak berisi data dalam memori. Sebelum Anda dapat mengandalkan folder ini sebagai representasi akurat dari data HBase, Anda harus mematikan kluster.

Setelah menghapus kluster, Anda dapat membiarkan data tetap berada, atau menyalin data ke lokasi baru:

  • Buat instans HDInsight baru yang menunjuk ke lokasi penyimpanan saat ini. Instans baru dibuat dengan semua data yang ada.

  • Salin hbase folder ke kontainer nlob Azure Storage atau lokasi Data Lake Storage yang berbeda, lalu mulai kluster baru dengan data tersebut. Untuk Penyimpanan Azure, gunakan AzCopy,dan untuk Data Lake Storage gunakan AdlCopy.

Ekspor lalu Impor

Pada kluster HDInsight sumber, gunakan utilitas Ekspor (disertakan dengan HBase) untuk mengekspor data dari tabel sumber ke penyimpanan terpasang default. Anda kemudian dapat menyalin folder yang diekspor ke lokasi penyimpanan tujuan, dan menjalankan utilitas Impor pada kluster HDInsight tujuan.

Untuk mengekspor data tabel, SSH pertama ke node kepala kluster HDInsight sumber Anda lalu jalankan perintah hbase berikut:

hbase org.apache.hadoop.hbase.mapreduce.Export "<tableName>" "/<path>/<to>/<export>"

Direktori ekspor belum boleh ada. Nama berkas peka huruf besar/kecil.

Untuk mengimpor data tabel, SSH ke dalam simpul kepala kluster HDInsight tujuan Anda lalu jalankan perintah hbase berikut:

hbase org.apache.hadoop.hbase.mapreduce.Import "<tableName>" "/<path>/<to>/<export>"

Tabel harus sudah ada.

Tentukan jalur ekspor penuh ke penyimpanan default atau ke salah satu opsi penyimpanan yang terlampir. Misalnya, di Azure Storage:

wasbs://<containername>@<accountname>.blob.core.windows.net/<path>

Dalam Azure Data Lake Storage Gen2, sintaksnya adalah:

abfs://<containername>@<accountname>.dfs.core.windows.net/<path>

Dalam Azure Data Lake Storage Gen1, sintaksnya adalah:

adl://<accountName>.azuredatalakestore.net:443/<path>

Pendekatan ini menawarkan granularitas tingkat tabel. Anda juga dapat menentukan rentang tanggal untuk disertakan oleh baris, yang memungkinkan Anda melakukan proses secara bertahap. Setiap tanggal dalam milidetik sejak Unix epoch.

hbase org.apache.hadoop.hbase.mapreduce.Export "<tableName>" "/<path>/<to>/<export>" <numberOfVersions> <startTimeInMS> <endTimeInMS>

Anda harus menentukan jumlah versi setiap baris yang akan diekspor. Untuk menyertakan semua versi dalam rentang tanggal, atur ke <numberOfVersions> nilai yang lebih besar dari kemungkinan maksimum versi baris Anda, seperti 100000.

Menyalin tabel

Utilitas CopyTable menyalin data dari tabel sumber, baris demi baris, ke tabel tujuan yang sudah ada dengan skema yang sama dengan sumbernya. Tabel tujuan dapat berada di kluster yang sama atau kluster HBase yang berbeda. Nama peka dengan huruf besar/kecil.

Untuk menggunakan CopyTable dalam kluster, SSH ke dalam simpul kepala kluster HDInsight sumber Anda lalu jalankan perintah hbase ini:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=<destTableName> <srcTableName>

Untuk menggunakan CopyTable untuk menyalin ke tabel pada kluster lain, tambahkan peer pengalih dengan alamat kluster tujuan:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=<destTableName> --peer.adr=<destinationAddress> <srcTableName>

Alamat tujuan terdiri dari tiga bagian berikut:

<destinationAddress> = <ZooKeeperQuorum>:<Port>:<ZnodeParent>

  • <ZooKeeperQuorum> adalah daftar simpul Apache ZooKeeper yang dipisahkan koma, misalnya:

    <zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername2>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername3>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net

  • <Port> pada HDInsight default ke 2181, <ZnodeParent> dan /hbase-unsecure, menjadi <destinationAddress> versi lengkapnya yang adalah:

    <zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername2>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername3>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net:2181:/hbase-unsecure

Lihat Mengumpulkan Daftar Kuorum Apache ZooKeeper secara manual di artikel ini untuk detail tentang cara mengambil nilai ini untuk kluster HDInsight Anda.

Utilitas CopyTable juga mendukung parameter untuk menentukan rentang waktu baris untuk disalin, dan untuk menentukan subset kumpulan kolom dalam tabel untuk disalin. Untuk melihat daftar lengkap parameter yang didukung oleh CopyTable, jalankan CopyTable tanpa parameter apa pun:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable

CopyTable memindai seluruh konten tabel sumber yang akan disalin ke tabel tujuan. Ini dapat mengurangi kinerja kluster HBase Anda saat CopyTable dijalankan.

Catatan

Untuk mengotomatiskan penyalinan data antar tabel, hdi_copy_table.sh lihat skrip di repositori Azure HBase Utils di GitHub.

Mengumpulkan Daftar kuorum Apache ZooKeeper secara manual

Ketika kedua kluster HDInsight berada dalam jaringan virtual yang sama, seperti yang dijelaskan sebelumnya, resolusi nama host internal tercatat secara otomatis. Untuk menggunakan copyTable untuk kluster HDInsight di dua jaringan virtual terpisah yang tersambung oleh VPN Gateway, Anda harus memberikan alamat IP host node Zookeeper dalam kuorum.

Untuk memperoleh nama host kuorum, jalankan perintah curl berikut:

curl -u admin:<password> -X GET -H "X-Requested-By: ambari" "https://<clusterName>.azurehdinsight.net/api/v1/clusters/<clusterName>/configurations?type=hbase-site&tag=TOPOLOGY_RESOLVED" | grep "hbase.zookeeper.quorum"

Perintah curl mengambil dokumen JSON dengan informasi konfigurasi HBase, dan grep perintah hanya mengembalikan entri "hbase.zookeeper.quorum", misalnya:

"hbase.zookeeper.quorum" : "<zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername2>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername3>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net"

Nilai nama host kuorum adalah seluruh string di sebelah kanan titik dua.

Untuk mengambil alamat IP untuk host ini, gunakan perintah curl berikut untuk setiap host di daftar sebelumnya:

curl -u admin:<password> -X GET -H "X-Requested-By: ambari" "https://<clusterName>.azurehdinsight.net/api/v1/clusters/<clusterName>/hosts/<zookeeperHostFullName>" | grep "ip"

Perintah curl ini bersisi <zookeeperHostFullName> nama DNS lengkap host ZooKeeper, misalnya <zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net. Output perintah berisi alamat IP untuk host yang ditentukan, misalnya:

100 "ip" : "10.0.0.9",

Setelah Anda mengumpulkan alamat IP untuk semua node ZooKeeper di kuorum Anda, bangun kembali alamat tujuan:

<destinationAddress> = <Host_1_IP>,<Host_2_IP>,<Host_3_IP>:<Port>:<ZnodeParent>

Dalam contoh kami:

<destinationAddress> = 10.0.0.9,10.0.0.8,10.0.0.12:2181:/hbase-unsecure

Rekam jepret

Snapshot memungkinkan Anda mengambil cadangan data dalam waktu poin di datastore HBase Anda. Snapshot memiliki overhead minimal dan selesai dalam hitungan detik, karena operasi snapshot secara efektif merupakan operasi metadata yang menangkap nama semua file dalam penyimpanan pada saat itu. Pada saat snapshot, tidak ada data aktual yang disalin. Snapshot mengandalkan sifat data yang tidak dapat diubah yang disimpan dalam HDFS, di mana pembaruan, penghapusan, dan penyisipan semuanya direpresentasikan sebagai data baru. Anda dapat memulihkan (mengkloning) snapshot pada kluster yang sama, atau mengekspor snapshot ke kluster lain.

Untuk membuat snapshot, SSH ke head node kluster HDInsight HBase Anda dan memulai hbase shell:

hbase shell

Di dalam hbase shell, gunakan perintah snapshot dengan nama tabel dan snapshot ini:

snapshot '<tableName>', '<snapshotName>'

Untuk memulihkan snapshot menurut nama di dalam hbase shell, pertama-tama nonaktifkan tabel, lalu pulihkan snapshot dan aktifkan kembali tabel:

disable '<tableName>'
restore_snapshot '<snapshotName>'
enable '<tableName>'

Untuk memulihkan snapshot ke tabel baru, gunakan clone_snapshot:

clone_snapshot '<snapshotName>', '<newTableName>'

Untuk mengekspor snapshot ke HDFS untuk digunakan oleh kluster lain, pertama-tama buat snapshot seperti yang dijelaskan sebelumnya lalu gunakan utilitas ExportSnapshot. Jalankan utilitas ini dari dalam sesi SSH ke node kepala, bukan di dalam hbase shell:

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot <snapshotName> -copy-to <hdfsHBaseLocation>

Ini <hdfsHBaseLocation> dapat menjadi salah satu lokasi penyimpanan yang dapat diakses oleh kluster sumber Anda, dan harus menunjuk ke folder hbase yang digunakan oleh kluster tujuan Anda. Misalnya, jika Anda memiliki akun Penyimpanan Azure sekunder yang terpasang pada kluster sumber Anda, dan akun tersebut menyediakan akses ke kontainer yang digunakan oleh penyimpanan default kluster tujuan, Anda dapat menggunakan perintah ini:

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 'Snapshot1' -copy-to 'wasbs://secondcluster@myaccount.blob.core.windows.net/hbase'

Jika Anda tidak memiliki akun Penyimpanan Azure sekunder yang terpasang pada kluster sumber atau jika kluster sumber Anda adalah kluster lokal (atau kluster non-HDI), Anda mungkin mengalami masalah otorisasi saat mencoba mengakses akun penyimpanan kluster HDI Anda. Untuk mengatasinya, tentukan kunci ke akun penyimpanan Anda sebagai parameter baris perintah seperti yang diperlihatkan dalam contoh berikut. Anda bisa mendapatkan kunci ke akun penyimpanan Anda di portal Azure.

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -Dfs.azure.account.key.myaccount.blob.core.windows.net=mykey -snapshot 'Snapshot1' -copy-to 'wasbs://secondcluster@myaccount.blob.core.windows.net/hbase'

Jika kluster tujuan Anda adalah kluster ADLS Gen 2, ubah perintah sebelumnya untuk menyesuaikan konfigurasi yang digunakan oleh ADLS Gen 2:

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -Dfs.azure.account.key.<account_name>.dfs.core.windows.net=<key> -Dfs.azure.account.auth.type.<account_name>.dfs.core.windows.net=SharedKey -Dfs.azure.always.use.https.<account_name>.dfs.core.windows.net=false -Dfs.azure.account.keyprovider.<account_name>.dfs.core.windows.net=org.apache.hadoop.fs.azurebfs.services.SimpleKeyProvider -snapshot 'Snapshot1' -copy-to 'abfs://<container>@<account_name>.dfs.core.windows.net/hbase'

Setelah snapshot diekspor, SSH ke dalam simpul kepala kluster tujuan dan pulihkan snapshot dengan menggunakan clone_snapshot perintah seperti yang dijelaskan sebelumnya.

Snapshot menyediakan cadangan lengkap tabel pada saat snapshot perintah. Snapshot tidak menyediakan kemampuan untuk melakukan snapshot inkremental berdasarkan jendela waktu, atau untuk menentukan subkumpulan keluarga kolom untuk disertakan dalam snapshot.

Replikasi

Replikasi HBase secara otomatis mendorong transaksi dari kluster sumber ke kluster tujuan, menggunakan mekanisme asinkron dengan overhead minimal pada kluster sumber. Di HDInsight, Anda dapat mengatur replikasi antar kluster di mana:

  • Kluster sumber dan tujuan berada dalam jaringan virtual yang sama.
  • Kluster sumber dan tujuan berada di jaringan virtual yang berbeda yang terhubung oleh gateway VPN, tetapi kedua kluster ada di lokasi geografis yang sama.
  • kluster sumber dan kluster tujuan berada di jaringan virtual yang berbeda yang terhubung oleh gateway VPN dan setiap kluster ada di lokasi geografis yang berbeda.

Langkah-langkah umum untuk menyiapkan replikasi adalah:

  1. Pada kluster sumber, buat tabel dan isi data.
  2. Pada kluster tujuan, buat tabel tujuan kosong dengan skema tabel sumber.
  3. Daftarkan kluster tujuan sebagai peer ke kluster sumber.
  4. Aktifkan replikasi pada tabel sumber yang diinginkan.
  5. Salin data yang sudah ada dari tabel sumber ke tabel tujuan.
  6. Replikasi secara otomatis menyalin modifikasi data baru ke tabel sumber ke dalam tabel tujuan.

Untuk mengaktifkan replikasi pada HDInsight, terapkan Tindakan Skrip ke kluster HDInsight sumber yang sedang berjalan. Untuk panduan mengaktifkan replikasi di kluster Anda atau untuk bereksperimen dengan replikasi pada kluster sampel yang dibuat di jaringan virtual menggunakan templat Azure Resource Manager, lihat Mengonfigurasi replikasi Apache HBase. Artikel tersebut juga menyertakan instruksi untuk mengaktifkan replikasi metadata Phoenix.

Langkah berikutnya