Migrasi dari HBase yang dihosting di Google Cloud
Halaman ini menjelaskan pertimbangan dan proses migrasi ke Bigtable dari cluster Apache HBase yang dihosting di Google Cloud layanan, seperti Dataproc atau Compute Engine.
Untuk mendapatkan panduan tentang migrasi offline dari lingkungan Apache HBase eksternal ke Bigtable, lihat Memigrasikan Data dari HBase ke Bigtable secara offline. Untuk migrasi online, lihat Mereplikasi dari HBase ke Bigtable.
Alasan bermigrasi dari HBase di Google Cloud ke Bigtable
Alasan mengapa Anda mungkin memilih jalur migrasi ini mencakup hal berikut:
- Anda dapat membiarkan aplikasi klien di tempatnya saat ini di-deploy, dan hanya mengubah konfigurasi koneksi.
- Data Anda tetap berada di ekosistem Google Cloud .
- Anda dapat terus menggunakan HBase API jika Anda mau. Klien HBase Cloud Bigtable untuk Java adalah ekstensi yang didukung sepenuhnya dari library Apache HBase untuk Java.
- Anda menginginkan manfaat menggunakan layanan terkelola untuk menyimpan data Anda.
Pertimbangan
Bagian ini menyarankan beberapa hal yang perlu ditinjau dan dipikirkan sebelum Anda memulai migrasi.
Desain skema Bigtable
Dalam sebagian besar kasus, Anda dapat menggunakan desain skema yang sama di Bigtable seperti yang Anda lakukan di HBase. Jika Anda ingin mengubah skema atau kasus penggunaan Anda berubah, tinjau konsep yang diuraikan dalam Mendesain skema Anda sebelum Anda memigrasikan data.
Persiapan dan pengujian
Sebelum memigrasikan data, pastikan Anda memahami perbedaan antara HBase dan Bigtable. Anda harus meluangkan waktu untuk mempelajari cara mengonfigurasi koneksi untuk menghubungkan aplikasi Anda ke Bigtable. Selain itu, Anda mungkin ingin melakukan pengujian sistem dan fungsional sebelum migrasi untuk memvalidasi aplikasi atau layanan.
Langkah-langkah migrasi
Untuk memigrasikan data dari HBase ke Bigtable, Anda mengambil snapshot HBase dan mengimpor data langsung dari cluster HBase ke Bigtable. Langkah-langkah ini ditujukan untuk satu cluster HBase dan dijelaskan secara mendetail di beberapa bagian berikutnya.
- Hentikan pengiriman penulisan ke HBase.
- Buat tabel tujuan di Bigtable.
- Ambil snapshot HBase dan impor ke Bigtable.
- Memvalidasi data yang diimpor.
- Perbarui aplikasi untuk mengirim operasi baca dan tulis ke Bigtable.
Sebelum memulai
Instal Google Cloud CLI atau gunakan Cloud Shell.
Buat bucket Cloud Storage untuk menyimpan data output validasi Anda. Buat bucket di lokasi yang sama dengan tempat Anda berencana menjalankan tugas Dataproc.
Identifikasi cluster Hadoop yang menjadi sumber migrasi Anda. Anda harus menjalankan tugas untuk migrasi di cluster Dataproc 1.x yang memiliki konektivitas jaringan ke Namenode dan Datanode cluster HBase. Catat alamat Kuorum ZooKeeper dan URI Namenode cluster HBase, yang diperlukan untuk skrip migrasi.
Buat cluster Dataproc versi 1.x di jaringan yang sama dengan cluster HBase sumber. Anda menggunakan cluster ini untuk menjalankan tugas impor dan validasi.
Buat instance Bigtable untuk menyimpan tabel baru Anda. Setidaknya satu cluster di instance Bigtable juga harus berada di region yang sama dengan cluster Dataproc. Contoh:
us-central1
Dapatkan alat Terjemahan Skema:
wget BIGTABLE_HBASE_TOOLS_URL
Ganti
BIGTABLE_HBASE_TOOLS_URL
dengan URLJAR with dependencies
terbaru yang tersedia di repositori Maven alat. Nama file mirip denganhttps://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-1.x-tools/2.6.0/bigtable-hbase-1.x-tools-2.6.0-jar-with-dependencies.jar
.Untuk menemukan URL atau mendownload JAR secara manual, lakukan hal berikut:
- Buka repositori.
- Klik Jelajahi untuk melihat file repositori.
- Klik nomor versi terbaru.
- Identifikasi
JAR with dependencies file
(biasanya di bagian atas). - Klik kanan dan salin URL, atau klik untuk mendownload file.
Dapatkan alat MapReduce, yang Anda gunakan untuk tugas impor dan validasi:
wget BIGTABLE_MAPREDUCE_URL
Ganti
BIGTABLE_MAPREDUCE_URL
dengan URLshaded-byo JAR
terbaru yang tersedia di repositori Maven alat. Nama file mirip denganhttps://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-1.x-mapreduce/2.6.0/bigtable-hbase-1.x-mapreduce-2.6.0-shaded-byo-hadoop.jar
.Untuk menemukan URL atau mendownload JAR secara manual, lakukan langkah-langkah berikut:
- Buka repositori.
- Klik nomor versi terbaru.
- Klik Hasil download.
- Arahkan kursor ke shaded-byo-hadoop.jar.
- Klik kanan dan salin URL, atau klik untuk mendownload file.
Tetapkan variabel lingkungan berikut:
#Google Cloud export PROJECT_ID=PROJECT_ID export REGION=REGION ##Cloud Bigtable export BIGTABLE_INSTANCE_ID=BIGTABLE_INSTANCE_ID ##Dataproc export DATAPROC_CLUSTER_ID=DATAPROC_CLUSTER_NAME #Cloud Storage export BUCKET_NAME="gs://BUCKET_NAME" export STORAGE_DIRECTORY="$BUCKET_NAME/hbase-migration" #HBase export ZOOKEEPER_QUORUM=ZOOKEPER_QUORUM export ZOOKEEPER_PORT=2181 export ZOOKEEPER_QUORUM_AND_PORT="$ZOOKEEPER_QUORUM:$ZOOKEEPER_PORT" export MIGRATION_SOURCE_NAMENODE_URI=MIGRATION_SOURCE_NAMENODE_URI export MIGRATION_SOURCE_TMP_DIRECTORY=${MIGRATION_SOURCE_NAMENODE_URI}/tmp export MIGRATION_SOURCE_DIRECTORY=${MIGRATION_SOURCE_NAMENODE_URI}/hbase #JAR files export TRANSLATE_JAR=TRANSLATE_JAR export MAPREDUCE_JAR=MAPREDUCE_JAR
Ganti placeholder dengan nilai untuk migrasi Anda.
Google Cloud:
PROJECT_ID
: Google Cloud project tempat instance Bigtable Anda beradaREGION
: region yang berisi cluster Dataproc yang akan menjalankan tugas impor dan validasi.
Bigtable:
BIGTABLE_INSTANCE_ID
: ID instance Bigtable yang menjadi tujuan impor data Anda
Dataproc:
DATAPROC_CLUSTER_ID
: ID cluster Dataproc yang akan menjalankan tugas impor dan validasi
Cloud Storage:
BUCKET_NAME
: nama bucket Cloud Storage tempat Anda menyimpan snapshot
HBase:
ZOOKEEPER_QUORUM
: host ZooKeeper yang akan dihubungkan oleh alat, dalam formathost1.myownpersonaldomain.com
MIGRATION_SOURCE_NAMENODE_URI
: URI untuk Namenode cluster HBase Anda, dalam formathdfs://host1.myownpersonaldomain.com:8020
File JAR
TRANSLATE_JAR
: nama dan nomor versi file JARbigtable hbase tools
yang Anda download dari Maven. Nilainya akan terlihat sepertibigtable-hbase-1.x-tools-2.6.0-jar-with-dependencies.jar
.MAPREDUCE_JAR
: nama dan nomor versi file JARbigtable hbase mapreduce
yang Anda download dari Maven. Nilainya akan terlihat sepertibigtable-hbase-1.x-mapreduce-2.6.0-shaded-byo-hadoop.jar
.
(Opsional) Untuk mengonfirmasi bahwa variabel telah ditetapkan dengan benar, jalankan perintah
printenv
untuk melihat semua variabel lingkungan.
Menghentikan pengiriman penulisan ke HBase
Sebelum mengambil snapshot tabel HBase, hentikan pengiriman penulisan ke cluster HBase.
Membuat tabel tujuan di Bigtable
Langkah berikutnya adalah membuat tabel tujuan di instance Bigtable untuk setiap tabel HBase yang Anda migrasikan. Gunakan akun yang memiliki izin bigtable.tables.create
untuk instance.
Panduan ini menggunakan alat Terjemahan Skema Bigtable, yang otomatis membuat tabel untuk Anda. Namun, jika tidak ingin skema Bigtable Anda sama persis dengan skema HBase, Anda dapat membuat tabel menggunakan
CLI cbt
atau konsol Google Cloud .
Alat Terjemahan Skema Bigtable merekam skema tabel HBase, termasuk nama tabel, grup kolom, kebijakan pengumpulan sampah, dan pemisahan. Kemudian, tabel ini membuat tabel serupa di Bigtable.
Untuk setiap tabel yang ingin Anda impor, jalankan perintah berikut untuk menyalin skema dari HBase ke Bigtable.
java \
-Dgoogle.bigtable.project.id=$PROJECT_ID \
-Dgoogle.bigtable.instance.id=$BIGTABLE_INSTANCE_ID \
-Dgoogle.bigtable.table.filter=TABLE_NAME \
-Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM \
-Dhbase.zookeeper.property.clientPort=$ZOOKEEPER_PORT \
-jar $TRANSLATE_JAR
Ganti TABLE_NAME
dengan nama tabel HBase
yang Anda impor. Alat Schema Translation menggunakan nama ini untuk
tabel Bigtable baru Anda.
Anda juga dapat mengganti TABLE_NAME
dengan ekspresi reguler, seperti ".*", yang mencakup semua tabel yang ingin Anda buat, lalu jalankan perintah hanya sekali.
Mengambil snapshot tabel HBase dan mengimpornya ke Bigtable
Selesaikan langkah-langkah berikut untuk setiap tabel yang ingin Anda migrasikan ke Bigtable.
Jalankan perintah berikut:
echo "snapshot 'HBASE_TABLE_NAME', 'HBASE_SNAPSHOT_NAME'" | hbase shell -n
Ganti kode berikut:
HBASE_TABLE_NAME
: nama tabel HBase yang Anda migrasikan ke Bigtable.HBASE_SNAPSHOT_NAME
: nama unik untuk snapshot baru
Impor snapshot dengan menjalankan perintah berikut:
gcloud dataproc jobs submit hadoop \ --cluster $DATAPROC_CLUSTER_ID \ --region $REGION \ --project $PROJECT_ID \ --jar $MAPREDUCE_JAR \ -- \ import-snapshot \ -Dgoogle.bigtable.project.id=$PROJECT_ID \ -Dgoogle.bigtable.instance.id=$BIGTABLE_INSTANCE_ID \ HBASE_SNAPSHOT_NAME \ $MIGRATION_SOURCE_DIRECTORY \ BIGTABLE_TABLE_NAME \ $MIGRATION_SOURCE_TMP_DIRECTORY
Ganti kode berikut:
HBASE_SNAPSHOT_NAME
: nama yang Anda tetapkan ke snapshot tabel yang Anda imporBIGTABLE_TABLE_NAME
: nama tabel Bigtable yang menjadi tujuan impor
Setelah Anda menjalankan perintah, alat akan memulihkan snapshot HBase di cluster sumber, lalu mengimpornya. Proses pemulihan snapshot dapat memakan waktu beberapa menit, bergantung pada ukuran snapshot.
Opsi tambahan berikut tersedia saat Anda mengimpor data:
Menetapkan waktu tunggu berbasis klien untuk permintaan mutator yang di-buffer (default 600000 md). Lihat contoh berikut:
-Dgoogle.bigtable.rpc.use.timeouts=true -Dgoogle.bigtable.mutate.rpc.timeout.ms=600000
Pertimbangkan pembatasan berbasis latensi, yang dapat mengurangi dampak yang mungkin ditimbulkan oleh tugas batch impor pada workload lain. Pembatasan harus diuji untuk kasus penggunaan migrasi Anda. Lihat contoh berikut:
-Dgoogle.bigtable.buffered.mutator.throttling.enable=true -Dgoogle.bigtable.buffered.mutator.throttling.threshold.ms=100
Ubah jumlah tugas peta yang membaca satu region HBase (default 2 tugas peta per region). Lihat contoh berikut:
-Dgoogle.bigtable.import.snapshot.splits.per.region=3
Tetapkan konfigurasi MapReduce tambahan sebagai properti. Lihat contoh berikut:
-Dmapreduce.map.maxattempts=4 -Dmapreduce.map.speculative=false -Dhbase.snapshot.thread.pool.max=20
Perhatikan tips berikut saat Anda mengimpor:
- Untuk meningkatkan performa pemuatan data, pastikan Anda memiliki pekerja cluster Dataproc yang cukup untuk menjalankan tugas impor peta secara paralel. Secara
default, pekerja Dataproc n1-standard-8 akan menjalankan delapan tugas
impor. Memiliki pekerja yang cukup memastikan bahwa tugas impor memiliki daya komputasi yang cukup untuk diselesaikan dalam waktu yang wajar, tetapi tidak terlalu banyak daya sehingga membebani instance Bigtable.
- Jika Anda tidak menggunakan instance Bigtable untuk beban kerja lain, kalikan jumlah node di instance Bigtable Anda dengan 3, lalu bagi dengan 8 (dengan pekerja Dataproc n1-standard-8). Gunakan hasil sebagai jumlah pekerja Dataproc.
- Jika Anda menggunakan instance untuk beban kerja lain pada saat yang sama dengan mengimpor data HBase, kurangi nilai pekerja Dataproc atau tingkatkan jumlah node Bigtable untuk memenuhi persyaratan beban kerja.
- Selama impor, Anda harus memantau penggunaan CPU instance Bigtable. Jika pemakaian CPU di seluruh instance Bigtable terlalu tinggi, Anda mungkin perlu menambahkan node tambahan. Penambahan node akan langsung meningkatkan pemanfaatan CPU, tetapi cluster mungkin memerlukan waktu hingga 20 menit setelah node ditambahkan untuk mencapai performa optimal.
Untuk mengetahui informasi selengkapnya tentang pemantauan instance Bigtable, lihat Memantau instance Bigtable.
Memvalidasi data yang diimpor di Bigtable
Selanjutnya, validasi migrasi data dengan melakukan perbandingan hash antara
tabel sumber dan tujuan untuk mendapatkan keyakinan terhadap integritas
data yang dimigrasikan. Pertama, jalankan tugas hash-table
untuk membuat hash rentang baris
pada tabel sumber. Kemudian, selesaikan validasi dengan menjalankan tugas sync-table
untuk menghitung dan mencocokkan hash dari Bigtable dengan sumber.
Untuk membuat hash yang akan digunakan untuk validasi, jalankan perintah berikut untuk setiap tabel yang Anda migrasikan:
gcloud dataproc jobs submit hadoop \ --project $PROJECT_ID \ --cluster $DATAPROC_CLUSTER_ID \ --region $REGION \ --jar $MAPREDUCE_JAR \ -- \ hash-table \ -Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM_AND_PORT \ HBASE_TABLE_NAME \ $STORAGE_DIRECTORY/HBASE_TABLE_NAME/hash-output/
Ganti
HBASE_TABLE_NAME
dengan nama tabel HBase yang Anda buat snapshotnya.Jalankan perintah berikut di shell perintah:
gcloud dataproc jobs submit hadoop \ --project $PROJECT_ID \ --cluster $DATAPROC_CLUSTER_ID \ --region $REGION \ --jar $MAPREDUCE_JAR \ -- \ sync-table \ --sourcezkcluster=$ZOOKEEPER_QUORUM_AND_PORT:/hbase \ --targetbigtableproject=$PROJECT_ID \ --targetbigtableinstance=$BIGTABLE_INSTANCE_ID \ $STORAGE_DIRECTORY/HBASE_TABLE_NAME/hash-output/ \ HBASE_TABLE_NAME \ BIGTABLE_TABLE_NAME
Ganti kode berikut:
HBASE_TABLE_NAME
: nama tabel HBase yang Anda imporBIGTABLE_TABLE_NAME
: nama tabel Bigtable yang menjadi tujuan impor
Anda dapat menambahkan --dryrun=false
ke perintah jika ingin mengaktifkan sinkronisasi antara sumber dan target untuk rentang hash yang berbeda.
Setelah tugas sync-table
selesai, penghitung untuk tugas akan ditampilkan di
konsol Google Cloud tempat tugas dieksekusi. Jika tugas impor berhasil mengimpor semua data, nilai untuk HASHES_MATCHED
akan memiliki nilai dan nilai untuk HASHES_NOT_MATCHED
adalah 0.
Jika HASHES_NOT_MATCHED
menampilkan nilai, Anda dapat menjalankan ulang sync-table
dalam mode
debug untuk memunculkan rentang yang berbeda dan detail tingkat sel seperti
Source missing cell
, Target missing cell
, atau Different values
. Untuk mengaktifkan
mode debug, konfigurasi --properties mapreduce.map.log.level=DEBUG
. Setelah
tugas dijalankan, gunakan Cloud Logging dan telusuri ekspresi
jsonPayload.class="org.apache.hadoop.hbase.mapreduce.SyncTable"
untuk meninjau
sel yang berbeda.
Anda dapat mencoba tugas impor lagi atau menggunakan SyncTable untuk menyinkronkan tabel sumber dan
tabel target dengan menyetel dryrun=false
. Tinjau HBase SyncTable dan opsi konfigurasi tambahan sebelum melanjutkan.
Perbarui aplikasi untuk mengirim operasi baca dan tulis ke Bigtable
Setelah memvalidasi data untuk setiap tabel di cluster, Anda dapat mengonfigurasi aplikasi untuk merutekan semua traffic-nya ke Bigtable, lalu menghentikan penggunaan cluster HBase.
Setelah migrasi selesai, Anda dapat menghapus snapshot.