네이티브 쿼리 실행으로 Dataproc 서버리스 일괄 워크로드 및 대화형 세션 가속화

Spark Dataframe API, Parquet 및 ORC 파일에서 데이터를 읽는 Spark SQL 쿼리, 네이티브 쿼리 실행 검증 도구에서 권장하는 워크로드를 지원하는 네이티브 쿼리 실행의 일반 버전 (GA)을 발표합니다. 추가 사용 사례에 관한 질문은 dataproc-pms@google.com으로 문의하세요.

이 문서에서는 프리미엄 요금제 등급에서 실행되는 Dataproc 서버리스 일괄 워크로드와 대화형 세션을 사용하도록 네이티브 쿼리 실행을 사용 설정하는 방법을 설명합니다.

프리미엄 등급 가격 책정과 함께 네이티브 쿼리 실행을 사용하는 방법

Dataproc 서버리스 네이티브 쿼리 실행은 Dataproc 서버리스 프리미엄 가격 책정 등급에서 실행되는 일괄 워크로드 및 대화형 세션에서만 사용할 수 있습니다. 프리미엄 등급 가격은 표준 등급 가격보다 높은 요금으로 청구되지만 네이티브 쿼리 실행에는 추가 요금이 부과되지 않습니다. 자세한 내용은 Dataproc Serverless 가격 책정을 참고하세요.

Spark 일괄 워크로드 또는 대화형 세션을 제출할 때 다음 리소스 할당 등급 속성premium로 설정하여 일괄 및 대화형 세션 리소스에 프리미엄 등급 리소스 할당 및 가격 책정을 사용 설정할 수 있습니다.

배치 워크로드, 대화형 세션 또는 세션 템플릿에서 네이티브 쿼리 실행 속성을 설정한 후 워크로드를 제출하거나 노트북에서 대화형 세션을 실행하여 네이티브 쿼리 실행을 구성합니다.

콘솔

  1. Google Cloud 콘솔 사용

    1. Dataproc Batches로 이동합니다.
    2. 만들기를 클릭하여 배치 만들기 페이지를 엽니다.
  2. 다음 필드를 선택하고 작성하여 네이티브 쿼리 실행을 위한 일괄 처리를 구성합니다.

    • 컨테이너:
    • 실행자 및 드라이버 등급 구성:
      • 모든 등급 (드라이버 컴퓨팅 등급, 실행 컴퓨팅 등급)에 Premium를 선택합니다.
    • 속성: 다음 네이티브 쿼리 실행 속성에 다음 Key (속성 이름) 및 Value 쌍을 입력합니다.
      spark.dataproc.runtimeEngine 원주민/토착민
  3. 다른 일괄 워크로드 설정을 작성, 선택 또는 확인합니다. Spark 배치 워크로드 제출을 참고하세요.

  4. 제출을 클릭하여 Spark 배치 워크로드를 실행합니다.

gcloud

다음 gcloud CLI gcloud dataproc batches submit spark 명령어 플래그를 설정하여 네이티브 쿼리 실행의 일괄 워크로드를 구성합니다.

gcloud dataproc batches submit spark \
    --project=PROJECT_ID \
    --region=REGION \
    --version=VERSION \
    --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
    --class=org.apache.spark.examples.SparkPi \
    --properties=spark.dataproc.runtimeEngine=native,spark.dataproc.driver.compute.tier=premium,spark.dataproc.executor.compute.tier=premium \
    OTHER_FLAGS_AS_NEEDED

참고:

API

네이티브 쿼리 실행을 위한 일괄 워크로드를 구성하려면 다음 Dataproc API 필드를 설정합니다.

네이티브 쿼리 실행 워크로드 조정

Dataproc Serverless 네이티브 쿼리 실행은 다음 속성을 사용하여 추가로 조정할 수 있습니다.

일괄 속성 사용 시기
spark.driver.memory
spark.driver.memoryOverhead
To tune the memory provided to spark driver process
spark.executor.memory
spark.executor.memoryOverhead
spark.memory.offHeap.size
To tune the memory provided to onheap/offheap memory of executor process
spark.dataproc.driver.disk.tier
spark.dataproc.driver.disk.size
To configure premium disk tier and size for driver
spark.dataproc.executor.disk.tier
spark.dataproc.executor.disk.size
To configure premium disk tier and size for executor

네이티브 쿼리 실행 속성

  • spark.dataproc.runtimeEngine=native (필수): 기본 spark 런타임 엔진을 재정의하려면 워크로드 런타임 엔진을 native로 설정해야 합니다.

  • version (필수): 워크로드는 Spark 런타임 버전 1.2.26 이상, 2.2.26 이상 또는 이후의 주요 런타임 버전을 사용해야 합니다.

  • 프리미엄 컴퓨팅 등급 (필수): spark.dataproc.spark.driver.compute.tierspark.dataproc.executor.compute.tier 속성을 premium로 설정해야 합니다.

  • 프리미엄 디스크 등급 (선택사항 및 권장): 프리미엄 디스크 등급은 행 기반 셔플 대신 열 형식을 사용하여 더 나은 성능을 제공합니다. 셔플 I/O 처리량을 개선하려면 셔플 파일을 수용할 만큼 충분히 큰 디스크 크기의 드라이버 및 실행자 프리미엄 디스크 등급을 사용하세요.

  • 메모리 (선택사항): 오프힙 메모리 (spark.memory.offHeap.size)와 온힙 메모리(spark.executor.memory)를 모두 구성하지 않고 네이티브 쿼리 실행 엔진을 구성한 경우 네이티브 쿼리 실행 엔진은 기본 4g 크기의 메모리를 가져와 오프힙 메모리와 온힙 메모리 간에 6:1 비율로 나눕니다.

    네이티브 쿼리 실행을 사용할 때 메모리를 구성하려면 다음 두 가지 방법 중 하나를 사용하면 됩니다.

    • 지정된 값으로 오프힙 메모리만 (spark.memory.offHeap.size) 구성합니다. 네이티브 쿼리 실행은 지정된 값을 오프힙 메모리로 사용하고 오프힙 메모리 값의 1/7th를 추가로 온힙 메모리로 할당합니다.

    • 온힙 메모리 (spark.executor.memory)와 오프힙 메모리(spark.memory.offHeap.size)를 모두 구성합니다. 오프힙 메모리에 할당하는 양은 온힙 메모리에 할당하는 양보다 커야 합니다. 권장사항: 오프힙을 온힙 메모리에 6:1 비율로 할당합니다.

    샘플 값:

    네이티브 쿼리 실행이 없는 메모리 설정 네이티브 쿼리 실행을 위한 권장 메모리 설정
    spark.executor.memory spark.memory.offHeap.size spark.executor.memory
    7g 6g 1g
    14g 12g 2g
    28g 24g 4g
    56g 48g 8g

네이티브 쿼리 실행 검증 도구

Dataproc 네이티브 쿼리 실행 검증 도구인 run_qualification_tool.sh를 실행하여 네이티브 쿼리 실행으로 더 빠른 런타임을 달성할 수 있는 워크로드를 식별할 수 있습니다. 이 도구는 일괄 워크로드 애플리케이션에서 생성된 Spark 이벤트 파일을 분석한 후 각 워크로드 애플리케이션이 네이티브 쿼리 실행으로 얻을 수 있는 잠재적인 런타임 절감을 추정합니다.

검증 도구 실행

Dataproc Serverless 일괄 워크로드 이벤트 파일에 대해 도구를 실행하려면 다음 단계를 따르세요.

1.분석할 Spark 이벤트 파일이 포함된 로컬 디렉터리에 run_qualification_tool.sh를 복사합니다.

  1. 검증 도구를 실행하여 스크립트 디렉터리에 포함된 이벤트 파일 1개 또는 이벤트 파일 세트를 분석합니다.

    ./run_qualification_tool.sh -f EVENT_FILE_PATH/EVENT_FILE_NAME \
        -o CUSTOM_OUTPUT_DIRECTORY_PATH \
        -k SERVICE_ACCOUNT_KEY  \
        -x MEMORY_ALLOCATEDg  \
        -t PARALLEL_THREADS_TO_RUN
    

    플래그 및 값:

    -f (필수): Spark 이벤트 파일 위치를 참고하여 Spark 워크로드 이벤트 파일을 찾습니다.

    • EVENT_FILE_PATH (EVENT_FILE_NAME가 지정되지 않은 경우 필수): 분석할 이벤트 파일의 경로입니다. 제공하지 않으면 이벤트 파일 경로가 현재 디렉터리로 간주됩니다.

    • EVENT_FILE_NAME (EVENT_FILE_PATH가 지정되지 않은 경우 필요): 분석할 이벤트 파일의 이름입니다. 제공하지 않으면 EVENT_FILE_PATH에서 재귀적으로 찾은 이벤트 파일이 분석됩니다.

    -o(선택사항): 제공되지 않으면 도구는 현재 디렉터리 아래에 기존 output 디렉터리를 만들거나 사용하여 출력 파일을 배치합니다.

    • CUSTOM_OUTPUT_DIRECTORY_PATH: 출력 파일의 출력 디렉터리 경로입니다.

    -k (선택사항):

    • SERVICE_ACCOUNT_KEY: EVENT_FILE_PATH에 액세스하는 데 필요한 경우 JSON 형식의 서비스 계정 키입니다.

    -x (선택사항):

    • MEMORY_ALLOCATED: 도구에 할당할 메모리(GB)입니다. 기본적으로 이 도구는 시스템에서 사용 가능한 여유 메모리의 80% 와 사용 가능한 모든 머신 코어를 사용합니다.

    -t(선택사항):

    • PARALLEL_THREADS_TO_RUN: N=도구가 실행할 동시 스레드 수입니다. 기본적으로 이 도구는 모든 코어를 실행합니다.

    명령어 사용 예시:

    ./run_qualification_tool.sh -f gs://dataproc-temp-us-east1-9779/spark-job-history \
        -o perfboost-output -k /keys/event-file-key -x 34g -t 5
    

    이 예에서 검증 도구는 gs://dataproc-temp-us-east1-9779/spark-job-history 디렉터리를 탐색하고 이 디렉터리와 하위 디렉터리에 포함된 Spark 이벤트 파일을 분석합니다. 디렉터리에 대한 액세스 권한은 /keys/event-file-key에 제공됩니다. 이 도구는 실행에 34 GB memory를 사용하고 5개의 병렬 스레드를 실행합니다.

검증 도구 출력 파일

분석이 완료되면 검증 도구는 현재 디렉터리의 perfboost-output 디렉터리에 다음 출력 파일을 배치합니다.

  • AppsRecommendedForBoost.tsv: 네이티브 쿼리 실행과 함께 사용하는 것이 권장되는 애플리케이션의 탭으로 구분된 목록입니다.

  • UnsupportedOperators.tsv: 네이티브 쿼리 실행과 함께 사용하지 않는 것이 권장되는 애플리케이션의 탭으로 구분된 목록입니다.

AppsRecommendedForBoost.tsv 출력 파일

다음 표는 샘플 AppsRecommendedForBoost.tsv 출력 파일의 콘텐츠를 보여줍니다. 분석된 각 애플리케이션에 대한 행이 포함됩니다.

샘플 AppsRecommendedForBoost.tsv 출력 파일:

applicationId applicationName rddPercentage unsupportedSqlPercentage totalTaskTime supportedTaskTime supportedSqlPercentage recommendedForBoost expectedRuntimeReduction
app-2024081/batches/083f6196248043938-000 projects/example.com:dev/locations/us-central1
6b4d6cae140f883c0
11c8e
0.00% 0.00% 548924253 548924253 100.00% TRUE 30.00%
app-2024081/batches/60381cab738021457-000 projects/example.com:dev/locations/us-central1
474113a1462b426bf
b3aeb
0.00% 0.00% 514401703 514401703 100.00% TRUE 30.00%

열 설명:

  • applicationId: Spark 애플리케이션의 ApplicationID입니다. 이를 사용하여 해당하는 일괄 워크로드를 식별합니다.

  • applicationName: Spark 애플리케이션의 이름입니다.

  • rddPercentage: 애플리케이션의 RDD 작업 비율입니다. RDD 작업은 네이티브 쿼리 실행에서 지원되지 않습니다.

  • unsupportedSqlPercentage: 네이티브 쿼리 실행에서 지원되지 않는 SQL 작업의 비율입니다.

  • totalTaskTime: 애플리케이션 실행 중에 실행된 모든 태스크의 누적 태스크 시간입니다.

  • supportedTaskTime: 네이티브 쿼리 실행에서 지원하는 총 태스크 시간입니다.

다음 열에는 네이티브 쿼리 실행이 일괄 워크로드에 도움이 되는지 확인하는 데 도움이 되는 중요한 정보가 제공됩니다.

  • supportedSqlPercentage: 네이티브 쿼리 실행에서 지원하는 SQL 작업의 비율입니다. 이 비율이 높을수록 네이티브 쿼리 실행으로 애플리케이션을 실행하여 런타임을 더 많이 줄일 수 있습니다.

  • recommendedForBoost: TRUE인 경우 네이티브 쿼리 실행으로 애플리케이션을 실행하는 것이 좋습니다. recommendedForBoostFALSE이면 배치 워크로드에서 네이티브 쿼리 실행을 사용하지 마세요.

  • expectedRuntimeReduction: 네이티브 쿼리 실행으로 애플리케이션을 실행할 때 애플리케이션 런타임이 예상되는 비율로 감소합니다.

UnsupportedOperators.tsv 출력 파일

UnsupportedOperators.tsv 출력 파일에는 네이티브 쿼리 실행에서 지원되지 않는 워크로드 애플리케이션에 사용되는 연산자 목록이 포함되어 있습니다. 출력 파일의 각 행에는 지원되지 않는 연산자가 나열됩니다.

열 설명:

  • unsupportedOperator: 네이티브 쿼리 실행에서 지원되지 않는 연산자의 이름입니다.

  • cumulativeCpuMs: 연산자 실행 중에 소모된 CPU 밀리초 수입니다. 이 값은 애플리케이션에서 연산자의 상대적 중요도를 반영합니다.

  • count: 애플리케이션에서 연산자가 사용된 횟수입니다.

프로젝트 전반에서 검증 도구 실행

이 섹션에서는 스크립트를 실행하여 검증 도구를 실행하여 여러 프로젝트의 일괄 워크로드 Spark 이벤트 파일을 분석하는 방법을 설명합니다.

스크립트 요구사항 및 제한사항:

  • Linux 머신에서 스크립트를 실행합니다.
    • Java 버전 >=11가 기본 Java 버전으로 설치되어 있어야 합니다.
  • Cloud Logging의 로그에는 30일의 TTL이 있으므로 30일 전에 실행된 일괄 워크로드의 Spark 이벤트 파일은 분석할 수 없습니다.

프로젝트에서 검증 도구를 실행하려면 다음 단계를 따르세요.

  1. list-batches-and-run-qt.sh 스크립트를 다운로드하여 로컬 머신에 복사합니다.

  2. 스크립트 권한 변경

    chmod +x list-batches-and-run-qt.sh
    
  3. 분석을 위해 스크립트에 전달할 프로젝트 입력 파일 목록을 준비합니다. 분석할 일괄 워크로드 Spark 이벤트 파일이 있는 각 프로젝트 및 지역에 대해 다음 형식으로 행을 하나씩 추가하여 텍스트 파일을 만듭니다.

    -r REGION -s START_DATE -e END_DATE -p PROJECT_ID -l LIMIT_MAX_BATCHES -k KEY_PATH
    

    참고:

    -r (필수):

    • REGION: 프로젝트의 일괄 처리가 제출되는 리전입니다.

    -s (필수): 형식: yyyy-mm-dd 선택사항인 00:00:00 시간 세그먼트를 추가할 수 있습니다.

    • START_DATE: 시작일 이후에 생성된 일괄 워크로드만 분석됩니다. 배치는 배치 생성 시간의 내림차순으로 분석되며 가장 최근 배치가 먼저 분석됩니다.

    -e (선택사항): 형식: yyyy-mm-dd 선택사항인 00:00:00 시간 세그먼트를 추가할 수 있습니다.

    • END_DATE: 이 값을 지정하면 종료일 이전 또는 종료일에 생성된 일괄 워크로드만 분석됩니다. 지정하지 않으면 START_DATE 이후에 생성된 모든 일괄 처리가 분석됩니다. 일괄 처리는 일괄 처리 생성 시간의 내림차순으로 분석되며 가장 최근 일괄 처리가 먼저 분석됩니다.

    -l (선택사항):

    • LIMIT_MAX_BATCHES: 분석할 최대 일괄 처리 수입니다. 이 옵션을 START-DATEEND-DATE와 함께 사용하여 지정된 날짜 사이에 생성된 제한된 수의 일괄 처리를 분석할 수 있습니다.

      -l을 지정하지 않으면 최대 100개의 배치가 기본적으로 분석됩니다.

    -k (선택사항):

    • KEY_PATH: 워크로드 Spark 이벤트 파일의 Cloud Storage 액세스 키가 포함된 로컬 경로입니다.

    입력 파일 예시:

    -r us-central1 -s 2024-08-21 -p project1 -k key1
    -r us-east1 -s 2024-08-21 -e 2024-08-23 -l 50 -p project2 -k key2
    

    참고:

    • 1행: us-central1 리전의 project1에 있는 Spark 이벤트 파일 중 2024-08-21 00:00:00 AM 이후에 생성된 파일 중 최대 100개 (기본값)가 분석됩니다. key1을 사용하면 Cloud Storage의 파일에 액세스할 수 있습니다.

    • 2행: us-eastl1 리전의 project2에 있는 Spark 이벤트 파일 중 생성 시간이 2024-08-21 00:00:00 AM 이후이고 2024년 8월 23일 오후 11시 59분 59초 이전인 파일 중 최대 50개가 분석됩니다. key2를 사용하면 Cloud Storage의 이벤트 파일에 액세스할 수 있습니다.

  4. list-batches-and-run-qt.sh 스크립트를 실행합니다. 분석은 AppsRecommendedForBoost.tsvUnsupportedOperators.tsv 파일에 출력됩니다.

    ./list-batches-and-run-qt.sh PROJECT_INPUT_FILE_LIST \
        -x MEMORY_ALLOCATED \
        -o CUSTOM_OUTPUT_DIRECTORY_PATH \
        -t PARALLEL_THREADS_TO_RUN
    

    참고:

    • PROJECT_INPUT_FILE_LIST: 섹션의 3번 안내를 참고하세요.

    • -x, -o, -t: 검증 도구 실행을 참고하세요.

Spark 이벤트 파일 위치

다음 단계 중 하나를 수행하여 Dataproc Serverless 일괄 워크로드의 Spark 이벤트 파일을 찾습니다.

  1. Cloud Storage에서 워크로드의 spark.eventLog.dir를 찾은 후 다운로드합니다.

    1. spark.eventLog.dir를 찾을 수 없는 경우 spark.eventLog.dir를 Cloud Storage 위치로 설정한 다음 워크로드를 다시 실행하고 spark.eventLog.dir를 다운로드합니다.
  2. 배치 작업에 Spark 기록 서버를 구성한 경우:

    1. Spark 기록 서버로 이동한 다음 워크로드를 선택합니다.
    2. 이벤트 로그 열에서 다운로드를 클릭합니다.

네이티브 쿼리 실행을 사용해야 하는 경우

다음 시나리오에서 네이티브 쿼리 실행을 사용하세요.

Parquet 및 ORC 파일에서 데이터를 읽는 Spark Dataframe API 및 Spark SQL 쿼리
네이티브 쿼리 실행 검증 도구에서 권장하는 워크로드입니다.

네이티브 쿼리 실행을 사용하지 말아야 하는 경우

다음 시나리오에서는 네이티브 쿼리 실행을 사용하지 마세요. 워크로드 런타임 감소가 이루어지지 않을 수 있으며 실패나 회귀가 발생할 수 있습니다.

  • 네이티브 쿼리 실행 검증 도구에서 권장하지 않는 워크로드
  • Spark RDD, UDF, ML 워크로드
  • 쓰기 워크로드
  • Parquet 및 ORC 이외의 파일 형식
  • 다음 데이터 유형의 입력:
    • Timestamp, TinyInt, Byte, Struct, Array, Map: ORC 및 Parquet
    • VarChar, Char: ORC
  • 정규 표현식이 포함된 쿼리
  • 요청자 지불 버킷을 사용하는 워크로드
  • 기본값이 아닌 Cloud Storage 구성 설정 네이티브 쿼리 실행은 재정의되더라도 많은 기본값을 사용합니다.

제한사항

다음 시나리오에서 네이티브 쿼리 실행을 사용 설정하면 예외가 발생하거나 Spark 비호환성이 발생하거나 워크로드가 기본 Spark 엔진으로 대체될 수 있습니다.

대체

다음 실행에서 네이티브 쿼리 실행으로 인해 워크로드가 Spark 실행 엔진으로 대체되어 회귀 또는 실패가 발생할 수 있습니다.

  • ANSI: ANSI 모드가 사용 설정되면 실행이 Spark로 대체됩니다.

  • 대소문자 구분 모드: 네이티브 쿼리 실행은 Spark 기본 대소문자 구분 모드만 지원합니다. 대소문자 구분 모드가 사용 설정된 경우 잘못된 결과가 발생할 수 있습니다.

  • 파티션을 나눈 테이블 스캔: 네이티브 쿼리 실행은 경로에 파티션 정보가 포함된 경우에만 파티션을 나눈 테이블 스캔을 지원합니다. 그렇지 않으면 워크로드가 Spark 실행 엔진으로 대체됩니다.

호환되지 않는 동작

다음과 같은 경우에는 네이티브 쿼리 실행을 사용할 때 비호환 동작이나 잘못된 결과가 발생할 수 있습니다.

  • JSON 함수: 네이티브 쿼리 실행은 작은따옴표가 아닌 큰따옴표로 묶인 문자열을 지원합니다. 따옴표를 사용하면 잘못된 결과가 발생합니다. get_json_object 함수와 함께 경로에 '*'를 사용하면 NULL이 반환됩니다.

  • Parquet 읽기 구성:

    • 네이티브 쿼리 실행은 spark.files.ignoreCorruptFilestrue로 설정했더라도 기본 false 값으로 설정된 것으로 간주합니다.
    • 네이티브 쿼리 실행은 spark.sql.parquet.datetimeRebaseModeInRead를 무시하고 Parquet 파일 콘텐츠만 반환합니다. 기존 하이브리드 (율리우스력 그레고리력) 캘린더와 프로레프티시 그레고리력 캘린더 간의 차이는 고려되지 않습니다. Spark 결과는 다를 수 있습니다.
  • NaN: 지원되지 않습니다. 예를 들어 숫자 비교에서 NaN를 사용하면 예기치 않은 결과가 발생할 수 있습니다.

  • Spark 열 형식 읽기: Spark 열 벡터가 네이티브 쿼리 실행과 호환되지 않으므로 치명적인 오류가 발생할 수 있습니다.

  • 스필: 셔플 파티션이 큰 숫자로 설정된 경우 디스크 스필 기능이 OutOfMemoryException를 트리거할 수 있습니다. 이 경우 파티션 수를 줄이면 이 예외를 제거할 수 있습니다.