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.

  1. Berhenti mengirim operasi tulis ke HBase.
  2. Buat tabel tujuan di Bigtable.
  3. Ambil snapshot HBase dan impor ke Bigtable.
  4. Validasi data yang diimpor.
  5. Perbarui aplikasi untuk mengirim operasi baca dan tulis ke Bigtable.

gambar

Sebelum memulai

  1. Instal Google Cloud CLI atau gunakan Cloud Shell.

  2. Buat bucket Cloud Storage untuk menyimpan data output validasi Anda. Buat bucket di lokasi yang sama dengan tempat Anda berencana menjalankan tugas Dataproc.

  3. 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.

  4. Buat cluster Dataproc versi 1.x di jaringan yang sama dengan cluster HBase sumber. Anda menggunakan cluster ini untuk menjalankan tugas impor dan validasi.

  5. 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

  6. Dapatkan alat Terjemahan Skema:

    wget BIGTABLE_HBASE_TOOLS_URL
    

    Ganti BIGTABLE_HBASE_TOOLS_URL dengan URL JAR with dependencies terbaru yang tersedia di repositori Maven alat. Nama filenya mirip dengan https://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:

    1. Buka repositori.
    2. Klik Jelajahi untuk melihat file repositori.
    3. Klik nomor versi terbaru.
    4. Identifikasi JAR with dependencies file (biasanya di bagian atas).
    5. Klik kanan dan salin URL, atau klik untuk mendownload file.
  7. Dapatkan alat MapReduce, yang Anda gunakan untuk tugas impor dan validasi:

    wget BIGTABLE_MAPREDUCE_URL
    

    Ganti BIGTABLE_MAPREDUCE_URL dengan URL shaded-byo JAR terbaru yang tersedia di repositori Maven alat. Nama file mirip dengan https://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:

    1. Buka repositori.
    2. Klik nomor versi terbaru.
    3. Klik Hasil download.
    4. Arahkan kursor ke shaded-byo-hadoop.jar.
    5. Klik kanan dan salin URL, atau klik untuk mendownload file.
  8. 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 berada
    • REGION: 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 format host1.myownpersonaldomain.com
    • MIGRATION_SOURCE_NAMENODE_URI: URI untuk Namenode cluster HBase, dalam format hdfs://host1.myownpersonaldomain.com:8020

    File JAR

    • TRANSLATE_JAR: nama dan nomor versi file JAR bigtable hbase tools yang Anda download dari Maven. Nilainya harus terlihat seperti bigtable-hbase-1.x-tools-2.6.0-jar-with-dependencies.jar.
    • MAPREDUCE_JAR: nama dan nomor versi file JAR bigtable hbase mapreduce yang Anda download dari Maven. Nilainya harus terlihat seperti bigtable-hbase-1.x-mapreduce-2.6.0-shaded-byo-hadoop.jar.
  9. (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.

  1. 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
  2. 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 impor
    • BIGTABLE_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.

  1. 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.

  2. 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 impor
    • BIGTABLE_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.

Hasil SyncTable di Cloud Logging

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.

Langkah selanjutnya