Apache Spark 배치 워크로드 실행

설정

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Dataproc API 사용 설정

    API 사용 설정

  5. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  6. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  7. Dataproc API 사용 설정

    API 사용 설정

Spark 배치 워크로드 제출

콘솔

Google Cloud Console에서 Dataproc 배치로 이동합니다. 만들기를 클릭하여 배치 만들기 페이지를 엽니다.

페이지의 다음 필드를 선택하고 작성하여 pi의 대략적인 값을 계산하는 Spark 배치 워크로드를 제출합니다.

  • 배치 정보
    • 일괄 ID: 일괄 워크로드에 ID를 지정합니다. 이 값은 4~63자(영문 기준)의 소문자여야 합니다. 유효한 문자는 /[az][0-9]-/입니다.
    • 리전: 워크로드를 실행할 리전을 선택합니다.
  • 컨테이너
    • 배치 유형: Spark
    • 기본 클래스:
      org.apache.spark.examples.SparkPi
    • Jar 파일:
      file:///usr/lib/spark/examples/jars/spark-examples.jar
    • 인수: 1,000
  • 실행 구성: 워크로드를 실행하는 데 사용할 서비스 계정을 지정할 수 있습니다. 서비스 계정을 지정하지 않으면 Compute Engine 기본 서비스 계정에서 워크로드가 실행됩니다.
  • 네트워크 구성: 서버리스 Spark 워크로드를 실행하는 VPC 서브네트워크는 Spark를 위한 서버리스 Dataproc 네트워크 구성에 나열된 요구사항을 충족해야 합니다. 서브네트워크 목록에는 비공개 Google 액세스에 사용 설정된 일부 네트워크의 서브넷이 표시됩니다.
  • 속성: Spark 배치 워크로드에서 사용할 지원되는 Spark 속성의 키(속성 이름) 값을 입력합니다. 참고: Compute Engine의 Dataproc 클러스터 속성과 달리 Spark를 위한 서버리스 Dataproc 워크로드 속성에는 'spark:' 프리픽스가 포함되지 않습니다.
  • 기타 옵션

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

gcloud

Spark 배치 워크로드를 제출하여 pi의 근사치를 계산하려면 다음 gcloud CLI gcloud dataproc batches submit spark 명령어를 터미널 창 또는 Cloud Shell에서 로컬로 실행합니다.

gcloud dataproc batches submit spark \
    --region=region \
    --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
    --class=org.apache.spark.examples.SparkPi \
    -- 1000

참고:

  • 서브네트워크: 서버리스 Spark 워크로드를 실행하는 VPC 서브네트워크는 Spark를 위한 서버리스 Dataproc 네트워크 구성에 나열된 요구사항을 충족해야 합니다. gcloud dataproc batches submit 명령어에 지정된 리전의 default 네트워크 서브넷이 비공개 Google 액세스에 사용 설정되어 있지 않으면 다음 중 하나를 수행해야 합니다.
    1. 비공개 Google 액세스 리전에 기본 네트워크의 서브넷 사용 설정합니다.
    2. 명령어에 --subnet=[SUBNET_URI] 플래그를 사용하여 비공개 Google 액세스가 사용 설정된 서브넷을 지정합니다. gcloud compute networks describe [NETWORK_NAME] 명령어를 실행하여 네트워크에 있는 서브넷의 URI를 나열할 수 있습니다.
  • --jars: 예시 jar 파일이 사전 설치되었으며 SparkPi 워크로드에 전달된 --1000 명령어 인수는 pi 추정 로직의 반복을 1,000회 지정합니다(워크로드 입력 인수는 '--' 뒤에 포함됨).
  • --properties: --properties 플래그를 추가하여 Spark 배치 워크로드에 사용할 지원되는 Spark 속성을 입력할 수 있습니다.
  • --deps-bucket: 이 플래그를 추가하여 Spark용 Dataproc 서버리스에서 워크로드 종속 항목을 업로드할 Cloud Storage 버킷을 지정할 수 있습니다. 버킷의 gs:// URI 프리픽스는 필요하지 않습니다. 버킷 경로/이름만 지정할 수 있습니다(예: 'mybucketname'). 예외: 배치 워크로드가 로컬 머신의 파일을 참조하는 경우 --deps-bucket 플래그가 필요합니다. Spark를 위한 서버리스 Dataproc는 배치 워크로드를 실행하기 전에 로컬 파일을 버킷의 /dependencies 폴더에 업로드합니다.
  • --container-image: Docker 이미지 이름 지정 형식(예: {hostname}/{project-id}/{image}:{tag})을 사용하여 커스텀 컨테이너 이미지를 지정할 수 있습니다. gcr.io/my-project-id/my-image:1.0.1을 예로 들 수 있습니다. Container Registry에서 커스텀 컨테이너를 호스팅해야 합니다..
  • 기타 옵션:
    • 다른 선택적 명령어 플래그를 추가할 수 있습니다. 예를 들어 다음 명령어는 표준 Spark 구성을 사용하여 외부의 자체 관리형 Hive 메타스토어를 사용하도록 일괄 워크로드를 구성합니다.
      gcloud beta dataproc batches submit \
          --properties=spark.sql.catalogImplementation=hive,spark.hive.metastore.uris=METASTORE_URI,spark.hive.metastore.warehouse.dir=WAREHOUSE_DIR> \
          other args ...
                 
      지원되는 명령어 플래그는 gcloud dataproc batches submit을 참조하세요.
    • 영구 기록 서버를 사용합니다.
      1. 단일 노드 Dataproc 클러스터에 PHS(영구 기록 서버)를 만듭니다. 참고: Cloud Storage bucket-name이 있어야 합니다.
        gcloud dataproc clusters create PHS-cluster-name \
            --region=region \
            --single-node \
            --enable-component-gateway \
            --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/phs/*/spark-job-history
                     
      2. 실행 중인 영구 기록 서버를 지정하여 배치 워크로드를 제출합니다.
        gcloud dataproc batches submit spark \
            --region=region \
            --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
            --class=org.apache.spark.examples.SparkPi \
            --history-server-cluster=projects/project-id/regions/region/clusters/PHS-cluster-name
            -- 1000
                      

REST 및 명령줄

이 섹션에서는 Spark를 위한 서버리스 Dataproc batches.create API를 사용하여 대략적인 pi 값을 계산하는 배치 워크로드를 만드는 방법을 보여줍니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • project-id: Google Cloud 프로젝트 ID
  • region: 리전
  • 참고:
    • Custom-container-image: Docker 이미지 이름 지정 형식 {hostname}/{project-id}/{image}:{tag}를 사용하여 커스텀 컨테이너 이미지를 지정합니다(예: 'gcr.io/my-project-id/my-image:1.0.1'). 참고: Container Registry에서 커스텀 컨테이너를 호스팅해야 합니다.
    • 서브네트워크: 지정된 regiondefault 네트워크의 서브넷이 비공개 Google 액세스에서 사용 설정되지 않은 경우 다음 중 하나를 수행해야 합니다.
      1. 비공개 Google 액세스 region에 기본 네트워크의 서브넷 사용 설정
      2. ExecutionConfig.subnetworkUri 필드를 사용하여 비공개 Google 액세스가 사용 설정된 서브넷을 지정합니다. gcloud compute networks describe [NETWORK_NAME] 명령어를 실행하여 네트워크에 있는 서브넷의 URI를 나열할 수 있습니다.
    • sparkBatch.jarFileUris: 예시 jar 파일은 Spark 실행 환경에 사전 설치되어 있습니다. '1000' sparkBatch.args는 SparkPi 워크로드에 전달되고 Pi 추정 로직의 1000 반복을 지정합니다.
    • Spark properties: RuntimeConfig.properties 필드를 사용하여 Spark 배치 워크로드가 사용할 지원되는 Spark 속성을 입력합니다.
    • 기타 옵션:

    HTTP 메서드 및 URL:

    POST https://dataproc.googleapis.com/v1/projects/project-id/locations/region/batches

    JSON 요청 본문:

    {
      "sparkBatch":{
        "args":[
          "1000"
        ],
        "jarFileUris":[
          "file:///usr/lib/spark/examples/jars/spark-examples.jar"
        ],
        "mainClass":"org.apache.spark.examples.SparkPi"
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    다음과 비슷한 JSON 응답이 표시됩니다.

    {
    "name":"projects/project-id/locations/region/batches/batch-id",
      "uuid":",uuid",
      "createTime":"2021-07-22T17:03:46.393957Z",
      "sparkBatch":{
        "mainClass":"org.apache.spark.examples.SparkPi",
        "args":[
          "1000"
        ],
        "jarFileUris":[
          "file:///usr/lib/spark/examples/jars/spark-examples.jar"
        ]
      },
      "runtimeInfo":{
        "outputUri":"gs://dataproc-.../driveroutput"
      },
      "state":"SUCCEEDED",
      "stateTime":"2021-07-22T17:06:30.301789Z",
      "creator":"account-email-address",
      "runtimeConfig":{
        "properties":{
          "spark:spark.executor.instances":"2",
          "spark:spark.driver.cores":"2",
          "spark:spark.executor.cores":"2",
          "spark:spark.app.name":"projects/project-id/locations/region/batches/batch-id"
        }
      },
      "environmentConfig":{
        "peripheralsConfig":{
          "sparkHistoryServerConfig":{
          }
        }
      },
      "operation":"projects/project-id/regions/region/operation-id"
    }