Ejecuta el servicio del contenedor de Dataproc para Spark

GDC proporciona un contenedor de Dataproc para Spark. Se trata de un entorno de Apache Spark para el procesamiento de datos. Para obtener más información sobre Apache Spark, consulta https://spark.apache.org/. Usa contenedores de Dataproc Container for Spark para ejecutar aplicaciones de Spark nuevas o existentes en un clúster de Kubernetes de GDC con una alteración mínima. Si conoces las herramientas de Spark, puedes seguir usándolas.

Define tu aplicación de Spark en un archivo YAML y GDC asignará los recursos por ti. El contenedor de Dataproc para Spark se inicia en segundos. Los ejecutores de Spark se escalan verticalmente o se apagan según tus necesidades.

Configura contenedores de Dataproc Container for Spark en GDC para usar hardware especializado, como nodos de hardware especializados o GPU.

Requisitos previos para ejecutar aplicaciones de Spark

Antes de ejecutar una aplicación de Spark, pídele a tu administrador de la plataforma (PA) que te otorgue acceso al rol de operador de Spark (mkt-spark-operator) en el espacio de nombres mkt-system.

Ejecuta aplicaciones de muestra de Spark 3

El uso de contenedores en las aplicaciones de Spark simplifica la ejecución de aplicaciones de macrodatos en tus instalaciones con GDC. Como operador de aplicaciones (AO), ejecuta aplicaciones de Spark especificadas en objetos de GKE del tipo de recurso personalizado SparkApplication.

Para ejecutar y usar una aplicación de Apache Spark 3 en GDC, completa los siguientes pasos:

  1. Examina la imagen spark-operator en tu proyecto para encontrar el $DATAPROC_IMAGE al que se hace referencia en tu aplicación de Spark:

    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/')
    

    Por ejemplo:

    export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
    
  2. Escribe una especificación SparkApplication y almacénala en un archivo YAML. Para obtener más información, consulta la sección Escribe una especificación de la aplicación de Spark.

  3. Envía, ejecuta y supervisa tu aplicación de Spark según se configuró en una especificación de SparkApplication en el clúster de GKE con el comando kubectl. Para obtener más información, consulta la sección Ejemplos de aplicación.

  4. Revisa el estado de la solicitud.

  5. Opcional: Revisa los registros de la aplicación. Para obtener más información, consulta la sección Cómo ver los registros de una aplicación de Spark 3.

  6. Usa la aplicación de Spark para recopilar y mostrar el estado del controlador y los ejecutores al usuario.

Escribe una especificación de aplicación de Spark

Una especificación de SparkApplication incluye los siguientes componentes:

  • El campo apiVersion
  • El campo kind
  • El campo metadata
  • La sección spec.

Para obtener más información, consulta Cómo escribir una especificación de SparkApplication en GitHub: https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec

Ejemplos de aplicación

En esta sección, se incluyen los siguientes ejemplos con sus especificaciones de SparkApplication correspondientes para ejecutar aplicaciones de Spark:

Spark Pi

En esta sección, se incluye un ejemplo para ejecutar una aplicación de Spark Pi que requiere mucha capacidad de procesamiento y que estima 𝛑 (pi) lanzando dardos en un círculo.

Sigue estos pasos para ejecutar Spark Pi:

  1. Aplica el siguiente ejemplo de especificación SparkApplication en el clúster de infraestructura de la organización:

    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. Verifica que el ejemplo de especificación de SparkApplication se ejecute y complete en 1 o 2 minutos con el siguiente comando:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
    
  3. Consulta los Registros del controlador para ver el resultado:

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

    El resultado es similar al siguiente:

    Pi is roughly 3.1407357036785184
    

Para obtener más información, consulta los siguientes recursos:

  • Para ver el código de la aplicación, consulta el artículo Estimación de Pi de la documentación de Apache Spark: https://spark.apache.org/examples.html.
  • Para ver un ejemplo de un archivo YAML de Spark Pi, consulta Escribe una especificación de aplicación de Spark.

Spark SQL

Sigue estos pasos para ejecutar Spark SQL:

  1. Para ejecutar una aplicación de Spark SQL que selecciona el valor de 1, usa la siguiente consulta:

    select 1;
    
  2. Aplica el siguiente ejemplo de especificación SparkApplication en el clúster de infraestructura de la organización:

    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. Verifica que el ejemplo de especificación de SparkApplication se ejecute y complete en menos de un minuto con el siguiente comando:

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

Spark MLlib

Sigue estos pasos para ejecutar Spark MLlib:

  1. Usa el siguiente ejemplo de Scala para ejecutar una instancia de MLlib de Spark que realice un análisis estadístico y muestre un resultado en la consola:

    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. Aplica el siguiente ejemplo de especificación SparkApplication en el clúster de infraestructura de la organización:

    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. Verifica que el ejemplo de especificación de SparkApplication se ejecute y complete en menos de un minuto con el siguiente comando:

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

SparkR

Sigue estos pasos para ejecutar SparkR:

  1. Usa el siguiente código de ejemplo para ejecutar una instancia de SparkR que cargue un conjunto de datos incluido y que imprima la primera línea:

    library(SparkR)
    sparkR.session()
    df <- as.DataFrame(faithful)
    head(df)
    
  2. Aplica el siguiente ejemplo de especificación SparkApplication en el clúster de infraestructura de la organización:

    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. Verifica que el ejemplo de especificación de SparkApplication se ejecute y complete en menos de un minuto con el siguiente comando:

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

Visualiza los registros de una aplicación de Spark 3

Spark tiene los siguientes dos tipos de registros que puedes visualizar:

Usa la terminal para ejecutar comandos.

Registros del conductor

Sigue estos pasos para ver los registros del controlador de tu aplicación de Spark:

  1. Busca el pod del controlador de Spark:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
    
  2. Abre los registros del pod del controlador de Spark:

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

    Reemplaza DRIVER_POD por el nombre del Pod del controlador de Spark que encontraste en el paso anterior.

Registros de eventos

Puedes encontrar los registros de eventos en la ruta de acceso especificada en el archivo YAML de la especificación SparkApplication.

Sigue estos pasos para ver los registros de eventos de tu aplicación de Spark:

  1. Abre el archivo YAML de la especificación SparkApplication.
  2. Ubica el campo spec en el archivo.
  3. Busca el campo sparkConf anidado en el campo spec.
  4. Ubica el valor del campo spark.eventLog.dir anidado en la sección sparkConf.
  5. Abre la ruta para ver los registros de eventos.

Para ver un ejemplo de archivo YAML de la especificación SparkApplication, consulta Escribe una especificación de aplicación de Spark.

Para obtener más información, comunícate con tu administrador de cuentas.