Mengkueri katalog gabungan dengan Spark dan katalog runtime Lakehouse
Setelah menyiapkan akses data lintas cloud di katalog runtime Lakehouse, Anda dapat mengkueri tabel Iceberg jarak jauh dari Managed Service untuk Apache Spark tanpa memigrasikan file atau mengelola kredensial penyimpanan cloud terpisah.
Katalog runtime Lakehouse menangani sinkronisasi metadata dan akses data yang aman melalui pemberian kredensial sementara. Saat Spark mengkueri tabel gabungan, katalog runtime Lakehouse menerjemahkan metadata katalog dan mengeluarkan kredensial sementara yang tercakup untuk Spark agar dapat membaca data dari Amazon S3 atau Cloud Storage, sehingga memperlakukan tabel seolah-olah tabel tersebut bersifat lokal untuk lingkunganGoogle Cloud Anda.
Jenis katalog gabungan yang didukung
Managed Service untuk Apache Spark mendukung kueri jenis katalog gabungan berikut melalui endpoint Katalog REST Iceberg katalog runtime Lakehouse:
| Jenis katalog gabungan | Backend penyimpanan yang didukung | Panduan penyiapan di katalog runtime Lakehouse |
|---|---|---|
| AWS Glue Data Catalog | Amazon S3 (s3://—katalog akun AWS default atau bucket tabel Amazon S3) |
Menghubungkan ke AWS Glue |
| Databricks Unity Catalog | Lokasi eksternal Amazon S3 (s3://) atau Cloud Storage (gs://) |
Menghubungkan ke Databricks Unity Catalog |
| Snowflake Horizon Catalog | Amazon S3 (s3://) atau Cloud Storage (gs://) |
Terhubung ke Snowflake Horizon Catalog |
Untuk mempelajari persyaratan kesiapan katalog dan definisi parameter Spark yang mendasarinya untuk setiap penyedia penyimpanan, lihat Membuat kueri data jarak jauh di katalog runtime Lakehouse dan Parameter Konfigurasi Spark.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, BigLake, and BigQuery APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, BigLake, and BigQuery APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.- Pastikan Anda memiliki tabel Iceberg di katalog jarak jauh.
- Siapkan koneksi lintas cloud dan katalog gabungan di katalog runtime Lakehouse untuk penyedia katalog jarak jauh Anda:
Peran Identity and Access Management (IAM) yang diperlukan
Peran IAM tertentu diperlukan untuk menjalankan contoh di halaman ini. Bergantung pada kebijakan organisasi, peran ini mungkin sudah diberikan. Untuk memeriksa pemberian peran, lihat Apakah Anda perlu memberikan peran?. Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran yang Anda butuhkan bergantung pada cara workload Anda berjalan. Cluster Managed Service untuk Apache Spark dan runtime serverless Managed Service untuk Apache Spark 2.3 dan yang lebih lama menjalankan workload sebagai akun layanan. Managed Service untuk Apache Spark runtime serverless versi 3.0 dan yang lebih baru menjalankan workload dengan kredensial pengguna akhir (EUC) secara default, sehingga Anda memberikan peran akses data ke akun pengguna, bukan akun layanan. Jika Anda menentukan akun layanan kustom untuk runtime 3.0 atau yang lebih baru, workload akan berjalan dengan kredensial akun layanan. Untuk mengetahui informasi selengkapnya, lihat Peran deployment serverless.
Peran pengguna
Untuk mendapatkan izin yang Anda perlukan untuk membuat cluster Managed Service untuk Apache Spark, mengirimkan workload batch, atau membuat sesi interaktif, minta administrator untuk memberi Anda peran IAM berikut:
-
Gunakan cluster atau runtime serverless 2.3 atau yang lebih lama:
- Dataproc Editor (
roles/dataproc.editor) di project - Pengguna Akun Layanan (
roles/iam.serviceAccountUser) pada akun layanan default Compute Engine atau akun layanan kustom
- Dataproc Editor (
-
Menggunakan runtime serverless 3.0 atau yang lebih baru:
Dataproc Serverless Editor (
roles/dataproc.serverlessEditor) pada project -
Membaca tabel gabungan dengan kredensial pengguna akhir di runtime serverless 3.0 atau yang lebih baru:
BigLake Viewer (
roles/biglake.viewer) pada project yang berisi katalog gabungan -
Menggunakan kredensial akun layanan di runtime tanpa server 3.0 atau yang lebih baru:
Pengguna Akun Layanan (
roles/iam.serviceAccountUser) di akun layanan kustom
Peran akun layanan
Berikan peran berikut ke akun layanan yang menjalankan workload Anda. Runtime serverless Managed Service untuk Apache Spark 3.0 dan yang lebih baru memerlukan peran ini hanya jika workload dijalankan dengan kredensial akun layanan.
Untuk memastikan bahwa akun layanan default Compute Engine atau akun layanan kustom memiliki izin yang diperlukan untuk menjalankan tugas Managed Service untuk Apache Spark dan membaca tabel gabungan, minta administrator untuk memberikan peran IAM berikut kepada akun layanan default Compute Engine atau akun layanan kustom:
-
Menjalankan tugas Managed Service untuk Apache Spark di cluster atau runtime serverless 2.3 atau yang lebih lama:
Dataproc Worker (
roles/dataproc.worker) di project -
Menjalankan tugas Managed Service untuk Apache Spark di runtime serverless 3.0 atau yang lebih baru:
- Node Dataproc Serverless (
roles/dataproc.serverlessNode) di project - Dataproc Resource Manager Node Service Agent (
roles/dataprocrm.nodeServiceAgent) di project
- Node Dataproc Serverless (
-
Menemukan dan membaca metadata tabel gabungan saat runtime:
BigLake Viewer (
roles/biglake.viewer) di project yang berisi katalog gabungan
Untuk memastikan bahwa Agen Layanan Managed Service untuk Apache Spark (service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com) memiliki izin yang diperlukan untuk menyelesaikan properti konfigurasi yang disederhanakan dataproc.lakehouse.catalog. saat Anda membuat cluster, mengirimkan workload batch, atau membuat sesi interaktif,
minta administrator Anda untuk memberikan peran IAM
BigLake Viewer (roles/biglake.viewer) kepada Agen Layanan Managed Service untuk Apache Spark (service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com) di project yang berisi katalog gabungan.
Mengonfigurasi konektivitas jaringan keluar untuk Amazon S3
Saat Anda mengkueri katalog gabungan yang didukung oleh Amazon S3, workload batch serverless dan sesi interaktif Managed Service untuk Apache Spark, serta cluster Managed Service untuk Apache Spark IP internal tidak dapat terhubung ke endpoint Amazon S3 dengan konfigurasi jaringan default-nya. Sediakan Cloud Router dan Cloud NAT di jaringan VPC workload Anda untuk mengizinkan traffic keluar ke Amazon S3:
gcloud compute routers create lakehouse-router \ --network=NETWORK_NAME \ --region=REGION gcloud compute routers nats create lakehouse-nat \ --router=lakehouse-router \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --region=REGION
Ganti kode berikut:
NETWORK_NAME: jaringan VPC untuk Managed Service untuk cluster Apache Spark, beban kerja batch, atau sesi interaktif, misalnya,default.REGION: region Google Cloud untuk cluster, workload batch, atau sesi interaktif Managed Service untuk Apache Spark Anda.
Mengonfigurasi Managed Service untuk Apache Spark dan membuat kueri tabel gabungan
Anda dapat mengonfigurasi cluster Managed Service untuk Apache Spark, workload batch serverless, atau sesi interaktif untuk terhubung ke katalog gabungan di katalog runtime Lakehouse. Resource Managed Service untuk Apache Spark ini mendukung properti konfigurasi
dataproc.lakehouse.catalog.CATALOG_NAME yang disederhanakan (direkomendasikan), yang membaca definisi katalog gabungan
dari katalog runtime Lakehouse dan menghasilkan properti Spark Katalog REST Iceberg yang diperlukan, termasuk
header io-impl penyimpanan dan pengambilan kredensial (bentuk properti
cluster menambahkan awalan dataproc:).
Konfigurasi yang disederhanakan dan konfigurasi manual menggunakan otorisasi Google untuk Iceberg (GoogleAuthManager), yang memerlukan salah satu versi image cluster atau runtime serverless berikut:
- Cluster Managed Service untuk Apache Spark: image 2.2 versi 2.2.65 dan yang lebih baru, atau image 2.3 versi 2.3.11 dan yang lebih baru.
- Workload batch serverless dan sesi interaktif Managed Service untuk Apache Spark: runtime 2.2 versi 2.2.60 dan yang lebih baru, runtime 2.3 versi 2.3.10 dan yang lebih baru, atau runtime 3.0.
Untuk workload batch serverless dan sesi interaktif, peran yang diperlukan bergantung pada versi runtime. Runtime 3.0 dan yang lebih baru menggunakan kredensial pengguna akhir secara default. Untuk mengetahui detailnya, lihat Peran IAM yang diperlukan dan Peran deployment serverless.
Cluster
Buat cluster Managed Service untuk Apache Spark dengan komponen opsional Iceberg menggunakan properti konfigurasi yang disederhanakan (direkomendasikan), atau dengan menentukan properti katalog secara manual.
Konfigurasi yang disederhanakan menggunakan properti (direkomendasikan)
Buat cluster dengan properti katalog gabungan:
gcloud dataproc clusters create CLUSTER_NAME \ --project=PROJECT_ID \ --region=REGION \ --image-version=IMAGE_VERSION \ --optional-components=ICEBERG,JUPYTER \ --enable-component-gateway \ --properties="dataproc:dataproc.lakehouse.catalog.CATALOG_NAME=projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,spark:spark.sql.defaultCatalog=CATALOG_NAME"
Ganti kode berikut:
CLUSTER_NAME: nama untuk cluster Anda.PROJECT_ID: Project ID Google Cloud Anda.REGION: region Google Cloud untuk cluster, misalnya,us-central1.IMAGE_VERSION: versi image Managed Service untuk Apache Spark—misalnya,2.3-debian12. Untuk versi yang didukung, lihat persyaratan di bagian ini sebelumnya.CATALOG_NAME: nama untuk katalog Spark lokal, misalnya,federated_catalog. Nilainya dapat sama denganFEDERATED_CATALOG_NAME.FEDERATED_CATALOG_NAME: ID katalog gabungan yang Anda buat di Sebelum memulai.
Membuat kueri Snowflake Horizon Catalog
Jika Anda mengkueri Snowflake Horizon Catalog, perhatikan hal-hal berikut:
Penyimpanan Snowflake: Konfigurasi yang disederhanakan mendukung tabel Snowflake yang disimpan di Amazon S3. Untuk tabel Snowflake yang disimpan di Cloud Storage, gunakan konfigurasi manual dengan
io-implditetapkan keorg.apache.iceberg.gcp.gcs.GCSFileIO.Kolom
STRINGSnowflake: Jika Anda mengalami error saat mengkueri kolomSTRINGSnowflake yang kebijakan serialisasi penyimpanan tabelnya di Snowflake bukanCOMPATIBLE, Anda dapat mengubah kebijakan serialisasi penyimpanan menjadiCOMPATIBLEdi Snowflake atau menonaktifkan vektorisasi Parquet di Spark dengan menambahkan properti berikut ke flag--properties:spark:spark.sql.iceberg.vectorization.enabled=false,spark:spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false
Di notebook Jupyter atau aplikasi PySpark, buat SparkSession
tanpa menentukan konfigurasi katalog:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("APP_NAME").getOrCreate()
Ganti APP_NAME dengan nama aplikasi Spark Anda.
Konfigurasi manual
Jika Anda tidak menggunakan properti konfigurasi yang disederhanakan, buat cluster
seperti yang dijelaskan sebelumnya di bagian ini, tanpa meneruskan properti
dataproc:dataproc.lakehouse.catalog. ke flag
--properties, lalu konfigurasi
SparkSession secara manual. Untuk mengetahui daftar nilai parameter penyedia penyimpanan, lihat Parameter Konfigurasi Spark.
from pyspark.sql import SparkSession catalog_name = "CATALOG_NAME" spark = SparkSession.builder.appName("APP_NAME") \ .config('spark.sql.defaultCatalog', catalog_name) \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \ .config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation', 'vended-credentials') \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'IO_IMPL') \ .config(f'spark.sql.catalog.{catalog_name}.s3.client-factory-impl', 'org.apache.iceberg.aws.s3.DefaultS3FileIOAwsClientFactory') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .getOrCreate()
Ganti IO_IMPL dengan
implementasi FileIO untuk penyimpanan yang berisi
tabel Anda:
- Tabel di Amazon S3:
org.apache.iceberg.aws.s3.S3FileIO - Tabel di Cloud Storage:
org.apache.iceberg.gcp.gcs.GCSFileIO
Properti s3.client-factory-impl hanya berlaku untuk tabel di Amazon S3. Hapus baris ini untuk tabel Cloud Storage.
Serverless
Kirim workload batch PySpark ke Managed Service untuk Apache Spark serverless menggunakan properti konfigurasi yang disederhanakan (direkomendasikan), atau dengan menentukan properti katalog secara manual.
Konfigurasi yang disederhanakan menggunakan properti (direkomendasikan)
Teruskan properti katalog gabungan tanpa awalan dataproc: saat Anda
mengirimkan workload batch:
gcloud dataproc batches submit pyspark PYSPARK_FILE \ --project=PROJECT_ID \ --region=REGION \ --version=RUNTIME_VERSION \ --properties="dataproc.lakehouse.catalog.CATALOG_NAME=projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,spark.sql.defaultCatalog=CATALOG_NAME"
Ganti kode berikut:
PYSPARK_FILE: jalur Cloud Storagegs://ke file aplikasi PySpark Anda.PROJECT_ID: Project ID Google Cloud Anda.REGION: region untuk workload batch.RUNTIME_VERSION: versi runtime serverless Managed Service untuk Apache Spark, misalnya,3.0. Untuk versi yang didukung, lihat persyaratan di bagian ini sebelumnya. Peran IAM yang diperlukan bergantung pada versi runtime.CATALOG_NAME: nama untuk katalog Spark lokal, misalnya,federated_catalog. Nilainya bisa sama denganFEDERATED_CATALOG_NAME.FEDERATED_CATALOG_NAME: ID katalog gabungan yang Anda buat di Sebelum memulai.
Membuat kueri Snowflake Horizon Catalog
Jika Anda mengkueri Snowflake Horizon Catalog, perhatikan hal-hal berikut:
Penyimpanan Snowflake: Konfigurasi yang disederhanakan mendukung tabel Snowflake yang disimpan di Amazon S3. Untuk tabel Snowflake yang disimpan di Cloud Storage, gunakan konfigurasi manual dengan
io-implditetapkan keorg.apache.iceberg.gcp.gcs.GCSFileIO.Kolom
STRINGSnowflake: Jika Anda mengalami error saat mengkueri kolomSTRINGSnowflake yang kebijakan serialisasi penyimpanan tabelnya di Snowflake bukanCOMPATIBLE, Anda dapat mengubah kebijakan serialisasi penyimpanan menjadiCOMPATIBLEdi Snowflake atau menonaktifkan vektorisasi Parquet di Spark dengan menambahkan properti berikut ke flag--properties:spark.sql.iceberg.vectorization.enabled=false,spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false
Dalam file aplikasi PySpark, buat SparkSession tanpa
menentukan konfigurasi katalog:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("APP_NAME").getOrCreate()
Konfigurasi manual
Jika Anda tidak menggunakan properti konfigurasi yang disederhanakan, tentukan properti katalog dengan tanda --properties dari perintah gcloud dataproc batches submit. Untuk mengetahui daftar parameter value penyedia penyimpanan, lihat Parameter Konfigurasi Spark.
gcloud dataproc batches submit pyspark PYSPARK_FILE \ --project=PROJECT_ID \ --region=REGION \ --version=RUNTIME_VERSION \ --properties="\ spark.sql.defaultCatalog=CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.CATALOG_NAME.type=rest,\ spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.CATALOG_NAME.io-impl=IO_IMPL,\ spark.sql.catalog.CATALOG_NAME.s3.client-factory-impl=org.apache.iceberg.aws.s3.DefaultS3FileIOAwsClientFactory,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
Ganti IO_IMPL dengan implementasi
FileIO untuk penyimpanan yang berisi tabel Anda:
- Tabel di Amazon S3:
org.apache.iceberg.aws.s3.S3FileIO - Tabel di Cloud Storage:
org.apache.iceberg.gcp.gcs.GCSFileIO
Properti s3.client-factory-impl hanya berlaku untuk tabel di Amazon S3. Abaikan properti ini untuk tabel Cloud Storage.
Serverless
Buat sesi interaktif serverless Managed Service untuk Apache Spark di notebook melalui API DataprocSparkSession menggunakan properti konfigurasi yang disederhanakan (direkomendasikan) atau dengan menentukan properti katalog secara manual.
Konfigurasi yang disederhanakan menggunakan properti (direkomendasikan)
Di notebook yang telah menginstal paket dataproc-spark-connect, seperti notebook BigQuery Studio atau notebook Vertex AI Workbench, teruskan properti katalog gabungan tanpa awalan dataproc: saat Anda membuat sesi:
from google.cloud.dataproc_spark_connect import DataprocSparkSession from google.cloud.dataproc_v1 import Session catalog_name = "CATALOG_NAME" session_config = Session() session_config.runtime_config.version = 'RUNTIME_VERSION' spark = DataprocSparkSession.builder.appName("APP_NAME") \ .dataprocSessionConfig(session_config) \ .config(f'dataproc.lakehouse.catalog.{catalog_name}', 'projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME') \ .config('spark.sql.defaultCatalog', catalog_name) \ .getOrCreate()
Ganti kode berikut:
CATALOG_NAME: nama untuk katalog Spark lokal, misalnya,federated_catalog. Nilainya bisa sama denganFEDERATED_CATALOG_NAME.RUNTIME_VERSION: versi runtime serverless Managed Service untuk Apache Spark, misalnya,3.0. Untuk versi yang didukung, lihat persyaratan sebelumnya di bagian ini. Peran IAM yang diperlukan bergantung pada versi runtime.APP_NAME: nama aplikasi Spark Anda.PROJECT_ID:Google Cloud Project ID Anda.FEDERATED_CATALOG_NAME: ID katalog gabungan yang Anda buat di Sebelum memulai.
Anda juga dapat menyetel properti ini dalam template sesi.
Mengkueri Snowflake Horizon Catalog
Jika Anda mengkueri Snowflake Horizon Catalog, perhatikan hal-hal berikut:
Penyimpanan Snowflake: Konfigurasi yang disederhanakan mendukung tabel Snowflake yang disimpan di Amazon S3. Untuk tabel Snowflake yang disimpan di Cloud Storage, gunakan konfigurasi manual dengan
io-implditetapkan keorg.apache.iceberg.gcp.gcs.GCSFileIO.Kolom
STRINGSnowflake: Jika Anda mengalami error saat mengkueri kolomSTRINGSnowflake yang kebijakan serialisasi penyimpanan tabelnya di Snowflake bukanCOMPATIBLE, Anda dapat mengubah kebijakan serialisasi penyimpanan menjadiCOMPATIBLEdi Snowflake atau menonaktifkan vektorisasi Parquet di Spark dengan menambahkan panggilan.config()berikut ke builder sesi:.config('spark.sql.iceberg.vectorization.enabled', 'false') \ .config(f'spark.sql.catalog.{catalog_name}.table-override.read.parquet.vectorization.enabled', 'false')
Konfigurasi manual
Jika Anda tidak menggunakan properti konfigurasi yang disederhanakan, tentukan properti katalog saat membuat sesi. Untuk mengetahui daftar nilai parameter penyedia penyimpanan, lihat Parameter Konfigurasi Spark.
from google.cloud.dataproc_spark_connect import DataprocSparkSession from google.cloud.dataproc_v1 import Session catalog_name = "CATALOG_NAME" session_config = Session() session_config.runtime_config.version = 'RUNTIME_VERSION' spark = DataprocSparkSession.builder.appName("APP_NAME") \ .dataprocSessionConfig(session_config) \ .config('spark.sql.defaultCatalog', catalog_name) \ .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \ .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \ .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \ .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME') \ .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \ .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \ .config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation', 'vended-credentials') \ .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'IO_IMPL') \ .config(f'spark.sql.catalog.{catalog_name}.s3.client-factory-impl', 'org.apache.iceberg.aws.s3.DefaultS3FileIOAwsClientFactory') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .getOrCreate()
Ganti RUNTIME_VERSION seperti yang dijelaskan dalam contoh konfigurasi yang disederhanakan sebelumnya di tab ini.
Ganti IO_IMPL dengan implementasi
FileIO untuk penyimpanan yang berisi tabel Anda:
- Tabel di Amazon S3:
org.apache.iceberg.aws.s3.S3FileIO - Tabel di Cloud Storage:
org.apache.iceberg.gcp.gcs.GCSFileIO
Properti s3.client-factory-impl hanya berlaku untuk tabel di Amazon S3. Hapus baris ini untuk tabel Cloud Storage.
Membuat kueri tabel gabungan
Setelah mengonfigurasi sesi Spark, Anda dapat membuat kueri tabel di katalog gabungan menggunakan PySpark atau Spark SQL.
Baca tabel gabungan menggunakan PySpark DataFrame API:
df = spark.table("CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME") df.show(10, truncate=False)
Ganti kode berikut:
CATALOG_NAME: nama katalog Spark lokal. Jika Anda menyetelspark.sql.defaultCatalogkeCATALOG_NAME, Anda dapat menghilangkan awalan ini.NAMESPACE_NAME: namespace (database atau skema) dalam katalog gabungan.TABLE_NAME: nama tabel dalam katalog gabungan.
Buat kueri tabel gabungan menggunakan Spark SQL:
spark.sql(""" SELECT * FROM CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME LIMIT 10 """).show()
Menggabungkan atau mewujudkan data di seluruh katalog gabungan dan lokal
Katalog gabungan bersifat hanya baca. Untuk menggabungkan data lintas cloud jarak jauh dengan tabel lokal atau mewujudkan hasil kueri gabungan ke dalam Cloud Storage, lampirkan katalog gabungan dan katalog baca-tulis di katalog runtime Lakehouse menggunakan properti dataproc.lakehouse.catalog. yang dipisahkan koma:
Cluster
Contoh cluster Managed Service untuk Apache Spark:
--properties="dataproc:dataproc.lakehouse.catalog.FEDERATED_SPARK_CATALOG=projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,dataproc:dataproc.lakehouse.catalog.LOCAL_SPARK_CATALOG=projects/PROJECT_ID/catalogs/LOCAL_CATALOG_ID,spark:spark.sql.defaultCatalog=LOCAL_SPARK_CATALOG"
Serverless
Contoh workload batch serverless Managed Service untuk Apache Spark:
--properties="dataproc.lakehouse.catalog.FEDERATED_SPARK_CATALOG=projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,dataproc.lakehouse.catalog.LOCAL_SPARK_CATALOG=projects/PROJECT_ID/catalogs/LOCAL_CATALOG_ID,spark.sql.defaultCatalog=LOCAL_SPARK_CATALOG"
Serverless
Contoh sesi interaktif serverless Managed Service untuk Apache Spark:
from google.cloud.dataproc_spark_connect import DataprocSparkSession from google.cloud.dataproc_v1 import Session session_config = Session() session_config.runtime_config.version = 'RUNTIME_VERSION' spark = DataprocSparkSession.builder.appName("APP_NAME") \ .dataprocSessionConfig(session_config) \ .config('dataproc.lakehouse.catalog.FEDERATED_SPARK_CATALOG', 'projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME') \ .config('dataproc.lakehouse.catalog.LOCAL_SPARK_CATALOG', 'projects/PROJECT_ID/catalogs/LOCAL_CATALOG_ID') \ .config('spark.sql.defaultCatalog', 'LOCAL_SPARK_CATALOG') \ .getOrCreate()
Ganti RUNTIME_VERSION seperti
yang dijelaskan dalam contoh sesi interaktif sebelumnya di halaman ini.
Setelah menetapkan properti ini, Anda dapat mengkueri katalog gabungan dan menulis hasilnya ke dalam tabel di katalog runtime Lakehouse lokal Anda.
Akun utama yang menjalankan workload Anda adalah akun layanan untuk cluster, runtime serverless 2.3 dan yang lebih lama, serta runtime serverless 3.0 dan yang lebih baru dengan kredensial akun layanan. Untuk runtime serverless 3.0 dan yang lebih baru dengan kredensial pengguna akhir (default), akun utama adalah akun pengguna Anda.
Untuk memastikan bahwa akun utama yang menjalankan workload Anda memiliki izin yang diperlukan untuk menulis data tabel ke katalog lokal, minta administrator Anda untuk memberikan peran IAM berikut kepada akun utama yang menjalankan workload Anda:
-
Menulis data tabel dalam mode penyediaan kredensial:
BigLake Editor (
roles/biglake.editor) pada project yang berisi katalog lokal -
Menulis data tabel dalam mode non-credential vending:
- BigLake Editor (
roles/biglake.editor) pada project yang berisi katalog lokal - Storage Object User (
roles/storage.objectUser) di semua bucket Cloud Storage yang terkait dengan katalog lokal
- BigLake Editor (
Contoh berikut membuat tabel di katalog lokal Anda dari tabel gabungan:
spark.sql(""" CREATE TABLE IF NOT EXISTS LOCAL_SPARK_CATALOG.LOCAL_NAMESPACE.materialized_table USING iceberg AS SELECT * FROM FEDERATED_SPARK_CATALOG.REMOTE_NAMESPACE.REMOTE_TABLE """)
Langkah berikutnya
- Membuat lakehouse dengan Spark dan katalog runtime Lakehouse.
- Pelajari lebih lanjut cara membuat kueri data jarak jauh di katalog runtime Lakehouse.
- Baca artikel Tentang akses data lintas cloud.
- Pelajari penyediaan kredensial.