Bermigrasi dari HBase di Google Cloud
Halaman ini menjelaskan pertimbangan dan proses untuk bermigrasi ke Bigtable dari cluster Apache HBase yang dihosting di layanan Google Cloud, seperti Dataproc atau Compute Engine.
Untuk mendapatkan panduan tentang cara bermigrasi dari lingkungan Apache HBase eksternal ke Bigtable, lihat Memigrasikan Data dari HBase ke Bigtable. Untuk mempelajari migrasi online, lihat Mereplikasi dari HBase ke Bigtable.
Alasan bermigrasi dari HBase di Google Cloud ke Bigtable
Alasan Anda mungkin memilih jalur migrasi ini mencakup hal berikut:
- Anda dapat membiarkan aplikasi klien di tempatnya saat ini, hanya mengubah konfigurasi koneksi.
- Data Anda tetap berada di ekosistem Google Cloud.
- Anda dapat terus menggunakan HBase API jika 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.
Pertimbangan
Bagian ini menyarankan beberapa hal yang perlu ditinjau dan dipikirkan sebelum Anda memulai migrasi.
Desain skema Bigtable
Pada umumnya, Anda dapat menggunakan desain skema yang sama di Bigtable seperti yang Anda lakukan di HBase. Jika Anda ingin mengubah skema atau jika kasus penggunaan Anda berubah, tinjau konsep yang diuraikan dalam Mendesain skema sebelum 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 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.
- Berhenti mengirim operasi tulis ke HBase.
- Buat tabel tujuan di Bigtable.
- Ambil snapshot HBase dan impor ke Bigtable.
- Validasi 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 tempat Anda melakukan migrasi. Anda harus menjalankan tugas untuk migrasi di cluster Dataproc 1.x yang memiliki konektivitas jaringan ke Namenode dan Datanode cluster HBase. Perhatikan alamat Quorum 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 filenya 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 tindakan 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 hal 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
: project Google Cloud tempat instance Bigtable Anda beradaREGION
: region yang berisi cluster Dataproc yang akan menjalankan tugas impor dan validasi.
Bigtable:
BIGTABLE_INSTANCE_ID
: ID instance Bigtable tempat Anda mengimpor data
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 ini, dalam formathost1.myownpersonaldomain.com
MIGRATION_SOURCE_NAMENODE_URI
: URI untuk Namenode cluster HBase, dalam formathdfs://host1.myownpersonaldomain.com:8020
File JAR
TRANSLATE_JAR
: nama dan nomor versi file JARbigtable hbase tools
yang Anda download dari Maven. Nilainya harus 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 harus 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 operasi tulis ke HBase
Sebelum mengambil snapshot tabel HBase, berhenti mengirim operasi tulis 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 Bigtable Schema Translation, yang secara otomatis membuat tabel untuk Anda. Namun, jika tidak ingin skema Bigtable cocok persis dengan skema HBase, Anda dapat membuat tabel menggunakan cbt
CLI atau Konsol Google Cloud.
Alat Bigtable Schema Translation menangkap skema tabel HBase, termasuk nama tabel, grup kolom, kebijakan pembersihan sampah, dan pemisahan. Kemudian, tabel serupa akan dibuat 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 Penerjemahan Skema menggunakan nama ini untuk
tabel Bigtable baru Anda.
Anda juga dapat mengganti TABLE_NAME
dengan
ekspresi reguler, seperti ".*", yang mengambil semua tabel yang ingin
Anda buat, lalu menjalankan 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 ini akan memulihkan snapshot HBase di cluster sumber, lalu mengimpornya. Mungkin perlu waktu beberapa menit hingga proses pemulihan snapshot selesai, bergantung pada ukuran snapshot.
Opsi tambahan berikut tersedia saat Anda mengimpor data:
Tetapkan waktu tunggu berbasis klien untuk permintaan pengubah yang dibuffer (default 600.000 md). Lihat contoh berikut:
-Dgoogle.bigtable.rpc.use.timeouts=true -Dgoogle.bigtable.mutate.rpc.timeout.ms=600000
Pertimbangkan throttling berbasis latensi, yang dapat mengurangi dampak tugas batch impor terhadap workload lainnya. 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 memadai 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 memadai untuk diselesaikan dalam waktu yang wajar, tetapi tidak terlalu besar sehingga membebani instance Bigtable.
- Jika Anda juga 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 Anda 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 penggunaan CPU di seluruh instance Bigtable terlalu tinggi, Anda mungkin perlu menambahkan node tambahan. Menambahkan node akan langsung meningkatkan penggunaan CPU, tetapi dapat memerlukan waktu hingga 20 menit setelah node ditambahkan agar cluster mencapai performa optimal.
Untuk informasi selengkapnya tentang cara memantau 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 dengan integritas
data yang dimigrasikan. Pertama, jalankan tugas hash-table
untuk membuat hash rentang baris
di 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 snapshot-nya Anda buat.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 Anda impor
Anda dapat menambahkan --dryrun=false
ke perintah secara opsional jika ingin mengaktifkan
sinkronisasi antara sumber dan target untuk rentang hash yang berbeda.
Saat tugas sync-table
selesai, penghitung untuk tugas akan ditampilkan di Konsol Google Cloud tempat tugas dijalankan. 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 kembali sync-table
dalam mode
debug untuk menampilkan rentang yang berbeda dan detail tingkat sel seperti
Source missing cell
, Target missing cell
, atau Different values
. Untuk mengaktifkan
mode debug, konfigurasikan --properties mapreduce.map.log.level=DEBUG
. Setelah
tugas dieksekusi, gunakan Cloud Logging dan telusuri ekspresi
jsonPayload.class="org.apache.hadoop.hbase.mapreduce.SyncTable"
untuk meninjau
sel yang menyimpang.
Anda dapat mencoba tugas impor lagi atau menggunakan SyncTable untuk menyinkronkan tabel sumber dan
target dengan menetapkan dryrun=false
. Tinjau HBase SyncTable dan opsi konfigurasi tambahan sebelum melanjutkan.
Memperbarui aplikasi untuk mengirim operasi baca dan tulis ke Bigtable
Setelah memvalidasi data untuk setiap tabel dalam cluster, Anda dapat mengonfigurasi aplikasi untuk merutekan semua traffic-nya ke Bigtable, lalu menghentikan penggunaan cluster HBase.
Setelah migrasi selesai, Anda dapat menghapus snapshot.