Akun layanan Google Cloud Serverless for Apache Spark

Serverless untuk beban kerja batch Apache Spark dan sesi interaktif berjalan dengan kredensial pengguna akhir atau akun layanan. Saat kredensial akun layanan digunakan, akun layanan yang digunakan untuk menjalankan workload batch atau sesi interaktif bergantung pada versi runtime batch atau sesi.

Akun layanan runtime pra-3.0

Versi runtime Spark sebelum 3.0 dengan kredensial akun layanan menggunakan akun layanan default Compute Engine atau akun layanan kustom yang ditentukan pengguna untuk mengirimkan beban kerja batch atau membuat sesi interaktif.

Akun layanan runtime 3.0+

Versi runtime Spark 3.0 dan yang lebih baru dengan kredensial akun layanan menggunakan akun layanan kustom yang ditentukan pengguna untuk mengirimkan workload batch atau membuat sesi interaktif.

Runtime Serverless untuk Apache Spark 3.0 dan yang lebih baru membuat akun layanan Dataproc Resource Manager Node Service Agent, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, dengan peran Dataproc Resource Manager Node Service Agent di project pengguna Dataproc Google Cloud . Akun layanan ini melakukan operasi sistem berikut pada resource Serverless for Apache Spark yang berada di project tempat workload dibuat:

  • Cloud Logging dan Cloud Monitoring
  • Operasi dasar Node Dataproc Resource Manager seperti get, heartbeat, dan mintOAuthToken

Melihat dan mengelola peran akun layanan IAM

Untuk melihat dan mengelola peran yang diberikan ke akun layanan batch workload atau sesi, lakukan hal berikut:

  1. Di konsol Google Cloud , buka halaman IAM.

    Buka IAM'

  2. Klik Sertakan pemberian peran yang disediakan Google.

  3. Lihat peran yang tercantum untuk workload batch atau akun layanan default atau kustom sesi default atau kustom.

    Gambar berikut menunjukkan peran Dataproc Worker yang diperlukan yang tercantum untuk akun layanan default Compute Engine, project_number-compute@developer.gserviceaccount.com, yang digunakan Serverless untuk Apache Spark secara default sebagai akun layanan beban kerja atau sesi.

    Peran Dataproc Worker untuk akun layanan default Compute Engine di konsol IAM
    Peran Dataproc Worker yang ditetapkan ke akun layanan default Compute Engine di bagian IAM pada konsol Google Cloud .
  4. Anda dapat mengklik ikon pensil yang ditampilkan di baris akun layanan untuk memberikan atau menghapus peran akun layanan.

Cara menggunakan akun layanan lintas project

Anda dapat mengirimkan beban kerja batch yang menggunakan akun layanan dari project yang berbeda dengan project beban kerja batch (project tempat batch dikirimkan). Di bagian ini, project tempat akun layanan berada disebut service account project, dan project tempat batch dikirimkan disebut batch project.

Mengapa menggunakan akun layanan lintas project untuk menjalankan beban kerja batch? Salah satu kemungkinan alasannya adalah jika akun layanan di project lain telah diberi peran IAM yang memberikan akses terperinci ke resource dalam project tersebut.

Langkah penyiapan

Contoh di bagian ini berlaku untuk mengirimkan beban kerja batch yang dieksekusi dengan versi runtime sebelum 3.0.

  1. Di project akun layanan:

    1. Mengaktifkan akun layanan untuk dilampirkan di seluruh project.

    2. Enable the Dataproc API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

    3. Berikan peran Service Account User kepada akun email Anda (pengguna yang membuat cluster) di project akun layanan atau, untuk kontrol yang lebih terperinci, akun layanan di project akun layanan.

      Untuk mengetahui informasi selengkapnya, lihat Mengelola akses ke project, folder, dan organisasi untuk memberikan peran di tingkat project dan Mengelola akses ke akun layanan untuk memberikan peran di tingkat akun layanan.

      Contoh gcloud CLI:

      Contoh perintah berikut memberikan peran Service Account User kepada pengguna di tingkat project:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      Catatan:

      • USER_EMAIL: Berikan alamat email akun pengguna Anda, dalam format: user:user-name@example.com.

      Contoh perintah berikut memberikan peran Service Account User kepada pengguna di tingkat akun layanan:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      Catatan:

      • USER_EMAIL: Berikan alamat email akun pengguna Anda, dalam format: user:user-name@example.com.
    4. Beri akun layanan peran Dataproc Worker di project batch.

      Contoh gcloud CLI:

      gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \
          --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --role="roles/dataproc.worker"
      
  2. Dalam project batch:

    1. Berikan peran Service Account User dan Service Account Token Creator kepada akun layanan agen layanan Dataproc di project akun layanan atau, untuk kontrol yang lebih terperinci, akun layanan di project akun layanan. Dengan melakukannya, Anda mengizinkan akun layanan agen layanan Dataproc di project batch untuk membuat token bagi akun layanan di project akun layanan.

      Untuk mengetahui informasi selengkapnya, lihat Mengelola akses ke project, folder, dan organisasi untuk memberikan peran di tingkat project dan Mengelola akses ke akun layanan untuk memberikan peran di tingkat akun layanan.

      Contoh gcloud CLI:

      Perintah berikut memberikan peran Service Account User dan Service Account Token Creator kepada akun layanan agen layanan Dataproc di project batch pada tingkat project:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      Contoh perintah berikut memberikan peran Service Account User dan Service Account Token Creator kepada akun layanan Dataproc Service Agent di project batch pada tingkat akun layanan:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      
    2. Berikan peran akun layanan Agen Layanan Compute Engine di project batch Service Account Token Creator pada project akun layanan atau, untuk kontrol yang lebih terperinci, akun layanan di project akun layanan. Dengan melakukannya, Anda memberikan kemampuan kepada akun layanan Compute Agent Service Agent di project batch untuk membuat token bagi akun layanan di project akun layanan.

      Untuk mengetahui informasi selengkapnya, lihat Mengelola akses ke project, folder, dan organisasi untuk memberikan peran di tingkat project dan Mengelola akses ke akun layanan untuk memberikan peran di tingkat akun layanan.

      Contoh gcloud CLI:

      Contoh perintah berikut memberikan peran Service Account Token Creator di tingkat project kepada akun layanan Agen Layanan Compute Engine di project batch:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      Contoh perintah berikut memberikan peran Service Account Token Creator kepada akun layanan Compute Engine Service Agent di project cluster pada tingkat akun layanan:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

Kirimkan workload batch

Setelah menyelesaikan langkah-langkah penyiapan, Anda dapat mengirimkan workload batch. Pastikan untuk menentukan akun layanan di project akun layanan sebagai akun layanan yang akan digunakan untuk beban kerja batch.

Memecahkan masalah kegagalan berbasis izin

Izin yang salah atau tidak memadai untuk akun layanan yang digunakan oleh beban kerja atau sesi batch dapat menyebabkan kegagalan pembuatan batch atau sesi yang melaporkan pesan error "Driver compute node failed to initialize for batch in 600 seconds". Error ini menunjukkan bahwa driver Spark tidak dapat dimulai dalam periode waktu tunggu yang dialokasikan, sering kali karena kurangnya akses yang diperlukan ke resource Google Cloud .

Untuk memecahkan masalah ini, pastikan akun layanan Anda memiliki peran atau izin minimum berikut:

  • Peran Dataproc Worker (roles/dataproc.worker): Peran ini memberikan izin yang diperlukan agar Serverless for Apache Spark dapat mengelola dan menjalankan workload serta sesi Spark.
  • Storage Object Viewer (roles/storage.objectViewer), Storage Object Creator (roles/storage.objectCreator), atau Storage Object Admin (roles/storage.admin): Jika aplikasi Spark Anda membaca dari atau menulis ke bucket Cloud Storage, akun layanan memerlukan izin yang sesuai untuk mengakses bucket. Misalnya, jika data input Anda berada di bucket Cloud Storage, Storage Object Viewer diperlukan. Jika aplikasi Anda menulis output ke bucket Cloud Storage, Storage Object Creator atau Storage Object Admin diperlukan.
  • BigQuery Data Editor (roles/bigquery.dataEditor) atau BigQuery Data Viewer (roles/bigquery.dataViewer): Jika aplikasi Spark berinteraksi dengan BigQuery, pastikan akun layanan memiliki peran BigQuery yang sesuai.
  • Izin Cloud Logging: Akun layanan memerlukan izin untuk menulis log ke Cloud Logging agar proses debug efektif. Biasanya, peran Logging Writer (roles/logging.logWriter) sudah cukup.
  • Peran dataproc.worker tidak ada: Tanpa peran inti ini, infrastruktur Serverless untuk Apache Spark tidak dapat menyediakan dan mengelola node driver dengan benar.

  • Izin Cloud Storage tidak memadai: Jika aplikasi Spark Anda mencoba membaca data input dari atau menulis output ke bucket Cloud Storage tanpa izin akun layanan yang diperlukan, driver dapat gagal diinisialisasi karena tidak memiliki akses ke resource penting.

  • Masalah jaringan atau firewall: Kontrol Layanan VPC atau aturan firewall dapat secara tidak sengaja memblokir akses akun layanan ke API atau resource. Google Cloud

Untuk memverifikasi dan memperbarui izin akun layanan:

  1. Buka halaman IAM & Admin > IAM di konsol Google Cloud .
  2. Temukan akun layanan yang digunakan untuk workload atau sesi batch Anda.
  3. Pastikan peran yang diperlukan telah ditetapkan. Jika belum, tambahkan.

Untuk mengetahui daftar peran dan izin Serverless for Apache Spark, lihat Izin dan peran IAM untuk Serverless for Apache Spark.