Spark용 Dataproc 컨테이너 서비스 실행

GDC는 Spark용 Dataproc 컨테이너를 제공합니다. 데이터 처리를 위한 Apache Spark 환경입니다. Apache Spark에 대한 자세한 내용은 https://spark.apache.org/를 참고하세요. Spark용 Dataproc Container의 컨테이너를 사용하여 최소한의 변경으로 GDC Kubernetes 클러스터 내에서 신규 또는 기존 Spark 애플리케이션을 실행합니다. Spark 도구에 익숙하다면 계속 사용해도 됩니다.

YAML 파일에 Spark 애플리케이션을 정의하면 GDC에서 리소스를 할당합니다. Spark용 Dataproc 컨테이너가 몇 초 만에 시작됩니다. Spark 실행기는 필요에 따라 확장되거나 종료됩니다.

GDC의 Spark용 Dataproc 컨테이너에서 특수 하드웨어(예: 특수 하드웨어 노드 또는 GPU)를 사용하도록 컨테이너를 구성합니다.

Spark 애플리케이션 실행을 위한 기본 요건

Spark 애플리케이션을 실행하기 전에 플랫폼 관리자 (PA)에게 mkt-system 네임스페이스의 Spark Operator (mkt-spark-operator) 역할에 대한 액세스 권한을 부여해 달라고 요청하세요.

샘플 Spark 3 애플리케이션 실행

Spark 애플리케이션을 컨테이너화하면 GDC를 사용하여 온프레미스에서 빅데이터 애플리케이션을 간편하게 실행할 수 있습니다. 애플리케이션 운영자(AO)로서 SparkApplication 커스텀 리소스 유형의 GKE 객체에 지정된 Spark 애플리케이션을 실행합니다.

GDC에서 Apache Spark 3 애플리케이션을 실행하고 사용하려면 다음 단계를 완료하세요.

  1. 프로젝트에서 spark-operator 이미지를 검사하여 Spark 애플리케이션에서 참조할 $DATAPROC_IMAGE를 찾습니다.

    export DATAPROC_IMAGE=$(kubectl get pod --kubeconfig INFRA_CLUSTER_KUBECONFIG \
    --selector app.kubernetes.io/name=spark-operator -n mkt-system \
    -o=jsonpath='{.items[*].spec.containers[0].image}' \
    | sed 's/spark-operator/dataproc/')
    

    예를 들면 다음과 같습니다.

    export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
    
  2. SparkApplication 사양을 작성하고 YAML 파일에 저장합니다. 자세한 내용은 Spark 애플리케이션 사양 작성 섹션을 참고하세요.

  3. kubectl 명령어를 사용하여 GKE 클러스터에서 SparkApplication 사양에 구성된 대로 Spark 애플리케이션을 제출, 실행, 모니터링합니다. 자세한 내용은 애플리케이션 예 섹션을 참고하세요.

  4. 애플리케이션 상태를 검토합니다.

  5. 선택사항: 애플리케이션 로그를 검토합니다. 자세한 내용은 Spark 3 애플리케이션의 로그 보기 섹션을 참고하세요.

  6. Spark 애플리케이션을 사용하여 드라이버와 실행자의 상태를 수집하고 사용자에게 표시합니다.

Spark 애플리케이션 사양 작성

SparkApplication 사양에는 다음 구성요소가 포함됩니다.

  • apiVersion 필드
  • kind 필드
  • metadata 필드
  • spec 섹션.

자세한 내용은 GitHub의 SparkApplication 사양 작성을 참고하세요. https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec

애플리케이션 예

이 섹션에는 Spark 애플리케이션을 실행하기 위한 해당 SparkApplication 사양과 함께 다음 예가 포함되어 있습니다.

Spark Pi

이 섹션에는 원에 다트를 던져 𝛑 (pi)를 추정하는 컴퓨팅 집약적인 Spark Pi 애플리케이션을 실행하는 예가 포함되어 있습니다.

다음 단계를 따라 Spark Pi를 실행하세요.

  1. 조직 인프라 클러스터에 다음 SparkApplication 사양 예시를 적용합니다.

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-pi
      namespace: mkt-system
    spec:
      type: Python
      pythonVersion: "3"
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: IfNotPresent
      mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/pi.py"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: dataproc-addon-spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  2. 다음 명령어를 사용하여 SparkApplication 사양 예시가 1~2분 내에 실행되고 완료되는지 확인합니다.

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
    
  3. 드라이버 로그를 확인하여 결과를 확인합니다.

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs spark-pi-driver -n mkt-system | grep "Pi is roughly"
    

    출력은 다음과 비슷합니다.

    Pi is roughly 3.1407357036785184
    

자세한 내용은 다음 리소스를 참조하세요.

  • 애플리케이션 코드의 경우 Apache Spark 문서의 Pi estimation(https://spark.apache.org/examples.html)을 참고하세요.
  • 샘플 Spark Pi YAML 파일은 Spark 애플리케이션 사양 작성을 참고하세요.

Spark SQL

다음 단계를 따라 Spark SQL을 실행하세요.

  1. 1 값을 선택하는 Spark SQL 애플리케이션을 실행하려면 다음 쿼리를 사용하세요.

    select 1;
    
  2. 조직 인프라 클러스터에 다음 SparkApplication 사양 예시를 적용합니다.

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: pyspark-sql-arrow
      namespace: mkt-system
    spec:
      type: Python
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: IfNotPresent
      mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/sql/arrow.py"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: dataproc-addon-spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  3. 다음 명령어를 사용하여 SparkApplication 사양 예시가 1분 이내에 실행되고 완료되는지 확인합니다.

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n mkt-system
    

Spark MLlib

다음 단계를 따라 Spark MLlib을 실행하세요.

  1. 다음 Scala 예시를 사용하여 통계 분석을 실행하고 결과를 콘솔에 출력하는 Spark MLlib 인스턴스를 실행합니다.

    import org.apache.spark.ml.linalg.{Matrix, Vectors}
    import org.apache.spark.ml.stat.Correlation
    import org.apache.spark.sql.Row
    
    val data = Seq(
      Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),
      Vectors.dense(4.0, 5.0, 0.0, 3.0),
      Vectors.dense(6.0, 7.0, 0.0, 8.0),
      Vectors.sparse(4, Seq((0, 9.0), (3, 1.0)))
    )
    
    val df = data.map(Tuple1.apply).toDF("features")
    val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
    println(s"Pearson correlation matrix:\n $coeff1")
    
    val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
    println(s"Spearman correlation matrix:\n $coeff2")
    
  2. 조직 인프라 클러스터에 다음 SparkApplication 사양 예시를 적용합니다.

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-ml
      namespace: mkt-system
    spec:
      type: Scala
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: IfNotPresent
      mainClass: org.apache.spark.examples.ml.SummarizerExample
      mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples_2.12-3.1.3.jar"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: dataproc-addon-spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  3. 다음 명령어를 사용하여 SparkApplication 사양 예시가 1분 이내에 실행되고 완료되는지 확인합니다.

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-ml -n mkt-system
    

SparkR

다음 단계를 따라 SparkR을 실행하세요.

  1. 다음 예시 코드를 사용하여 번들로 제공되는 데이터 세트를 로드하고 첫 번째 줄을 출력하는 SparkR 인스턴스를 실행합니다.

    library(SparkR)
    sparkR.session()
    df <- as.DataFrame(faithful)
    head(df)
    
  2. 조직 인프라 클러스터에 다음 SparkApplication 사양 예시를 적용합니다.

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-r-dataframe
      namespace: mkt-system
    spec:
      type: R
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: Always
      mainApplicationFile: "local:///usr/lib/spark/examples/src/main/r/dataframe.R"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: dataproc-addon-spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  3. 다음 명령어를 사용하여 SparkApplication 사양 예시가 1분 이내에 실행되고 완료되는지 확인합니다.

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-r-dataframe -n mkt-system
    

Spark 3 애플리케이션의 로그 보기

Spark에는 시각화할 수 있는 다음 두 가지 로그 유형이 있습니다.

터미널을 사용하여 명령어를 실행합니다.

드라이버 로그

다음 단계를 따라 Spark 애플리케이션의 드라이버 로그를 확인하세요.

  1. Spark 드라이버 포드를 찾습니다.

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
    
  2. Spark 드라이버 포드의 로그를 엽니다.

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs DRIVER_POD -n mkt-system
    

    DRIVER_POD을 이전 단계에서 찾은 Spark 드라이버 포드의 이름으로 바꿉니다.

이벤트 로그

SparkApplication 사양의 YAML 파일에 지정된 경로에서 이벤트 로그를 확인할 수 있습니다.

다음 단계를 따라 Spark 애플리케이션의 이벤트 로그를 확인하세요.

  1. SparkApplication 사양의 YAML 파일을 엽니다.
  2. 파일에서 spec 필드를 찾습니다.
  3. spec 필드에 중첩된 sparkConf 필드를 찾습니다.
  4. sparkConf 섹션에 중첩된 spark.eventLog.dir 필드의 값을 찾습니다.
  5. 경로를 열어 이벤트 로그를 확인합니다.

SparkApplication 사양의 샘플 YAML 파일을 보려면 Spark 애플리케이션 사양 작성을 참고하세요.

자세한 내용은 계정 관리자에게 문의하세요.