Menghubungkan ke Apache Spark

Sebagai administrator BigQuery, Anda dapat membuat koneksi agar analis data dapat menjalankan prosedur tersimpan untuk Apache Spark.

Sebelum memulai

Pertimbangan lokasi

Saat Anda memilih lokasi untuk data Anda, pertimbangkan hal berikut:

Multi-region

Anda harus menentukan resource Google Cloud yang terletak di area geografis dengan luas yang sama:

  • Koneksi di multi-region BigQuery AS dapat merujuk ke Spark History Server atau Dataproc Metastore di satu region mana pun di wilayah geografis AS, seperti us-central1, us-east4, atau us-west2.

  • Koneksi di multi-region EU BigQuery dapat mereferensikan Spark History Server atau Dataproc Metastore di negara bagian anggota Uni Eropa, seperti europe-north1 atau europe-west3.

Satu region

Koneksi di satu region hanya dapat mereferensikan resource Google Cloud di region yang sama. Misalnya, koneksi dalam satu region us-east4 hanya dapat mereferensikan Spark History Server atau Dataproc Metastore di us-east4.

Membuat koneksi

Pilih salah satu opsi berikut:

Konsol

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Untuk membuat koneksi, klik tambahkan Tambahkan data, lalu klik Koneksi ke sumber data eksternal.

  3. Dalam daftar Jenis koneksi, pilih Apache Spark.

  4. Di kolom ID Koneksi, masukkan nama koneksi Anda—misalnya, spark_connection.

  5. Di daftar Lokasi data, pilih region.

    Anda dapat membuat koneksi di region dan multi-region yang mendukung BigQuery. Untuk informasi selengkapnya, lihat Pertimbangan lokasi.

  6. Opsional: Dari daftar layanan Metastore, pilih Dataproc Metastore.

  7. Opsional: Di kolom History server cluster, masukkan Dataproc Persistent History Server.

  8. Klik Buat koneksi.

  9. Klik Buka koneksi.

  10. Di panel Info koneksi, salin ID akun layanan untuk digunakan pada langkah berikut.

bq

  1. Dalam lingkungan command line, gunakan perintah bq mk untuk membuat koneksi:

    bq mk --connection --connection_type='SPARK' \
     --properties=PROPERTIES \
     --project_id=PROJECT_ID \
     --location=LOCATION
     CONNECTION_ID
    

    Ganti kode berikut:

    • PROPERTIES: pasangan nilai kunci untuk menyediakan parameter khusus koneksi dalam format JSON

      Contoh:

      --properties='{
      "metastoreServiceConfig": {"metastoreService": "METASTORE_SERVICE_NAME"},
      "sparkHistoryServerConfig": {"dataprocCluster": "DATAPROC_CLUSTER_NAME"}
      }'
      

      Ganti kode berikut:

    • PROJECT_ID: project ID Google Cloud Anda

    • LOCATION: lokasi tempat Anda ingin menyimpan koneksi—misalnya, US

    • CONNECTION_ID: ID koneksi—misalnya, myconnection

      Saat Anda melihat detail koneksi di Google Cloud Console, ID koneksi adalah nilai di bagian terakhir dari ID koneksi yang sepenuhnya memenuhi syarat, yang ditampilkan di Connection ID—misalnya projects/.../locations/.../connections/myconnection

  2. Ambil dan salin ID akun layanan karena Anda memerlukannya di langkah lain:

    bq show --location=LOCATION --connection PROJECT_ID.LOCATION.CONNECTION_ID
    

    Outputnya mirip dengan hal berikut ini:

    Connection myproject.us.myconnection
    
           name           type                    properties
    ---------------------- ------- ---------------------------------------------------
    myproject.us.myconnection  SPARK   {"serviceAccountId": "bqserver@example.iam.gserviceaccount.com"}
    

Untuk mengetahui informasi tentang cara mengelola koneksi, lihat Mengelola koneksi.

Memberikan akses ke akun layanan

Agar prosedur tersimpan untuk Apache Spark dapat mengakses resource Google Cloud, Anda perlu memberikan izin IAM yang diperlukan kepada akun layanan yang terkait dengan koneksi prosedur tersimpan. Atau, Anda dapat menggunakan akun layanan kustom untuk akses data.

  • Untuk membaca dan menulis data dari dan ke BigQuery, Anda harus memberikan izin IAM berikut kepada akun layanan:

    • bigquery.tables.* di tabel BigQuery Anda
    • bigquery.readsessions.* di project Anda

    Peran IAM roles/bigquery.admin mencakup izin yang diperlukan akun layanan untuk membaca dan menulis data dari dan ke BigQuery.

  • Untuk membaca dan menulis data dari dan ke Cloud Storage, Anda harus memberikan izin storage.objects.* kepada akun layanan di objek Cloud Storage.

    Peran IAM roles/storage.objectAdmin mencakup izin yang diperlukan akun layanan untuk membaca dan menulis data dari dan ke Cloud Storage.

  • Jika Anda menentukan Dataproc Metastore saat membuat koneksi, maka agar BigQuery dapat mengambil detail tentang konfigurasi metastore, Anda harus memberikan izin metastore.services.get kepada akun layanan di Dataproc Metastore Anda.

    Peran roles/metastore.metadataViewer bawaan mencakup izin yang diperlukan akun layanan untuk mengambil detail tentang konfigurasi metastore.

    Anda juga perlu memberi akun layanan peran roles/storage.objectAdmin di bucket Cloud Storage sehingga prosedur yang tersimpan dapat mengakses direktori Hive warehouse di Dataproc Metastore (hive.metastore.warehouse.dir). Jika prosedur tersimpan Anda menjalankan operasi di metastore, Anda mungkin perlu memberikan izin tambahan. Untuk informasi selengkapnya tentang peran dan izin IAM di Metastore Dataproc, lihat Peran dan izin yang telah ditetapkan di Dataproc Metastore.

  • Jika Anda menentukan Dataproc Persistent History Server saat membuat koneksi, Anda perlu memberikan peran berikut ke akun layanan:

    • Peran roles/dataproc.viewer di Dataproc Persistent History Server Anda yang berisi izin dataproc.clusters.get.
    • Peran roles/storage.objectAdmin pada bucket Cloud Storage yang Anda tentukan untuk spark:spark.history.fs.logDirectory properti saat membuat Dataproc Persistent History Server.

    Untuk mengetahui informasi selengkapnya, lihat Dataproc Persistent History Server serta Peran dan izin Dataproc.

Berbagi koneksi dengan pengguna

Anda dapat memberikan peran berikut untuk mengizinkan pengguna membuat kueri data dan mengelola koneksi:

  • roles/bigquery.connectionUser: memungkinkan pengguna menggunakan koneksi untuk terhubung dengan sumber data eksternal dan menjalankan kueri pada sumber data tersebut.

  • roles/bigquery.connectionAdmin: memungkinkan pengguna mengelola koneksi.

Untuk informasi selengkapnya tentang peran dan izin IAM di BigQuery, baca Peran dan izin bawaan.

Pilih salah satu opsi berikut:

Konsol

  1. Buka halaman BigQuery.

    Buka BigQuery

    Koneksi dicantumkan dalam project Anda, dalam grup yang disebut Koneksi eksternal.

  2. Di panel Penjelajah, klik nama project Anda > Koneksi eksternal > koneksi.

  3. Di panel Detail, klik Bagikan untuk membagikan koneksi. Kemudian, lakukan hal berikut:

    1. Dalam dialog Izin koneksi, bagikan koneksi dengan akun utama lain dengan menambahkan atau mengedit akun utama.

    2. Klik Save.

bq

Anda tidak dapat berbagi koneksi dengan alat command line bq. Untuk berbagi koneksi, gunakan konsol Google Cloud atau metode BigQuery Connections API untuk melakukannya.

API

Gunakan metode projects.locations.connections.setIAM di bagian referensi REST API Koneksi BigQuery, dan berikan instance resource policy.

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

Langkah selanjutnya