Pemulihan dari bencana (disaster recovery) untuk Metastore Dataproc

Dataproc Metastore

Tutorial ini mengusulkan strategi pemulihan dari bencana dan kelangsungan bisnis dual-region menggunakan Metastore Dataproc. Tutorial ini menggunakan bucket dua region untuk menyimpan set data Hive dan ekspor metadata Hive.

Dataproc Metastore adalah layanan metastore native OSS yang terkelola sepenuhnya, sangat tersedia, diskalakan otomatis, dan melakukan auto-healing yang sangat menyederhanakan pengelolaan metadata teknis. Layanan terkelola kami didasarkan pada Apache Hive Metastore dan berfungsi sebagai komponen kritis untuk data lake perusahaan.

Tutorial ini dirancang untuk Google Cloud pelanggan yang memerlukan ketersediaan tinggi untuk data dan metadata Hive mereka. Layanan ini menggunakan Cloud Storage untuk penyimpanan, Dataproc untuk komputasi, dan Dataproc Metastore (DPMS), layanan Hive Metastore yang dikelola sepenuhnya di Google Cloud. Tutorial ini juga menampilkan dua cara berbeda untuk mengatur failover: satu menggunakan Cloud Run dan Cloud Scheduler, sedangkan yang lainnya menggunakan Cloud Composer.

Pendekatan dual-region yang digunakan dalam tutorial ini memiliki kelebihan dan kekurangan:

Kelebihan

  • Bucket dual-region bersifat geo-redundan.
  • Bucket dual-region memiliki SLA ketersediaan 99,95%, dibandingkan dengan ketersediaan bucket single-region sebesar 99,9%.
  • Bucket dual-region memiliki performa yang dioptimalkan di dua region, sedangkan bucket satu region tidak berperforma sebaik saat menggunakan resource di region lain.

Kekurangan

  • Operasi tulis bucket region ganda tidak langsung direplikasi ke kedua region.
  • Bucket dual-region memiliki biaya penyimpanan yang lebih tinggi daripada bucket region tunggal.

Arsitektur referensi

Diagram arsitektur berikut menunjukkan komponen yang Anda gunakan dalam tutorial ini. Dalam kedua diagram, X merah besar menunjukkan kegagalan wilayah utama:

Menggunakan Cloud Run dan Cloud Scheduler untuk melakukan failover dari region utama ke region sekunder. Gambar 1: Menggunakan Cloud Run dan Cloud Scheduler

Menggunakan Cloud Composer untuk melakukan failover dari region utama ke region sekunder. Gambar 2: Menggunakan Cloud Composer

Komponen solusi dan hubungannya adalah:

  • Dua bucket dual-region Cloud Storage: Anda membuat satu bucket untuk data Hive, dan satu bucket untuk pencadangan berkala metadata Hive. Buat kedua bucket dual-region sehingga menggunakan region yang sama dengan cluster Hadoop yang mengakses data.
  • Metastore Hive yang menggunakan DPMS: Anda membuat metastore Hive ini di region utama (region A). Konfigurasi metastore mengarah ke bucket data Hive Anda. Cluster Hadoop yang menggunakan Dataproc harus berada di region yang sama dengan instance DPMS tempat cluster tersebut dilampirkan.
  • Instance DPMS kedua: Anda membuat instance DPMS kedua di region standby (region B) untuk bersiap menghadapi kegagalan di seluruh region. Kemudian, Anda akan mengimpor file ekspor hive.sql terbaru dari bucket ekspor ke DPMS standby. Anda juga membuat cluster Dataproc di region standby dan melampirkan cluster tersebut ke instance DPMS standby. Terakhir, dalam skenario disaster recovery, Anda mengalihkan aplikasi klien dari cluster Dataproc di region A ke cluster Dataproc di region B.
  • Deployment Cloud Run: Anda membuat deployment Cloud Run di region A yang secara berkala mengekspor metadata DPMS ke bucket cadangan metadata menggunakan Cloud Scheduler (seperti yang ditunjukkan pada Gambar 1). Ekspor berbentuk file SQL yang berisi dump lengkap metadata DPMS.

Jika sudah memiliki lingkungan Cloud Composer, Anda dapat mengatur ekspor dan impor metadata DPMS dengan menjalankan DAG Airflow di lingkungan tersebut (seperti yang ditunjukkan pada Gambar 2). Penggunaan DAG Airflow ini akan menggantikan metode Cloud Run yang disebutkan sebelumnya.

Tujuan

  • Menyiapkan penyimpanan dua region untuk data Hive dan cadangan Hive Metastore.
  • Deploy Metastore Dataproc dan cluster Dataproc di region A dan B.
  • Gagal deploy ke region B.
  • Gagal deployment kembali ke region A.
  • Membuat pencadangan metastore Hive otomatis.
  • Mengatur ekspor dan impor metadata melalui Cloud Run.
  • Mengatur ekspor dan impor metadata melalui Cloud Composer.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc, and Dataproc Metastore APIs.

    Enable the APIs

  5. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

      In the Service account description field, enter a description. For example, Service account for quickstart.

    4. Click Create and continue.
    5. Grant the Project > Owner role to the service account.

      To grant the role, find the Select a role list, then select Project > Owner.

    6. Click Continue.
    7. Click Done to finish creating the service account.

      Do not close your browser window. You will use it in the next step.

  6. Create a service account key:

    1. In the Google Cloud console, click the email address for the service account that you created.
    2. Click Keys.
    3. Click Add key, and then click Create new key.
    4. Click Create. A JSON key file is downloaded to your computer.
    5. Click Close.
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Dataproc, and Dataproc Metastore APIs.

    Enable the APIs

  10. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

      In the Service account description field, enter a description. For example, Service account for quickstart.

    4. Click Create and continue.
    5. Grant the Project > Owner role to the service account.

      To grant the role, find the Select a role list, then select Project > Owner.

    6. Click Continue.
    7. Click Done to finish creating the service account.

      Do not close your browser window. You will use it in the next step.

  11. Create a service account key:

    1. In the Google Cloud console, click the email address for the service account that you created.
    2. Click Keys.
    3. Click Add key, and then click Create new key.
    4. Click Create. A JSON key file is downloaded to your computer.
    5. Click Close.

Menginisialisasi lingkungan

  1. Di Cloud Shell, mulai instance Cloud Shell.
  2. Buat clone repositori GitHub tutorial:

    git clone https://github.com/GoogleCloudPlatform/metastore-disaster-recovery.git
    
  3. Aktifkan Google Cloud API berikut:

    gcloud services enable dataproc.googleapis.com metastore.googleapis.com
    
  4. Tetapkan beberapa variabel lingkungan:

    export PROJECT=$(gcloud info --format='value(config.project)')
    export WAREHOUSE_BUCKET=${PROJECT}-warehouse
    export BACKUP_BUCKET=${PROJECT}-dpms-backups
    export DPMS_PRIMARY_REGION=us-central1
    export DPMS_STANDBY_REGION=us-east1
    export DPMS_PRIMARY_INSTANCE=dpms1
    export DPMS_STANDBY_INSTANCE=dpms2
    export HADOOP_PRIMARY=dataproc-cluster1
    export HADOOP_STANDBY=dataproc-cluster2
    

Membuat penyimpanan untuk data Hive dan pencadangan Hive Metastore

Di bagian ini, Anda akan membuat bucket Cloud Storage untuk menghosting data Hive dan cadangan Metastore Hive.

Membuat penyimpanan data Hive

  1. Di Cloud Shell, buat bucket dua wilayah untuk menghosting data Hive:

    gcloud storage buckets create gs://${WAREHOUSE_BUCKET} --location=NAM4
    
  2. Salin beberapa contoh data ke bucket data Hive:

    gcloud storage cp gs://retail_csv gs://${WAREHOUSE_BUCKET}/retail --recursive
    

Membuat penyimpanan untuk pencadangan metadata

  • Di Cloud Shell, buat bucket dua region untuk menghosting pencadangan metadata DPMS:

    gcloud storage buckets create gs://${BACKUP_BUCKET} --location=NAM4
    

Men-deploy resource komputasi di region utama

Di bagian ini, Anda akan men-deploy semua resource komputasi di region utama, termasuk instance DPMS dan cluster Dataproc. Anda juga akan mengisi Dataproc Metastore dengan metadata contoh.

Membuat instance DPMS

  1. Di Cloud Shell, buat instance DPMS:

    gcloud metastore services create ${DPMS_PRIMARY_INSTANCE} \
        --location=${DPMS_PRIMARY_REGION} \
        --hive-metastore-version=3.1.2
    

    Pemrosesan perintah ini dapat memerlukan waktu beberapa menit.

  2. Tetapkan bucket data Hive sebagai direktori warehouse default:

    gcloud metastore services update ${DPMS_PRIMARY_INSTANCE} \
        --location=${DPMS_PRIMARY_REGION} \
        --update-hive-metastore-configs="hive.metastore.warehouse.dir=gs://${PROJECT}-  warehouse"
    

    Pemrosesan perintah ini dapat memerlukan waktu beberapa menit.

Membuat cluster Dataproc

  • Di Cloud Shell, buat cluster Dataproc dan lampirkan ke instance DPMS:

    gcloud dataproc clusters create ${HADOOP_PRIMARY} \
        --dataproc-metastore=projects/${PROJECT}/locations/${DPMS_PRIMARY_REGION}/services/${DPMS_PRIMARY_INSTANCE} \
        --region=${DPMS_PRIMARY_REGION} \
        --image-version=2.0
    

    Tentukan image cluster sebagai versi 2.0, yang merupakan versi terbaru yang tersedia mulai Juni 2021. Ini juga merupakan versi pertama yang mendukung DPMS.

Mengisi metastore

  1. Di Cloud Shell, perbarui retail.hql sampel yang diberikan di repositori tutorial ini dengan nama bucket data Hive:

    sed -i -- 's/${WAREHOUSE_BUCKET}/'"$WAREHOUSE_BUCKET"'/g' retail.hql
    
  2. Jalankan kueri yang terdapat dalam file retail.hql untuk membuat definisi tabel di metastore:

    gcloud dataproc jobs submit hive \
        --cluster=${HADOOP_PRIMARY} \
        --region=${DPMS_PRIMARY_REGION} \
        --file=retail.hql
    
  3. Pastikan definisi tabel dibuat dengan benar:

    gcloud dataproc jobs submit hive \
        --cluster=${HADOOP_PRIMARY} \
        --region=${DPMS_PRIMARY_REGION} \
        --execute="
        desc departments;
        desc categories;
        desc products;
        desc order_items;
        desc orders;
        desc customers;
    
        select count(*) as num_departments from departments;
        select count(*) as num_categories from categories;
        select count(*) as num_products from products;
        select count(*) as num_order_items from order_items;
        select count(*) as num_orders from orders;
        select count(*) as num_customers from customers;
      "
    

    Outputnya akan terlihat seperti berikut:

    +------------------+------------+----------+
    |     col_name     | data_type  | comment  |
    +------------------+------------+----------+
    | department_id    | int        |          |
    | department_name  | string     |          |
    +------------------+------------+----------+
    

    Output juga berisi jumlah elemen di setiap tabel—misalnya:

    +----------------+
    | num_customers  |
    +----------------+
    | 12435          |
    +----------------+
    

Melakukan failover ke region standby

Bagian ini menyediakan langkah-langkah untuk melakukan failover dari region utama (region A) ke region standby (region B).

  1. Di Cloud Shell, ekspor metadata instance DPMS utama ke bucket cadangan:

    gcloud metastore services export gcs ${DPMS_PRIMARY_INSTANCE}  \
        --location=${DPMS_PRIMARY_REGION} \
        --destination-folder=gs://${BACKUP_BUCKET}
    

    Outputnya akan terlihat seperti berikut:

    metadataManagementActivity:
    metadataExports:
    ‐ databaseDumpType: MYSQL
        destinationGcsUri: gs://qa01-300915-dpms-backups/hive-export-2021-05-04T22:21:53.288Z
        endTime: '2021-05-04T22:23:35.982214Z'
        startTime: '2021-05-04T22:21:53.308534Z'
        state: SUCCEEDED
    

    Perhatikan nilai dalam atribut destinationGcsUri. Atribut ini menyimpan cadangan yang Anda buat.

  2. Buat instance DPMS baru di region standby:

    gcloud metastore services create ${DPMS_STANDBY_INSTANCE} \
        --location=${DPMS_STANDBY_REGION} \
        --hive-metastore-version=3.1.2
    
  3. Tetapkan bucket data Hive sebagai direktori warehouse default:

    gcloud metastore services update ${DPMS_STANDBY_INSTANCE} \
        --location=${DPMS_STANDBY_REGION} \
        --update-hive-metastore-configs="hive.metastore.warehouse.dir=gs://${PROJECT}-warehouse"
    
  4. Ambil jalur cadangan metadata terbaru:

    IMPORT_DIR=`gcloud storage ls gs://${BACKUP_BUCKET} | sort -k 1 | tail -1`
    IMPORT_SQL="${IMPORT_DIR}hive.sql"
    echo ${IMPORT_SQL}
    
  5. Impor metadata yang dicadangkan ke instance Metastore Dataproc baru:

    gcloud metastore services import gcs ${DPMS_STANDBY_INSTANCE} \
        --location=${DPMS_STANDBY_REGION} \
        --dump-type=mysql \
        --database-dump=${IMPORT_SQL} \
        --import-id=import-$(date +"%Y-%m-%d-%H-%M-%S")
    
  6. Buat cluster Dataproc di region standby (region B):

    gcloud dataproc clusters create ${HADOOP_STANDBY} \
        --dataproc-metastore=projects/${PROJECT}/locations/${DPMS_STANDBY_REGION}/services/${DPMS_STANDBY_INSTANCE} \
        --region=${DPMS_STANDBY_REGION} \
        --image-version=2.0
    
  7. Pastikan metadata diimpor dengan benar:

    gcloud dataproc jobs submit hive \
        --cluster ${HADOOP_STANDBY} \
        --region ${DPMS_STANDBY_REGION} \
        --execute "select count(*) as num_orders from orders;"
    

    Output num_orders adalah yang paling penting untuk tutorial ini. Tampilannya mirip dengan hal berikut:

    +-------------+
    | num_orders  |
    +-------------+
    | 68883       |
    +-------------+
    

    Metastore Dataproc utama telah menjadi metastore cadangan baru, dan Metastore Dataproc cadangan telah menjadi metastore utama baru.

  8. Perbarui variabel lingkungan berdasarkan peran baru ini:

    export DPMS_PRIMARY_REGION=us-east1
    export DPMS_STANDBY_REGION=us-central1]
    export DPMS_PRIMARY_INSTANCE=dpms2
    export DPMS_STANDBY_INSTANCE=dpms1
    export HADOOP_PRIMARY=dataproc-cluster2
    export HADOOP_STANDBY=dataproc-cluster1
    
  9. Pastikan Anda dapat menulis ke Metastore Dataproc utama baru di region B:

    gcloud dataproc jobs submit hive \
        --cluster ${DPMS_PRIMARY_INSTANCE} \
        --region ${DPMS_PRIMARY_REGION} \
        --execute "create view completed_orders as select * from orders where order_status = 'COMPLETE';"
    
    gcloud dataproc jobs submit hive \
        --cluster ${HADOOP_PRIMARY} \
        --region ${DPMS_PRIMARY_REGION} \
        --execute "select * from completed_orders limit 5;"
    

    Outputnya berisi hal berikut:

    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    | completed_orders.order_id  | completed_orders.order_date  | completed_orders.order_customer_id  | completed_orders.order_status  |
    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    | 3                          | 2013-07-25 00:00:00.0        | 12111                               | COMPLETE                       |
    | 5                          | 2013-07-25 00:00:00.0        | 11318                               | COMPLETE                       |
    | 6                          | 2013-07-25 00:00:00.0        | 7130                                | COMPLETE                       |
    | 7                          | 2013-07-25 00:00:00.0        | 4530                                | COMPLETE                       |
    | 15                         | 2013-07-25 00:00:00.0        | 2568                                | COMPLETE                       |
    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    

Failover kini telah selesai. Sekarang Anda harus mengalihkan aplikasi klien ke cluster Dataproc utama baru di region B dengan memperbarui file konfigurasi klien Hadoop.

Melakukan penggantian ke region asli

Bagian ini menyediakan langkah-langkah untuk melakukan penggantian ke region asli (region A).

  1. Di Cloud Shell, ekspor metadata dari instance DPMS:

    gcloud metastore services export gcs ${DPMS_PRIMARY_INSTANCE} \
        --location=${DPMS_PRIMARY_REGION} \
        --destination-folder=gs://${BACKUP_BUCKET}
    
  2. Ambil jalur cadangan metadata terbaru:

    IMPORT_DIR=`gcloud storage ls gs://${BACKUP_BUCKET} | sort -k 1 | tail -1`
    IMPORT_SQL="${IMPORT_DIR}hive.sql"
    echo ${IMPORT_SQL}
    
  3. Impor metadata ke instance DPMS standby di region asli (region A):

    gcloud metastore services import gcs ${DPMS_STANDBY_INSTANCE} \
        --location=${DPMS_STANDBY_REGION} \
        --dump-type=mysql \
        --database-dump=${IMPORT_SQL} \
        --import-id=import-$(date +"%Y-%m-%d-%H-%M-%S")
    
  4. Pastikan metadata diimpor dengan benar:

    gcloud dataproc jobs submit hive \
        --cluster ${HADOOP_STANDBY} \
        --region ${DPMS_STANDBY_REGION} \
        --execute "select * from completed_orders limit 5;"
    

    Menghasilkan output yang mencakup:

    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    | completed_orders.order_id  | completed_orders.order_date  | completed_orders.order_customer_id  | completed_orders.order_status  |
    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    | 3                          | 2013-07-25 00:00:00.0        | 12111                               | COMPLETE                       |
    | 5                          | 2013-07-25 00:00:00.0        | 11318                               | COMPLETE                       |
    | 6                          | 2013-07-25 00:00:00.0        | 7130                                | COMPLETE                       |
    | 7                          | 2013-07-25 00:00:00.0        | 4530                                | COMPLETE                       |
    | 15                         | 2013-07-25 00:00:00.0        | 2568                                | COMPLETE                       |
    +----------------------------+------------------------------+-------------------------------------+--------------------------------+
    

Dataproc Metastore utama dan Dataproc Metastore standby telah menukar peran lagi.

  1. Perbarui variabel lingkungan ke peran baru ini:

    export DPMS_PRIMARY_REGION=us-central1
    export DPMS_STANDBY_REGION=us-east1
    export DPMS_PRIMARY_INSTANCE=dpms1
    export DPMS_STANDBY_INSTANCE=dpms12
    export HADOOP_PRIMARY=dataproc-cluster1
    export HADOOP_STANDBY=dataproc-cluster2
    

Failback kini telah selesai. Sekarang Anda harus mengalihkan aplikasi klien ke cluster Dataproc utama baru di region A dengan memperbarui file konfigurasi klien Hadoop.

Membuat pencadangan metadata otomatis

Bagian ini menguraikan dua metode berbeda untuk mengotomatiskan ekspor dan impor cadangan metadata Anda. Metode pertama, Opsi 1: Cloud Run dan Cloud Scheduler, menggunakan Cloud Run dan Cloud Scheduler. Metode kedua, Opsi 2: Cloud Composer, menggunakan Cloud Composer. Dalam kedua contoh tersebut, tugas ekspor membuat cadangan metadata dari DPMS utama di region A. Tugas impor mengisi DPMS standby di region B dari pencadangan.

Jika sudah memiliki cluster Cloud Composer, Anda harus mempertimbangkan Opsi 2: Cloud Composer (dengan asumsi bahwa cluster Anda memiliki kapasitas komputasi yang memadai). Jika tidak, pilih Opsi 1: Cloud Run dan Cloud Scheduler. Opsi ini menggunakan model penetapan harga bayar sesuai penggunaan dan lebih ekonomis daripada Cloud Composer, yang memerlukan penggunaan resource komputasi persisten.

Opsi 1: Cloud Run dan Cloud Scheduler

Bagian ini menunjukkan cara menggunakan Cloud Run dan Cloud Scheduler untuk mengotomatiskan ekspor impor metadata DPMS.

Layanan Cloud Run

Bagian ini menunjukkan cara mem-build dua layanan Cloud Run untuk menjalankan tugas ekspor dan impor metadata.

  1. Di Cloud Shell, aktifkan Cloud Run, Cloud Scheduler, Cloud Build, dan App Engine API:

    gcloud services enable run.googleapis.com cloudscheduler.googleapis.com cloudbuild.googleapis.com appengine.googleapis.com
    

    Anda mengaktifkan App Engine API karena layanan Cloud Scheduler memerlukan App Engine.

  2. Build image Docker dengan Dockerfile yang disediakan:

    cd metastore-disaster-recovery
    gcloud builds submit --tag gcr.io/$PROJECT/dpms_dr
    
  3. Deploy image container Anda ke layanan Cloud Run di region utama (region A). Deployment ini bertanggung jawab untuk membuat cadangan metadata dari metastore utama:

    gcloud run deploy dpms-export \
        --image gcr.io/${PROJECT}/dpms_dr \
        --region ${DPMS_PRIMARY_REGION} \
        --platform managed \
        --update-env-vars DPMS_STANDBY_REGION=${DPMS_STANDBY_REGION},BACKUP_BUCKET=${BACKUP_BUCKET},DPMS_STANDBY_INSTANCE=${DPMS_STANDBY_INSTANCE},DPMS_PRIMARY_INSTANCE=${DPMS_PRIMARY_INSTANCE},DPMS_PRIMARY_REGION=${DPMS_PRIMARY_REGION} \
        --allow-unauthenticated \
        --timeout=10m
    

    Secara default, waktu tunggu permintaan layanan Cloud Run habis setelah 5 menit. Untuk membantu memastikan bahwa semua permintaan memiliki cukup waktu untuk berhasil selesai, contoh kode sebelumnya memperluas nilai waktu tunggu hingga setidaknya 10 menit.

  4. Ambil URL deployment untuk layanan Cloud Run:

    EXPORT_RUN_URL=$(gcloud run services describe dpms-export --platform
    managed --region ${DPMS_PRIMARY_REGION} --format `
    "value(status.address.url)")
    echo ${EXPORT_RUN_URL}
    
  5. Buat layanan Cloud Run kedua di region standby (region B). Layanan ini bertanggung jawab untuk mengimpor cadangan metadata dari BACKUP_BUCKET ke metastore standby:

    gcloud run deploy dpms-import \
        --image gcr.io/${PROJECT}/dpms_dr \
        --region ${DPMS_STANDBY_REGION} \
        --platform managed \
        --update-env-vars DPMS_STANDBY_REGION=${DPMS_STANDBY_REGION},BACKUP_BUCKET=${BACKUP_BUCKET},DPMS_STANDBY_INSTANCE=${DPMS_STANDBY_INSTANCE} \
        --allow-unauthenticated \
        --timeout=10m
    
  6. Ambil URL deployment untuk layanan Cloud Run kedua:

      IMPORT_RUN_URL=$(gcloud run services describe dpms-import --platform
      managed --region ${REGION_B} --format "value(status.address.url)")
      echo ${IMPORT_RUN_URL}
    

Penjadwalan tugas

Bagian ini menunjukkan cara menggunakan Cloud Scheduler untuk memicu dua layanan Cloud Run.

  1. Di Cloud Shell, buat aplikasi App Engine, yang diperlukan Cloud Scheduler:

    gcloud app create --region=${REGION_A}
    
  2. Buat tugas Cloud Scheduler untuk menjadwalkan ekspor metadata dari metastore utama:

    gcloud scheduler jobs create http dpms-export \
        --schedule "*/15 * * * *" \
        --http-method=post \
        --uri=${EXPORT_RUN_URL}/export\
    

Tugas Cloud Scheduler membuat permintaan http ke layanan Cloud Run setiap 15 menit. Layanan Cloud Run menjalankan aplikasi Flask dengan fungsi ekspor dan impor dalam penampung. Saat fungsi ekspor dipicu, fungsi tersebut akan mengekspor metadata ke Cloud Storage menggunakan perintah gcloud metastore services export.

Secara umum, jika tugas Hadoop Anda sering menulis ke Metastore Hive, sebaiknya Anda sering mencadangkan metastore. Jadwal pencadangan yang baik akan berada dalam rentang setiap 15 menit hingga 60 menit.

  1. Memicu pengujian layanan Cloud Run:

    gcloud scheduler jobs run dpms-export
    
  2. Pastikan Cloud Scheduler memicu operasi ekspor DPMS dengan benar:

    gcloud metastore operations list --location ${REGION_A}
    

    Outputnya akan terlihat seperti berikut:

    OPERATION_NAME                                           LOCATION     TYPE             TARGET                             DONE  CREATE_TIME          DURATION
     ...
    operation-a520936204508-5v23bx4y23f60-920f0a0f-9c2b56b5  us-central1  update  dpms1                       True  2021-05-13T20:05:04  2M23S
    

    Jika nilai untuk DONE adalah False, ekspor masih berlangsung. Untuk mengonfirmasi bahwa operasi telah selesai, jalankan kembali perintah gcloud metastore operations list --location ${REGION_A} hingga nilainya menjadi True.

    Pelajari perintah gcloud metastore operations lebih lanjut di dokumentasi referensi.

  3. (Opsional) Buat tugas Cloud Scheduler untuk menjadwalkan impor ke metastore standby:

    gcloud scheduler jobs create http dpms-import \
        --schedule "*/15 * * * *" \
        --http-method=post \
        --uri=${IMPORT_RUN_URL}/import
    

Langkah ini bergantung pada persyaratan batas waktu pemulihan (RTO) Anda.

Jika Anda ingin hot standby untuk meminimalkan waktu failover, Anda harus menjadwalkan tugas impor ini. Fitur ini akan memuat ulang DPMS standby Anda setiap 15 menit.

Jika cold standby sudah memadai untuk kebutuhan RTO Anda, Anda dapat melewati langkah ini dan juga menghapus cluster DPMS dan Dataproc standby untuk lebih mengurangi tagihan bulanan secara keseluruhan. Saat melakukan failover ke region standby (region B), sediakan DPMS standby dan cluster Dataproc, serta jalankan tugas impor. Karena file cadangan disimpan di bucket dua regional, file tersebut dapat diakses meskipun region utama Anda (region A) mengalami gangguan.

Menangani Kegagalan

Setelah melakukan failover ke region B, Anda harus menerapkan langkah-langkah berikut untuk mempertahankan persyaratan disaster recovery dan melindungi infrastruktur Anda dari potensi kegagalan di region B:

  • Jeda tugas Cloud Scheduler yang ada.
  • Perbarui wilayah DPMS utama ke wilayah B (us-east1).
  • Perbarui wilayah DPMS standby ke wilayah A (us-central1).
  • Update instance utama DPMS ke dpms2.
  • Update instance standby DPMS ke dpms1.
  • Deploy ulang layanan Cloud Run berdasarkan variabel yang diperbarui.
  • Buat tugas Cloud Scheduler baru yang mengarah ke layanan Cloud Run baru Anda.

Langkah-langkah yang diperlukan dalam daftar sebelumnya mengulangi banyak langkah dari bagian sebelumnya, hanya dengan sedikit penyesuaian (seperti menukar nama region). Gunakan informasi di Opsi 1: Cloud Run dan Cloud Scheduler untuk menyelesaikan tugas yang diperlukan ini.

Opsi 2: Cloud Composer

Bagian ini menunjukkan cara menggunakan Cloud Composer untuk menjalankan tugas ekspor dan impor dalam satu grafik asiklik terarah (DAG) Airflow.

  1. Di Cloud Shell, aktifkan Cloud Composer API:

    gcloud services enable composer.googleapis.com
    
  2. Buat lingkungan Cloud Composer:

    export COMPOSER_ENV=comp-env
    gcloud beta composer environments create ${COMPOSER_ENV} \
        --location ${DPMS_PRIMARY_REGION} \
        --image-version composer-1.17.0-preview.1-airflow-2.0.1 \
        --python-version 3
    
    • Image composer composer-1.17.0-preview.1-airflow-2.0.1 adalah versi terbaru sejak publikasi.
    • Lingkungan Composer hanya dapat menggunakan satu versi Python utama. Python 3 dipilih karena Python 2 memiliki masalah dukungan.
  3. Konfigurasikan lingkungan Cloud Composer Anda dengan variabel lingkungan berikut:

    gcloud composer environments update ${COMPOSER_ENV} \
        --location ${DPMS_PRIMARY_REGION} \
        --update-env-variables=DPMS_PRIMARY_REGION=${DPMS_PRIMARY_REGION},DPMS_STANDBY_REGION=${DPMS_STANDBY_REGION},BACKUP_BUCKET=${BACKUP_BUCKET},DPMS_PRIMARY_INSTANCE=${DPMS_PRIMARY_INSTANCE},DPMS_STANDBY_INSTANCE=${DPMS_STANDBY_INSTANCE}
    
  4. Upload file DAG ke lingkungan Composer Anda:

    gcloud composer environments storage dags import \
        --environment ${COMPOSER_ENV} \
        --location ${DPMS_PRIMARY_REGION} \
        --source dpms_dag.py
    
  5. Ambil URL Airflow:

    gcloud composer environments describe ${COMPOSER_ENV} \
        --location ${DPMS_PRIMARY_REGION} \
        --format "value(config.airflowUri)"
    
  6. Di browser, buka URL yang ditampilkan oleh perintah sebelumnya.

    Anda akan melihat entri DAG baru yang disebut dpms_dag. Dalam satu operasi, DAG akan mengeksekusi ekspor, diikuti dengan impor. DAG mengasumsikan bahwa DPMS standby selalu aktif. Jika tidak memerlukan hot standby dan hanya ingin menjalankan tugas ekspor, Anda harus mengomentari semua tugas terkait impor di kode (find_backup, wait_for_ready_status, current_ts, dpms_import).

  7. Klik ikon Panah untuk memicu DAG melakukan pengujian:

    gambar

  8. Klik Tampilan Grafik DAG yang sedang berjalan untuk memeriksa status setiap tugas:

    gambar

    Setelah Anda memvalidasi DAG, biarkan Airflow menjalankannya sesuai jadwal reguler. Jadwal ditetapkan ke interval 30 menit, tetapi dapat disesuaikan dengan mengubah parameter schedule_interval dalam kode untuk memenuhi persyaratan pengaturan waktu Anda.

Menangani failover

Setelah melakukan failover ke region B, Anda harus menerapkan langkah-langkah berikut untuk mempertahankan persyaratan disaster recovery dan melindungi infrastruktur Anda dari potensi kegagalan di region B:

  • Perbarui wilayah DPMS utama ke wilayah B (us-east1).
  • Perbarui wilayah DPMS standby ke wilayah A (us-central1).
  • Update instance utama DPMS ke dpms2.
  • Update instance standby DPMS ke dpms1.
  • Buat lingkungan Cloud Composer baru di region B (us-east1).
  • Konfigurasikan lingkungan Cloud Composer dengan variabel lingkungan yang diperbarui.
  • Impor DAG Airflow dpms_dag yang sama seperti sebelumnya ke lingkungan Cloud Composer baru Anda.

Langkah-langkah yang diperlukan dalam daftar sebelumnya mengulangi banyak langkah dari bagian sebelumnya, hanya dengan sedikit penyesuaian (seperti menukar nama region). Gunakan informasi di Opsi 2: Cloud Composer untuk menyelesaikan tugas yang diperlukan ini.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Langkah selanjutnya

  • Pelajari cara memantau instance Dataproc Metastore
  • Pahami cara menyinkronkan metastore Hive dengan Data Catalog
  • Pelajari lebih lanjut cara mengembangkan layanan Cloud Run
  • Untuk mengetahui lebih banyak tentang arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.