Execute o serviço de contentor do Dataproc para o Spark

O GDC fornece um contentor do Dataproc para o Spark. Trata-se de um ambiente Apache Spark para o tratamento de dados. Para mais informações sobre o Apache Spark, consulte https://spark.apache.org/. Use contentores do Dataproc Container for Spark para executar aplicações Spark novas ou existentes num cluster Kubernetes do GDC com alterações mínimas. Se estiver familiarizado com as ferramentas do Spark, pode continuar a usá-las.

Defina a sua aplicação Spark num ficheiro YAML e o GDC atribui os recursos por si. O contentor do Dataproc para o contentor do Spark é iniciado em segundos. Os executores do Spark são dimensionados ou encerrados de acordo com as suas necessidades.

Configure contentores do Dataproc Container for Spark no GDC para usar hardware especializado, como nós de hardware especializados ou GPUs.

Pré-requisitos para executar aplicações Spark

Antes de executar uma aplicação Spark, peça ao administrador da plataforma (PA) para lhe conceder acesso à função de operador do Spark (mkt-spark-operator) no espaço de nomes mkt-system.

Execute aplicações de exemplo do Spark 3

A contentorização de aplicações Spark simplifica a execução de aplicações de grande volume de dados nas suas instalações através do GDC. Como operador de aplicações (AO), execute aplicações Spark especificadas em objetos do GKE do tipo de recurso personalizado SparkApplication.

Para executar e usar uma aplicação Apache Spark 3 no GDC, conclua os seguintes passos:

  1. Examine a spark-operator imagem no seu projeto para encontrar o $DATAPROC_IMAGE a que vai fazer referência na sua aplicação 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 exemplo:

    export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
    
  2. Escreva uma SparkApplicationespecificação e armazene-a num ficheiro YAML. Para mais informações, consulte a secção Escreva uma especificação da aplicação Spark.

  3. Envie, execute e monitorize a sua aplicação Spark conforme configurada numa SparkApplication especificação no cluster do GKE com o comando kubectl. Para mais informações, consulte a secção Exemplos de aplicação.

  4. Reveja o estado da candidatura.

  5. Opcional: reveja os registos da aplicação. Para mais informações, consulte a secção Veja os registos de uma aplicação Spark 3.

  6. Use a aplicação Spark para recolher e apresentar o estado do controlador e dos executores ao utilizador.

Escreva uma especificação da aplicação Spark

Uma especificação SparkApplication inclui os seguintes componentes:

  • O campo apiVersion.
  • O campo kind.
  • O campo metadata.
  • A secção spec.

Para mais informações, consulte o artigo Escrever uma especificação SparkApplication no GitHub: https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec

Exemplos de aplicação

Esta secção inclui os seguintes exemplos com as respetivas especificações SparkApplication para executar aplicações Spark:

Spark Pi

Esta secção contém um exemplo para executar uma aplicação Spark Pi com utilização intensiva de computação que estima 𝛑 (pi) ao atirar dardos num círculo.

Siga os passos seguintes para executar o Spark Pi:

  1. Aplique o seguinte exemplo de especificação SparkApplication no cluster de infraestrutura da organização:

    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. Verifique se o exemplo de especificação SparkApplication é executado e concluído em 1 a 2 minutos através do seguinte comando:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
    
  3. Veja os registos do condutor para ver o resultado:

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

    Um resultado é semelhante ao seguinte:

    Pi is roughly 3.1407357036785184
    

Para obter mais informações, consulte os seguintes recursos:

  • Para o código da aplicação, consulte o artigo Pi estimation da documentação do Apache Spark: https://spark.apache.org/examples.html.
  • Para ver um ficheiro YAML de exemplo do Spark Pi, consulte o artigo Escreva uma especificação da aplicação Spark.

Spark SQL

Siga os passos seguintes para executar o Spark SQL:

  1. Para executar uma aplicação Spark SQL que selecione o valor 1, use a seguinte consulta:

    select 1;
    
  2. Aplique o seguinte exemplo de especificação SparkApplication no cluster de infraestrutura da organização:

    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. Valide se o exemplo de especificação SparkApplication é executado e concluído em menos de um minuto através do seguinte comando:

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

Spark MLlib

Siga os passos abaixo para executar o Spark MLlib:

  1. Use o exemplo de Scala seguinte para executar uma instância do Spark MLlib que realiza análise estatística e imprime um resultado na 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. Aplique o seguinte exemplo de especificação SparkApplication no cluster de infraestrutura da organização:

    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. Valide se o exemplo de especificação SparkApplication é executado e concluído em menos de um minuto através do seguinte comando:

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

SparkR

Siga os passos seguintes para executar o SparkR:

  1. Use o seguinte exemplo de código para executar uma instância do SparkR que carrega um conjunto de dados incluído e imprime a primeira linha:

    library(SparkR)
    sparkR.session()
    df <- as.DataFrame(faithful)
    head(df)
    
  2. Aplique o seguinte exemplo de especificação SparkApplication no cluster de infraestrutura da organização:

    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. Valide se o exemplo de especificação SparkApplication é executado e concluído em menos de um minuto através do seguinte comando:

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

Veja os registos de uma aplicação Spark 3

O Spark tem os dois seguintes tipos de registos que pode visualizar:

Use o terminal para executar comandos.

Registos do condutor

Siga os passos seguintes para ver os registos do controlador da sua aplicação Spark:

  1. Encontre o pod do controlador do Spark:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
    
  2. Abra os registos do pod do controlador do Spark:

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

    Substitua DRIVER_POD pelo nome do pod do controlador do Spark que encontrou no passo anterior.

Registos de eventos

Pode encontrar os registos de eventos no caminho especificado no ficheiro YAML da especificação SparkApplication.

Siga os passos seguintes para ver os registos de eventos da sua aplicação Spark:

  1. Abra o ficheiro YAML da SparkApplicationespecificação.
  2. Localize o campo spec no ficheiro.
  3. Localize o campo sparkConf aninhado no campo spec.
  4. Localize o valor do campo spark.eventLog.dir aninhado na secção sparkConf.
  5. Abra o caminho para ver os registos de eventos.

Para ver um ficheiro YAML de exemplo da especificação SparkApplication, consulte o artigo Escreva uma especificação da aplicação Spark.

Contacte o seu gestor de conta para obter mais informações.