Dataproc Serverless에서 BigQuery 메타스토어 사용

이 문서에서는 Dataproc Serverless에서 BigQuery 메타스토어를 사용하는 방법을 설명합니다.

시작하기 전에

  1. Google Cloud 프로젝트에 결제를 사용 설정합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
  2. BigQuery 및 Dataproc API를 사용 설정합니다.

    API 사용 설정

  3. 선택사항: BigQuery 메타스토어의 작동 방식과 이를 사용해야 하는 이유를 알아봅니다.

필요한 역할

BigQuery 메타스토어를 메타데이터 저장소로 사용하여 Spark 및 Dataproc Serverless를 사용하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

일반 워크플로

Dataproc Serverless에서 BigQuery를 사용하려면 다음과 같은 일반적인 단계를 따르세요.

  1. BigQuery 메타스토어에서 실행할 명령어로 파일을 만듭니다.
  2. 원하는 오픈소스 소프트웨어 엔진에 연결합니다.
  3. Spark SQL 또는 PySpark와 같은 원하는 방법을 사용하여 일괄 작업을 제출합니다.

BigQuery metastore를 Spark에 연결

다음 안내에서는 Dataproc Serverless를 BigQuery 메타스토어에 연결하는 방법을 보여줍니다.

SparkSQL

Spark SQL 일괄 작업을 제출하려면 다음 단계를 완료하세요.

  1. BigQuery 메타스토어에서 실행하려는 Spark SQL 명령어로 SQL 파일을 만듭니다. 예를 들어 이 명령어는 네임스페이스와 테이블을 만듭니다.

    CREATE NAMESPACE `CATALOG_NAME`.NAMESPACE_NAME;
    CREATE TABLE `CATALOG_NAME`.NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';

    다음을 바꿉니다.

    • CATALOG_NAME: Spark 테이블을 참조하는 카탈로그 이름입니다.
    • NAMESPACE_NAME: Spark 테이블을 참조하는 네임스페이스 이름입니다.
    • TABLE_NAME: Spark 테이블의 테이블 이름입니다.
    • WAREHOUSE_DIRECTORY: 데이터 웨어하우스가 저장된 Cloud Storage 폴더의 URI입니다.
  2. 다음 gcloud dataproc batches submit spark-sql gcloud CLI 명령어를 실행하여 Spark SQL 일괄 작업을 제출합니다.

    gcloud dataproc batches submit spark-sql SQL_SCRIPT_PATH \
    --project=PROJECT_ID \
    --region=REGION \
    --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
    --deps-bucket=BUCKET_PATH \
    --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=WAREHOUSE_DIRECTORY"

    다음을 바꿉니다.

    • SQL_SCRIPT_PATH: 일괄 작업에서 사용하는 SQL 파일의 경로입니다.
    • PROJECT_ID: 일괄 작업을 실행할 Google Cloud 프로젝트의 ID입니다.
    • REGION: 워크로드가 실행되는 리전입니다.
    • SUBNET_NAME: 선택사항: 비공개 Google 액세스가 사용 설정되어 있고 다른 세션 서브넷 요구사항을 충족하는 REGION의 VPC 서브넷 이름입니다.
    • LOCATION: 일괄 작업을 실행할 위치입니다.
    • BUCKET_PATH: 워크로드 종속 항목을 업로드할 Cloud Storage 버킷의 위치입니다. WAREHOUSE_FOLDER는 이 버킷에 있습니다. 버킷의 gs:// URI 접두사는 필요하지 않습니다. 버킷 경로 또는 버킷 이름(예: mybucketname1)을 지정할 수 있습니다.

    Spark 일괄 작업 제출에 관한 자세한 내용은 Spark 일괄 워크로드 실행을 참고하세요.

PySpark

PySpark 일괄 작업을 제출하려면 다음 단계를 완료하세요.

  1. BigQuery 메타스토어에서 실행할 PySpark 명령어로 Python 파일을 만듭니다.

    예를 들어 다음 명령어는 BigQuery 메타스토어에 저장된 Iceberg 테이블과 상호작용할 Spark 환경을 설정합니다. 그러면 이 명령어는 새 네임스페이스와 해당 네임스페이스 내에 Iceberg 테이블을 만듭니다.

    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder
    .appName("BigQuery Metastore Iceberg") \
    .config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \
    .config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID") \
    .config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION") \
    .config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY") \
    .getOrCreate()
    
    spark.sql("USE `CATALOG_NAME`;")
    spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;")
    spark.sql("USE NAMESPACE_NAME;")
    spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';")

    다음을 바꿉니다.

    • PROJECT_ID: 일괄 작업을 실행할 Google Cloud 프로젝트의 ID입니다.
    • LOCATION: BigQuery 리소스가 있는 위치입니다.
    • CATALOG_NAME: Spark 테이블을 참조하는 카탈로그 이름입니다.
    • TABLE_NAME: Spark 테이블의 테이블 이름입니다.
    • WAREHOUSE_DIRECTORY: 데이터 웨어하우스가 저장된 Cloud Storage 폴더의 URI입니다.
    • NAMESPACE_NAME: Spark 테이블을 참조하는 네임스페이스 이름입니다.
  2. 다음 gcloud dataproc batches submit pyspark 명령어를 사용하여 일괄 작업을 제출합니다.

    gcloud dataproc batches submit pyspark PYTHON_SCRIPT_PATH \
     --version=2.2 \
     --project=PROJECT_ID \
     --region=REGION \
     --deps-bucket=BUCKET_PATH \
     --jars=https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.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=WAREHOUSE_DIRECTORY"

    다음을 바꿉니다.

    • PYTHON_SCRIPT_PATH: 일괄 작업에서 사용하는 Python 스크립트의 경로입니다.
    • PROJECT_ID: 일괄 작업을 실행할 Google Cloud 프로젝트의 ID입니다.
    • REGION: 워크로드가 실행되는 리전입니다.
    • BUCKET_PATH: 워크로드 종속 항목을 업로드할 Cloud Storage 버킷의 위치입니다. 버킷의 gs:// URI 접두사는 필요하지 않습니다. 버킷 경로 또는 버킷 이름(예: mybucketname1)을 지정할 수 있습니다.

    PySpark 일괄 작업 제출에 관한 자세한 내용은 PySpark gcloud 참조를 참고하세요.

다음 단계