이 문서에서는 Managed Service for Apache Spark 작업 서비스, Spark SQL CLI 또는 Managed Service for Apache Spark 클러스터에서 실행되는 Zeppelin 웹 인터페이스를 사용하여 Lakehouse 런타임 카탈로그에 메타데이터가 포함된 Apache Iceberg 테이블을 만드는 방법을 보여줍니다.
시작하기 전에
아직 만들지 않았다면 Google Cloud 프로젝트, Cloud Storage 버킷, Managed Service for Apache Spark 클러스터를 만듭니다.
프로젝트 설정하기
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
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 billing is enabled for your Google Cloud project.
Enable the Dataproc, BigQuery, and Cloud Storage 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.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
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 billing is enabled for your Google Cloud project.
Enable the Dataproc, BigQuery, and Cloud Storage 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.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
프로젝트에 Cloud Storage 버킷을 만듭니다.
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
- 만들기를 클릭합니다.
- 버킷 만들기 페이지에서 버킷 정보를 입력합니다. 다음 단계로 이동하려면 계속을 클릭합니다.
-
시작하기 섹션에서 다음을 수행합니다.
- 버킷 이름 지정 요구사항을 충족하는 전역적으로 고유한 이름을 입력합니다.
- 버킷 라벨을 추가하려면 라벨 섹션 ()을 펼치고 add_box
라벨 추가를 클릭한 다음 라벨에
key및value를 지정합니다.
-
데이터 저장 위치 선택 섹션에서 다음을 수행합니다.
- 위치 유형을 선택합니다.
- 위치 유형 드롭다운 메뉴에서 버킷의 데이터가 영구적으로 저장될 위치를 선택합니다.
- 버킷 간 복제를 설정하려면 Storage Transfer Service를 통해 버킷 간 복제 추가를 선택하고 다음 단계를 따르세요.
버킷 간 복제 설정
- 버킷 메뉴에서 버킷을 선택합니다.
복제 설정 섹션에서 구성을 클릭하여 복제 작업의 설정을 구성합니다.
버킷 간 복제 구성 창이 표시됩니다.
- 객체 이름 접두사를 기준으로 복제할 객체를 필터링하려면 객체를 포함하거나 제외할 접두사를 입력한 다음 접두사 추가를 클릭합니다.
- 복제된 객체의 스토리지 클래스를 설정하려면 스토리지 클래스 메뉴에서 스토리지 클래스를 선택합니다. 이 단계를 건너뛰면 복제된 객체가 기본적으로 대상 버킷의 스토리지 클래스를 사용합니다.
- 완료를 클릭합니다.
-
데이터 저장 방법 선택 섹션에서 다음을 수행합니다.
- 버킷의 기본 스토리지 클래스를 선택하거나 버킷 데이터의 자동 스토리지 클래스 관리에서 자동 클래스를 선택합니다.
- 계층적 네임스페이스를 사용 설정하려면 데이터 집약적인 워크로드에 맞게 스토리지 최적화 섹션에서 이 버킷에서 계층적 네임스페이스 사용 설정을 선택합니다.
- 객체 액세스를 제어하는 방식 선택 섹션에서 버킷이 공개 액세스 방지를 적용할지 여부를 선택하고 버킷의 객체에 대한 액세스 제어 방법을 선택합니다.
-
객체 데이터 보호 방법 선택 섹션에서 다음을 수행합니다.
- 버킷에 설정할 데이터 보호 아래의 옵션을 선택합니다.
- 객체 데이터가 암호화되는 방식을 선택하려면 데이터 암호화 섹션 ()을 펼치고 데이터 암호화 방법을 선택합니다.
-
시작하기 섹션에서 다음을 수행합니다.
- 만들기를 클릭합니다.
Managed Service for Apache Spark 클러스터를 만듭니다. 리소스와 비용을 절약하려면 단일 노드 Managed Service for Apache Spark 클러스터를 만들어 이 문서에 나온 예시를 실행할 수 있습니다.
클러스터가 생성된 리전의 서브넷에 비공개 Google 액세스(PGA)가 사용 설정되어 있어야 합니다.
이 가이드의 Zeppelin 웹 인터페이스 예시를 실행하려면 Zeppelin 선택적 구성요소가 사용 설정된 Managed Service for Apache Spark 클러스터를 사용하거나 만들어야 합니다.
커스텀 서비스 계정에 역할 부여 (필요한 경우): 기본적으로 Managed Service for Apache Spark 클러스터 VM은 Compute Engine 기본 서비스 계정을 사용하여 Managed Service for Apache Spark와 상호작용합니다. 클러스터를 만들 때 커스텀 서비스 계정을 지정하려면 해당 계정에 Managed Service for Apache Spark 작업자 역할 (
roles/dataproc.worker) 또는 필요한 작업자 역할 권한이 있는 커스텀 역할이 있어야 합니다.
OSS 데이터베이스와 BigQuery 데이터 세트 매핑
오픈소스 데이터베이스와 BigQuery 데이터 세트 용어 간의 다음 매핑을 참고하세요.
| OSS 데이터베이스 | BigQuery 데이터 세트 |
|---|---|
| 네임스페이스, 데이터베이스 | 데이터 세트 |
| 파티션을 나누거나 나누지 않은 테이블 | 테이블 |
| 뷰 | 뷰 |
Iceberg 테이블 만들기
이 섹션에서는 Managed Service for Apache Spark 클러스터에서 실행되는 Managed Service for Apache Spark, Spark SQL CLI, Zeppelin 구성요소 웹 인터페이스에 Spark SQL 코드를 제출하여 Lakehouse 런타임 카탈로그에 메타데이터가 포함된 Iceberg 테이블을 만드는 방법을 보여줍니다.
Managed Service for Apache Spark 작업
Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 Managed Service for Apache Spark 클러스터에 작업을 제출하거나 HTTP REST 요청 또는 프로그래매틱 gRPC Managed Service for Apache Spark Cloud 클라이언트 라이브러리를 통해 Jobs API에 호출하여 Managed Service for Apache Spark에 작업을 제출할 수 있습니다.
이 섹션의 예시에서는 Managed Service for Apache Spark 서비스에 Managed Service for Apache Spark Spark SQL 작업을 제출하여 gcloud CLI, Google Cloud 콘솔 또는 REST API를 사용하여 BigQuery에 메타데이터가 포함된 Iceberg 테이블을 만드는 방법을 보여줍니다.
작업 파일 준비
Spark SQL 작업 파일을 만들려면 다음 단계를 따르세요. 이 파일에는 Iceberg 테이블을 만들고 업데이트하는 Spark SQL 명령어가 포함되어 있습니다.
로컬 터미널 창 또는 Cloud Shell에서
vi또는nano와 같은 텍스트 편집기를 사용하여 다음 명령어를iceberg-table.sql파일에 복사한 후 파일을 현재 디렉터리에 저장합니다.USE CATALOG_NAME; CREATE NAMESPACE IF NOT EXISTS example_namespace; USE example_namespace; DROP TABLE IF EXISTS example_table; CREATE TABLE example_table (id int, data string) USING ICEBERG LOCATION 'gs://BUCKET/WAREHOUSE_FOLDER'; INSERT INTO example_table VALUES (1, 'first row'); ALTER TABLE example_table ADD COLUMNS (newDoubleCol double); DESCRIBE TABLE example_table;
다음을 바꿉니다.
- CATALOG_NAME: Iceberg 카탈로그 이름입니다.
- BUCKET 및 WAREHOUSE_FOLDER: Iceberg 웨어하우스에 사용되는 Cloud Storage 버킷 및 폴더입니다.
gcloud CLI를 사용하여 로컬
iceberg-table.sql을 Cloud Storage의 버킷에 복사합니다.gcloud storage cp iceberg-table.sql gs://BUCKET/
그런 다음 iceberg-spark-runtime-3.5_2.12-1.6.1 JAR 파일을 다운로드하여 Cloud Storage에 복사합니다.
로컬 터미널 창 또는 Cloud Shell에서 다음
curl명령어를 실행하여iceberg-spark-runtime-3.5_2.12-1.6.1JAR 파일을 현재 디렉터리에 다운로드합니다.curl -o iceberg-spark-runtime-3.5_2.12-1.6.1.jar https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar
gcloud CLI를 사용하여 현재 디렉터리의 로컬
iceberg-spark-runtime-3.5_2.12-1.6.1JAR 파일을 Cloud Storage의 버킷에 복사합니다.gcloud storage cp iceberg-spark-runtime-3.5_2.12-1.6.1.jar gs://BUCKET/
Spark SQL 작업 제출
탭을 선택하여 gcloud CLI,Google Cloud 콘솔 또는 Managed Service for Apache Spark REST API를 사용하여 Spark SQL 작업을 Managed Service for Apache Spark에 제출하는 안내를 따릅니다.
gcloud
로컬 터미널 창 또는 Cloud Shell에서 다음 gcloud dataproc jobs submit spark-sql 명령어를 로컬로 실행하여 Spark SQL 작업을 제출하여 Iceberg 테이블을 만듭니다.
gcloud dataproc jobs submit spark-sql \ --project=PROJECT_ID \ --cluster=CLUSTER_NAME \ --region=REGION \ --jars="gs://BUCKET/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR" \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER" \ -f="gs://BUCKETiceberg-table.sql"
참고:
- PROJECT_ID: Google Cloud 프로젝트 ID입니다. 프로젝트 ID는 Google Cloud 콘솔 대시보드의 프로젝트 정보 섹션에 나열됩니다.
- CLUSTER_NAME: Managed Service for Apache Spark 클러스터의 이름입니다.
- REGION: 클러스터가 있는 Compute Engine 리전입니다.
BIGLAKE_ICEBERG_CATALOG_JAR: 사용할 Iceberg 커스텀 카탈로그 플러그인의 Cloud Storage URI입니다. Iceberg 버전 번호에 따라 다음 중 하나를 선택합니다.- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
- Iceberg 1.9.1:
- CATALOG_NAME: Iceberg 카탈로그 이름입니다.
- BUCKET 및 WAREHOUSE_FOLDER: Iceberg 웨어하우스에 사용되는 Cloud Storage 버킷 및 폴더입니다.
- LOCATION: 지원되는 BigQuery 위치입니다. 기본 위치는 'US'입니다.
--jars: 나열된 jar은 Lakehouse 런타임 카탈로그에서 테이블 메타데이터를 만드는 데 필요합니다.--properties: 카탈로그 속성입니다.-f: Cloud Storage의 버킷에 복사한iceberg-table.sql작업 파일입니다.
작업이 완료되면 터미널 출력에서 테이블 설명을 확인합니다.
Time taken: 2.194 seconds id int data string newDoubleCol double Time taken: 1.479 seconds, Fetched 3 row(s) Job JOB_ID finished successfully.
BigQuery에서 테이블 메타데이터를 확인합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
Iceberg 테이블 메타데이터를 확인합니다.
콘솔
Google Cloud 콘솔을 사용하여 Spark SQL 작업을 Managed Service for Apache Spark에 제출하여 Lakehouse 런타임 카탈로그에 메타데이터가 포함된 Iceberg 테이블을 만들려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 Managed Service for Apache Spark 작업 제출로 이동합니다.
작업 제출 페이지로 이동한 후 다음 필드를 작성합니다.
- 작업 ID: 추천 ID를 수락하거나 자체 ID를 삽입합니다.
- 리전: 클러스터가 위치한 리전을 선택합니다.
- 클러스터: 클러스터를 선택합니다.
- 작업 유형:
SparkSql을 선택합니다. - 쿼리 소스 유형:
Query file을 선택합니다. - 쿼리 파일:
gs://BUCKET/iceberg-table.sql을 삽입합니다. - Jar 파일: 다음을 삽입합니다.
gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR
- BIGLAKE_ICEBERG_CATALOG_JAR: 사용할 Iceberg 커스텀 카탈로그 플러그인의 Cloud Storage URI입니다. Iceberg 버전 번호에 따라 다음 중 하나를 선택합니다.
- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
- Iceberg 1.9.1:
- 속성: 속성 추가를 5번 클릭하여
keyvalue입력란 5개 목록을 만든 후 다음 키 및 값 쌍을 복사하여 5개의 속성을 정의합니다.# 키 값 1. spark.sql.catalog.CATALOG_NAMEorg.apache.iceberg.spark.SparkCatalog2. spark.sql.catalog.CATALOG_NAME.catalog-implorg.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog3. spark.sql.catalog.CATALOG_NAME.gcp_projectPROJECT_ID4. spark.sql.catalog.CATALOG_NAME.gcp_locationLOCATION5. spark.sql.catalog.CATALOG_NAME.warehousegs://BUCKET/WAREHOUSE_FOLDER
참고:
- CATALOG_NAME: Iceberg 카탈로그 이름입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다. 프로젝트 ID는 Google Cloud 콘솔 대시보드의 프로젝트 정보 섹션에 나열됩니다. 클러스터가 있는 리전도 표시됩니다.
- LOCATION: 지원되는 BigQuery 위치입니다. 기본 위치는 'US'입니다.
- BUCKET 및 WAREHOUSE_FOLDER: Iceberg 웨어하우스에 사용되는 Cloud Storage 버킷 및 폴더입니다.
제출을 클릭합니다.
작업 진행 상황을 모니터링하고 작업 출력을 보려면 Google Cloud 콘솔의 Managed Service for Apache Spark 작업 페이지로 이동한 다음
Job ID를 클릭하여 작업 세부정보 페이지를 엽니다.
BigQuery에서 테이블 메타데이터를 확인합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
Iceberg 테이블 메타데이터를 확인합니다.
REST
Managed Service for Apache Spark jobs.submit API를 사용하여 Spark SQL 작업을 Managed Service for Apache Spark에 제출하여 Lakehouse 런타임 카탈로그에 메타데이터가 포함된 Iceberg 테이블을 만들 수 있습니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다. 프로젝트 ID는 Google Cloud 콘솔 대시보드의 프로젝트 정보 섹션에 나열됩니다.
- CLUSTER_NAME: Managed Service for Apache Spark 클러스터의 이름입니다.
- REGION: 클러스터가 있는 Compute Engine 리전입니다.
- CATALOG_NAME: Iceberg 카탈로그 이름입니다.
- BUCKET 및 WAREHOUSE_FOLDER: Iceberg 웨어하우스에 사용되는 Cloud Storage 버킷 및 폴더입니다. LOCATION: 지원되는 BigQuery 위치입니다. 기본 위치는 'US'입니다.
BIGLAKE_ICEBERG_CATALOG_JAR: 사용할 Iceberg 커스텀 카탈로그 플러그인의 Cloud Storage URI입니다. Iceberg 버전 번호에 따라 다음 중 하나를 선택합니다.- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
- Iceberg 1.9.1:
jarFileUris: 나열된 jar은 BigQuery metastore에서 테이블 메타데이터를 만드는 데 필요합니다.properties: 카탈로그 속성입니다.queryFileUri: Cloud Storage의 버킷에 복사한iceberg-table.sql작업 파일입니다.
HTTP 메서드 및 URL:
POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/jobs:submit
JSON 요청 본문:
{
"projectId": "PROJECT_ID",
"job": {
"placement": {
"clusterName": "CLUSTER_NAME"
},
"statusHistory": [],
"reference": {
"jobId": "",
"projectId": "PROJECT_ID"
},
"sparkSqlJob": {
"properties": {
"spark.sql.catalog."CATALOG_NAME": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog."CATALOG_NAME".catalog-impl": "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog",
"spark.sql.catalog."CATALOG_NAME".gcp_project": "PROJECT_ID",
"spark.sql.catalog."CATALOG_NAME".gcp_location": "LOCATION",
"spark.sql.catalog."CATALOG_NAME".warehouse": "gs://BUCKET/WAREHOUSE_FOLDER"
},
"jarFileUris": [
"gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR"
],
"scriptVariables": {},
"queryFileUri": "gs://BUCKET/iceberg-table.sql"
}
}
}
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{
"reference": {
"projectId": "PROJECT_ID",
"jobId": "..."
},
"placement": {
"clusterName": "CLUSTER_NAME",
"clusterUuid": "..."
},
"status": {
"state": "PENDING",
"stateStartTime": "..."
},
"submittedBy": "USER",
"sparkSqlJob": {
"queryFileUri": "gs://BUCKET/iceberg-table.sql",
"properties": {
"spark.sql.catalog.USER_catalog": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.USER_catalog.catalog-impl": "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog",
"spark.sql.catalog.USER_catalog.gcp_project": "PROJECT_ID",
"spark.sql.catalog.USER_catalog.gcp_location": "LOCATION",
"spark.sql.catalog.USER_catalog.warehouse": "gs://BUCKET/WAREHOUSE_FOLDER"
},
"jarFileUris": [
"gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.6.1.jar",
"BIGLAKE_ICEBERG_CATALOG_JAR"
]
},
"driverControlFilesUri": "gs://dataproc-...",
"driverOutputResourceUri": "gs://dataproc-.../driveroutput",
"jobUuid": "...",
"region": "REGION"
}
작업 진행 상황을 모니터링하고 작업 출력을 보려면 Google Cloud 콘솔의 Managed Service for Apache Spark 작업 페이지로 이동한 다음 Job ID를 클릭하여 작업 세부정보 페이지를 엽니다.
BigQuery에서 테이블 메타데이터를 확인합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
Iceberg 테이블 메타데이터를 확인합니다.
Spark SQL CLI
다음 단계에서는 Managed Service for Apache Spark 클러스터의 마스터 노드에서 실행되는 Spark SQL CLI를 사용하여 Lakehouse 런타임 카탈로그에 저장된 테이블 메타데이터가 포함된 Iceberg 테이블을 만드는 방법을 보여줍니다.
SSH를 사용하여 Managed Service for Apache Spark 클러스터의 마스터 노드에 연결합니다.
SSH 세션 터미널에서
vi또는nano텍스트 편집기를 사용하여 다음 명령어를iceberg-table.sql파일에 복사합니다.SET CATALOG_NAME = `CATALOG_NAME`; SET BUCKET = `BUCKET`; SET WAREHOUSE_FOLDER = `WAREHOUSE_FOLDER`; USE `${CATALOG_NAME}`; CREATE NAMESPACE IF NOT EXISTS `${CATALOG_NAME}`.example_namespace; DROP TABLE IF EXISTS `${CATALOG_NAME}`.example_namespace.example_table; CREATE TABLE `${CATALOG_NAME}`.example_namespace.example_table (id int, data string) USING ICEBERG LOCATION 'gs://${BUCKET}/${WAREHOUSE_FOLDER}'; INSERT INTO `${CATALOG_NAME}`.example_namespace.example_table VALUES (1, 'first row'); ALTER TABLE `${CATALOG_NAME}`.example_namespace.example_table ADD COLUMNS (newDoubleCol double); DESCRIBE TABLE `${CATALOG_NAME}`.example_namespace.example_table;다음을 바꿉니다.
- CATALOG_NAME: Iceberg 카탈로그 이름입니다.
- BUCKET 및 WAREHOUSE_FOLDER: Iceberg 웨어하우스에 사용되는 Cloud Storage 버킷 및 폴더입니다.
SSH 세션 터미널에서 다음
spark-sql명령어를 실행하여 Iceberg 테이블을 만듭니다.spark-sql \ --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1 \ --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR \ --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog \ --conf spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID \ --conf spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION \ --conf spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER \ -f iceberg-table.sql
다음을 바꿉니다.
BIGLAKE_ICEBERG_CATALOG_JAR: 사용할 Iceberg 커스텀 카탈로그 플러그인의 Cloud Storage URI입니다. Iceberg 버전 번호에 따라 다음 중 하나를 선택합니다.- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
- Iceberg 1.9.1:
- PROJECT_ID: Google Cloud 프로젝트 ID입니다. 프로젝트 ID는 Google Cloud 콘솔 대시보드의 프로젝트 정보 섹션에 나열됩니다.
- LOCATION: 지원되는 BigQuery 위치입니다. 기본 위치는 'US'입니다.
BigQuery에서 테이블 메타데이터를 확인합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
Iceberg 테이블 메타데이터를 확인합니다.
Zeppelin 웹 인터페이스
다음 단계에서는 Managed Service for Apache Spark 클러스터의 마스터 노드에서 실행되는 Zeppelin 웹 인터페이스를 사용하여 Lakehouse 런타임 카탈로그에 저장된 테이블 메타데이터가 포함된 Iceberg 테이블을 만드는 방법을 보여줍니다 .
Google Cloud 콘솔에서 Managed Service for Apache Spark 클러스터 페이지로 이동합니다.
클러스터 이름을 선택하여 클러스터 세부정보 페이지를 엽니다.
웹 인터페이스 탭을 클릭하여 클러스터에 설치된 기본 및 선택사항 구성요소의 웹 인터페이스에 구성요소 게이트웨이 링크 목록을 표시합니다.
Zeppelin 링크를 클릭하여 Zeppelin 웹 인터페이스를 엽니다.
Zeppelin 웹 인터페이스에서 익명 메뉴를 클릭한 다음 인터프리터를 클릭하여 인터프리터 페이지를 엽니다.
다음과 같이 Zeppelin Spark 인터프리터에 두 개의 jar을 추가합니다.
Search interpreters상자에 'Spark'를 입력하여 Spark 인터프리터 섹션으로 스크롤합니다.- 수정을 클릭합니다.
spark.jars 필드에 다음을 붙여넣습니다.
https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.6.1/iceberg-spark-runtime-3.5_2.12-1.6.1.jar,BIGLAKE_ICEBERG_CATALOG_JAR
다음 메모를 추가합니다.
BIGLAKE_ICEBERG_CATALOG_JAR: 사용할 Iceberg 커스텀 카탈로그 플러그인의 Cloud Storage URI입니다. Iceberg 버전 번호에 따라 다음 중 하나를 선택합니다.- Iceberg 1.9.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.9.1-1.0.1.jar - Iceberg 1.6.1:
gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.6.1-1.0.2.jar
Spark 인터프리터 섹션 하단에서 저장을 클릭한 다음 확인을 클릭하여 인터프리터를 업데이트하고 새 설정으로 Spark 인터프리터를 다시 시작합니다.
Zeppelin 노트북 메뉴에서 새 메모 만들기를 클릭합니다.
새 메모 만들기 대화상자에서 노트북 이름을 입력하고 기본 spark 인터프리터를 수락합니다. 만들기를 클릭하여 노트북을 엽니다.
변수를 채운 후 다음 PySpark 코드를 Zeppelin 노트북에 복사합니다.
%pyspark
from pyspark.sql import SparkSession
project_id = "PROJECT_ID" catalog = "CATALOG_NAME" namespace = "NAMESPACE" location = "LOCATION" warehouse_dir = "gs://BUCKET/WAREHOUSE_DIRECTORY"
spark = SparkSession.builder \ .appName("BigQuery Metastore Iceberg") \ .config(f"spark.sql.catalog.{catalog}", "org.apache.iceberg.spark.SparkCatalog") \ .config(f"spark.sql.catalog.{catalog}.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \ .config(f"spark.sql.catalog.{catalog}.gcp_project", f"{project_id}") \ .config(f"spark.sql.catalog.{catalog}.gcp_location", f"{location}") \ .config(f"spark.sql.catalog.{catalog}.warehouse", f"{warehouse_dir}") \ .getOrCreate()
spark.sql(f"USE `{catalog}`;") spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;") spark.sql(f"USE `{namespace}`;")
\# Create table and display schema (without LOCATION) spark.sql("DROP TABLE IF EXISTS example_iceberg_table") spark.sql("CREATE TABLE example_iceberg_table (id int, data string) USING ICEBERG") spark.sql("DESCRIBE example_iceberg_table;")
\# Insert table data. spark.sql("INSERT INTO example_iceberg_table VALUES (1, 'first row');")
\# Alter table, then display schema. spark.sql("ALTER TABLE example_iceberg_table ADD COLUMNS (newDoubleCol double);")
\# Select and display the contents of the table. spark.sql("SELECT * FROM example_iceberg_table").show()다음을 바꿉니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다. 프로젝트 ID는 Google Cloud 콘솔 대시보드의 프로젝트 정보 섹션에 나열됩니다.
- CATALOG_NAME 및 NAMESPACE: Iceberg 카탈로그 이름과 네임스페이스가 결합되어 Iceberg 테이블(
catalog.namespace.table_name)을 식별합니다. - LOCATION: 지원되는 BigQuery 위치입니다. 기본 위치는 'US'입니다.
- BUCKET 및 WAREHOUSE_DIRECTORY: Iceberg 웨어하우스 디렉터리로 사용되는 Cloud Storage 버킷 및 폴더입니다.
실행 아이콘을 클릭하거나
Shift-Enter키를 눌러 코드를 실행합니다. 작업이 완료되면 상태 메시지에 'Spark 작업 완료됨'이 표시되고 출력에는 테이블 콘텐츠가 표시됩니다.
BigQuery에서 테이블 메타데이터를 확인합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
Iceberg 테이블 메타데이터를 확인합니다.