Memigrasikan tabel dari data lake HDFS

Dokumen ini menunjukkan cara memigrasikan tabel data lake Apache Hadoop Distributed File System (HDFS) ke Google Cloud.

Anda dapat menggunakan konektor migrasi data lake HDFS di BigQuery Data Transfer Service untuk memigrasikan tabel Hive dan Iceberg dari berbagai distribusi Hadoop, baik di lingkungan lokal maupun cloud, ke Google Cloud.

Dengan konektor data lake HDFS, Anda dapat mendaftarkan tabel data lake HDFS dengan Dataproc Metastore dan BigLake Metastore sekaligus menggunakan Cloud Storage sebagai penyimpanan pokok untuk file Anda.

Diagram berikut memberikan ringkasan proses migrasi tabel dari cluster Hadoop.

Ringkasan migrasi tabel dari data lake Hive ke BigQuery.

Batasan

Transfer data lake HDFS tunduk pada batasan berikut:

  • Untuk memigrasikan tabel Iceberg, Anda harus mendaftarkan tabel dengan metastore BigLake untuk mengizinkan akses tulis bagi mesin open source (seperti Spark atau Flink), dan untuk mengizinkan akses baca bagi BigQuery.
  • Untuk memigrasikan tabel Hive, Anda harus mendaftarkan tabel dengan Dataproc Metastore untuk mengizinkan akses tulis bagi mesin open source, dan mengizinkan akses baca bagi BigQuery.
  • Anda harus menggunakan alat command line bq untuk memigrasikan tabel data lake HDFS ke BigQuery.

Sebelum memulai

Sebelum menjadwalkan transfer data lake HDFS, Anda harus melakukan langkah-langkah berikut:

Membuat bucket Cloud Storage untuk file yang dimigrasikan

Buat bucket Cloud Storage yang akan menjadi tujuan untuk file data lake yang dimigrasikan. Bucket ini disebut sebagai MIGRATION_BUCKET dalam dokumen ini.

Membuat file metadata untuk Apache Hive

Jalankan alat dwh-migration-dumper untuk mengekstraksi metadata untuk Apache Hive. Alat ini menghasilkan file bernama hive-dumper-output.zip ke bucket Cloud Storage, yang disebut dalam dokumen ini sebagai DUMPER_BUCKET.

Mengaktifkan API

Aktifkan API berikut di Google Cloud project Anda:

  • Data Transfer API
  • Storage Transfer API

Agen layanan dibuat saat Anda mengaktifkan Data Transfer API.

Konfigurasikan izin

  1. Buat akun layanan dan berikan peran BigQuery Admin (roles/bigquery.admin) kepadanya. Akun layanan ini digunakan untuk membuat konfigurasi transfer.
  2. Agen layanan (P4SA) dibuat saat mengaktifkan Data Transfer API. Berikan peran berikut:
    • roles/metastore.metadataOwner
    • roles/storagetransfer.admin
    • roles/serviceusage.serviceUsageConsumer
    • roles/storage.objectViewer
      • Jika Anda memigrasikan metadata untuk tabel BigLake Iceberg, berikan peran roles/storage.objectAdmin dan roles/bigquery.admin, bukan roles/storage.objectViewer.
  3. Berikan peran roles/iam.serviceAccountTokenCreator kepada agen layanan dengan perintah berikut:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com --role roles/iam.serviceAccountTokenCreator

Mengonfigurasi Agen Transfer Penyimpanan

Untuk menyiapkan agen transfer penyimpanan yang diperlukan untuk transfer data lake HDFS, lakukan hal berikut:

  1. Konfigurasi izin untuk menjalankan agen transfer penyimpanan di cluster Hadoop Anda.
  2. Instal Docker di mesin agen lokal.
  3. Buat pool agen Storage Transfer Service di project Google Cloud Anda.
  4. Instal agen di komputer agen lokal Anda.

Menjadwalkan transfer data lake HDFS

Untuk menjadwalkan transfer data lake HDFS, masukkan perintah bq mk dan berikan flag pembuatan transfer --transfer_config:

  bq mk --transfer_config
  --data_source=hadoop
  --display_name='TRANSFER_NAME'
  --service_account_name='SERVICE_ACCOUNT'
  --project_id='PROJECT_ID'
  --location='REGION'
  --params='{"table_name_patterns":"LIST_OF_TABLES",
    "agent_pool_name":"AGENT_POOL_NAME",
    "table_metadata_path":"gs://DUMPER_BUCKET/hive-dumper-output.zip",
    "target_gcs_file_path":"gs://MIGRATION_BUCKET",
    "destination_dataproc_metastore":"DATAPROC_METASTORE",
    "destination_bigquery_dataset":"BIGLAKE_METASTORE",
    "translation_output_gcs_path":"gs://TRANSLATION_OUTPUT_BUCKET/metadata/config/default_database/"
    }'

Ganti kode berikut:

  • TRANSFER_NAME: nama tampilan untuk konfigurasi transfer. Nama transfer dapat berupa nilai apa pun yang memungkinkan Anda mengidentifikasi transfer jika perlu mengubahnya nanti.
  • SERVICE_ACCOUNT: nama akun layanan yang digunakan untuk mengautentikasi transfer Anda. Akun layanan harus dimiliki oleh project_id yang sama yang digunakan untuk membuat transfer dan harus memiliki semua izin yang diperlukan.
  • PROJECT_ID: Google Cloud Project ID Anda. Jika --project_id tidak diberikan untuk menentukan project tertentu, project default akan digunakan.
  • REGION: lokasi konfigurasi transfer ini.
  • LIST_OF_TABLES: daftar entity yang akan ditransfer. Gunakan spesifikasi penamaan hierarkis - database.table. Kolom ini mendukung ekspresi reguler RE2 untuk menentukan tabel. Contoh:
    • db1..*: menentukan semua tabel dalam database
    • db1.table1;db2.table2: daftar tabel
  • AGENT_POOL_NAME: nama kumpulan agen yang digunakan untuk membuat agen.
  • DUMPER_BUCKET: bucket Cloud Storage yang berisi file hive-dumper-output.zip.
  • MIGRATION_BUCKET: Jalur GCS tujuan tempat semua file pokok akan dimuat.

  • Metadata dapat dimigrasikan ke Dataproc Metastore atau metastore BigLake dengan data pokok yang disimpan di Cloud Storage. Anda dapat menentukan tujuan menggunakan salah satu parameter berikut:

    • Untuk mentransfer metadata ke Dataproc Metastore, gunakan parameter destination_dataproc_metastore dan tentukan URL ke metastore Anda di DATAPROC_METASTORE.
    • Untuk mentransfer metadata ke metastore BigLake, gunakan parameter destination_bigquery_dataset dan tentukan set data BigQuery di BIGLAKE_METASTORE.
  • TRANSLATION_OUTPUT_BUCKET: (Opsional) Tentukan bucket Cloud Storage untuk output terjemahan. Untuk mengetahui informasi selengkapnya, lihat Menggunakan output Terjemahan.

Jalankan perintah ini untuk membuat konfigurasi transfer dan memulai transfer data lake HDFS. Transfer dijadwalkan untuk berjalan setiap 24 jam secara default, tetapi dapat dikonfigurasi dengan opsi penjadwalan transfer.

Setelah transfer selesai, tabel Anda di cluster Hadoop akan dimigrasikan ke MIGRATION_BUCKET.

Opsi penyerapan data

Bagian berikut memberikan informasi selengkapnya tentang cara mengonfigurasi transfer data lake HDFS Anda.

Transfer inkremental

Jika konfigurasi transfer disiapkan dengan jadwal berulang, setiap transfer berikutnya akan memperbarui tabel di Google Cloud dengan pembaruan terbaru yang dilakukan pada tabel sumber. Misalnya, semua operasi penyisipan, penghapusan, atau pembaruan dengan perubahan skema tercermin dalam Google Cloud dengan setiap transfer.

Opsi penjadwalan transfer

Secara default, transfer dijadwalkan untuk berjalan setiap 24 jam. Untuk mengonfigurasi seberapa sering transfer dijalankan, tambahkan flag --schedule ke konfigurasi transfer, dan tentukan jadwal transfer menggunakan sintaksis schedule. Transfer data lake HDFS harus memiliki waktu minimum 24 jam di antara proses transfer.

Untuk transfer satu kali, Anda dapat menambahkan flag end_time ke konfigurasi transfer agar hanya menjalankan transfer satu kali.

Mengonfigurasi output Terjemahan

Anda dapat mengonfigurasi jalur dan database Cloud Storage yang unik untuk setiap tabel yang dimigrasikan. Untuk melakukannya, lakukan langkah-langkah berikut untuk membuat file YAML pemetaan tabel yang dapat Anda gunakan dalam konfigurasi transfer.

  1. Buat file YAML konfigurasi (dengan akhiran config.yaml) di DUMPER_BUCKET yang berisi hal berikut:

        type: object_rewriter
        relation:
        - match:
            relationRegex: ".*"
          external:
            location_expression: "'gs://MIGRATION_BUCKET/' + table.schema + '/' + table.name"
    • Ganti MIGRATION_BUCKET dengan nama bucket Cloud Storage yang menjadi tujuan file tabel yang dimigrasikan. Kolom location_expression adalah ekspresi common expression language (CEL).
  2. Buat file YAML konfigurasi lain (dengan akhiran config.yaml) di DUMPER_BUCKET yang berisi hal berikut:

        type: experimental_object_rewriter
        relation:
          - match:
              schema: SOURCE_DATABASE
            outputName:
              database: null
              schema: TARGET_DATABASE
    • Ganti SOURCE_DATABASE dan TARGET_DATABASE dengan nama database sumber dan database Dataproc Metastore atau set data BigQuery, bergantung pada metastore yang dipilih. Pastikan set data BigQuery ada jika Anda mengonfigurasi database untuk metastore BigLake.

    Untuk mengetahui informasi selengkapnya tentang YAML konfigurasi ini, lihat Panduan untuk membuat file YAML konfigurasi.

  3. Buat file YAML pemetaan tabel menggunakan perintah berikut:

    curl -d '{
      "tasks": {
          "string": {
            "type": "HiveQL2BigQuery_Translation",
            "translation_details": {
                "target_base_uri": "TRANSLATION_OUTPUT_BUCKET",
                "source_target_mapping": {
                  "source_spec": {
                      "base_uri": "DUMPER_BUCKET"
                  }
                },
                "target_types": ["metadata"]
            }
          }
      }
      }' \
      -H "Content-Type:application/json" \
      -H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2alpha/projects/PROJECT_ID/locations/LOCATION/workflows

    Ganti kode berikut:

    • TRANSLATION_OUTPUT_BUCKET: (Opsional) Tentukan bucket Cloud Storage untuk output terjemahan. Untuk mengetahui informasi selengkapnya, lihat Menggunakan output Terjemahan.
    • DUMPER_BUCKET: URI dasar untuk bucket Cloud Storage yang berisi file YAML konfigurasi dan hive-dumper-output.zip.
    • TOKEN: token OAuth. Anda dapat membuatnya di command line dengan perintah gcloud auth print-access-token.
    • PROJECT_ID: project untuk memproses terjemahan.
    • LOCATION: lokasi tempat tugas diproses. Misalnya eu atau us.
  4. Pantau status tugas ini. Setelah selesai, file pemetaan akan dibuat untuk setiap tabel dalam database di jalur yang telah ditentukan sebelumnya di TRANSLATION_OUTPUT_BUCKET.

Memantau transfer data lake HDFS

Setelah menjadwalkan transfer data lake HDFS, Anda dapat memantau tugas transfer dengan perintah alat command line bq. Untuk mengetahui informasi tentang pemantauan tugas transfer, lihat Melihat transfer Anda.

Melacak status migrasi tabel

Anda juga dapat menjalankan alat dwh-dts-status untuk memantau status semua tabel yang ditransfer dalam konfigurasi transfer atau database tertentu. Anda juga dapat menggunakan alat dwh-dts-status untuk mencantumkan semua konfigurasi transfer dalam sebuah project.

Sebelum memulai

Sebelum Anda dapat menggunakan alat dwh-dts-status, lakukan hal berikut:

  1. Dapatkan alat dwh-dts-status dengan mendownload paket dwh-migration-tool dari repositori GitHub dwh-migration-tools.

  2. Lakukan autentikasi akun Anda ke Google Cloud dengan perintah berikut:

    gcloud auth application-default login
    

    Untuk mengetahui informasi selengkapnya, lihat Cara kerja Kredensial Default Aplikasi.

  3. Verifikasi bahwa pengguna memiliki peran bigquery.admin dan logging.viewer. Untuk mengetahui informasi selengkapnya tentang peran IAM, lihat Referensi kontrol akses.

Mencantumkan semua konfigurasi transfer dalam project

Untuk mencantumkan semua konfigurasi transfer dalam sebuah project, gunakan perintah berikut:

  ./dwh-dts-status --list-transfer-configs --project-id=[PROJECT_ID] --location=[LOCATION]

Ganti kode berikut:

  • PROJECT_ID : Google Cloud project ID yang menjalankan transfer.
  • LOCATION : lokasi tempat konfigurasi transfer dibuat.

Perintah ini menampilkan tabel dengan daftar nama dan ID konfigurasi transfer.

Melihat status semua tabel dalam konfigurasi

Untuk melihat status semua tabel yang disertakan dalam konfigurasi transfer, gunakan perintah berikut:

  ./dwh-dts-status --list-status-for-config --project-id=[PROJECT_ID] --config-id=[CONFIG_ID] --location=[LOCATION]

Ganti kode berikut:

  • PROJECT_ID: ID Google Cloud project yang menjalankan transfer.
  • LOCATION: lokasi tempat konfigurasi transfer dibuat.
  • CONFIG_ID: ID konfigurasi transfer yang ditentukan.

Perintah ini menampilkan tabel dengan daftar tabel, dan status transfernya, dalam konfigurasi transfer yang ditentukan. Status transfer dapat berupa salah satu nilai berikut: PENDING, RUNNING, SUCCEEDED, FAILED, CANCELLED.

Melihat status semua tabel dalam database

Untuk melihat status semua tabel yang ditransfer dari database tertentu, gunakan perintah berikut:

  ./dwh-dts-status --list-status-for-database --project-id=[PROJECT_ID] --database=[DATABASE]

Ganti kode berikut:

  • PROJECT_ID: ID Google Cloud project yang menjalankan transfer.
  • DATABASE:nama database yang ditentukan.

Perintah ini menampilkan tabel dengan daftar tabel, dan status transfernya, dalam database yang ditentukan. Status transfer dapat berupa salah satu nilai berikut: PENDING, RUNNING, SUCCEEDED, FAILED, CANCELLED.