O GDC oferece um contêiner do Dataproc para Spark. Esse é um ambiente do Apache Spark para processamento de dados. Para mais informações sobre o Apache
Spark, consulte https://spark.apache.org/
. Use contêineres do Dataproc Container para Spark para
executar aplicativos Spark novos ou atuais em um cluster
do Kubernetes do GDC com alterações mínimas. Se você já conhece as ferramentas do Spark, pode continuar usando.
Defina seu aplicativo Spark em um arquivo YAML, e o GDC aloca os recursos para você. O contêiner do Dataproc para Spark é iniciado em segundos. Os executores do Spark escalonar verticalmente ou desligados de acordo com suas necessidades.
Configure contêineres do Dataproc Container para Spark no GDC para usar hardware especializado, como nós de hardware especializados ou GPUs.
Pré-requisitos para executar aplicativos Spark
Antes de executar um aplicativo Spark, peça ao administrador da plataforma (PA) para
conceder acesso à função de operador do Spark (mkt-spark-operator
) no
namespace mkt-system
.
Executar aplicativos de exemplo do Spark 3
A contêinerização de aplicativos Spark simplifica a execução de aplicativos de Big Data nas suas instalações usando o GDC. Como um operador de aplicativos (AO), execute aplicativos do Spark especificados em objetos do GKE do tipo de recurso personalizado SparkApplication
.
Para executar e usar um aplicativo do Apache Spark 3 no GDC, siga estas etapas:
Examine a imagem
spark-operator
no projeto para encontrar o$DATAPROC_IMAGE
a ser referenciado no aplicativo 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/')
Exemplo:
export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
Escreva uma especificação
SparkApplication
e armazene-a em um arquivo YAML. Para mais informações, consulte a seção Escrever uma especificação de aplicativo Spark.Envie, execute e monitore seu aplicativo Spark conforme configurado em uma especificação
SparkApplication
no cluster do GKE com o comandokubectl
. Para mais informações, consulte a seção Exemplos de aplicativos.Analise o status da inscrição.
Opcional: revise os registros do aplicativo. Para mais informações, consulte a seção Ver os registros de um aplicativo do Spark 3.
Use o aplicativo Spark para coletar e mostrar o status do driver e dos executores ao usuário.
Escrever uma especificação de aplicativo do Spark
Uma especificação SparkApplication
inclui os seguintes componentes:
- O campo
apiVersion
. - O campo
kind
. - O campo
metadata
. - Seção
spec
.
Para mais informações, consulte o Writing a SparkApplication Spec no GitHub: https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec
Exemplos de aplicação
Esta seção inclui os seguintes exemplos com as especificações SparkApplication
correspondentes para executar aplicativos Spark:
Spark Pi
Esta seção contém um exemplo para executar um aplicativo Spark Pi com uso intenso de computação que estima 𝛑 (pi) jogando dardos em um círculo.
Siga estas etapas para executar o Spark Pi:
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"
Verifique se o exemplo de especificação
SparkApplication
é executado e concluído em 1 a 2 minutos usando o seguinte comando:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
Confira os Registros do driver para ver o resultado:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs spark-pi-driver -n mkt-system | grep "Pi is roughly"
Uma saída é semelhante a esta:
Pi is roughly 3.1407357036785184
Para saber mais, acesse os recursos a seguir:
- Para o código do aplicativo, consulte o artigo
Estimativa de Pi na documentação do Apache Spark:
https://spark.apache.org/examples.html
. - Para um exemplo de arquivo YAML do Spark Pi, consulte Escrever uma especificação de aplicativo Spark.
Spark SQL
Siga estas etapas para executar o Spark SQL:
Para executar um aplicativo Spark SQL que seleciona o valor
1
, use a seguinte consulta:select 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: 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"
Verifique se o exemplo de especificação
SparkApplication
é executado e concluído em menos de um minuto usando o seguinte comando:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n mkt-system
Spark MLlib
Siga estas etapas para executar o Spark MLlib:
Use o exemplo em Scala a seguir para executar uma instância do Spark MLlib que realiza análise estatística e imprime um resultado no console:
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")
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"
Verifique se o exemplo de especificação
SparkApplication
é executado e concluído em menos de um minuto usando o seguinte comando:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-ml -n mkt-system
SparkR
Siga estas etapas para executar o SparkR:
Use o exemplo de código a seguir para executar uma instância do SparkR que carrega um conjunto de dados agrupado e imprime a primeira linha:
library(SparkR) sparkR.session() df <- as.DataFrame(faithful) head(df)
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"
Verifique se o exemplo de especificação
SparkApplication
é executado e concluído em menos de um minuto usando o seguinte comando:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-r-dataframe -n mkt-system
Acessar os registros de um aplicativo do Spark 3
O Spark tem os dois tipos de registros a seguir que podem ser visualizados:
Use o terminal para executar comandos.
Registros do motorista
Siga estas etapas para ver os registros de driver do seu aplicativo Spark:
Encontre o pod do driver do Spark:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
Abra os registros do pod do driver do Spark:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs DRIVER_POD -n mkt-system
Substitua
DRIVER_POD
pelo nome do pod do driver do Spark que você encontrou na etapa anterior.
Logs de eventos
Os registros de eventos podem ser encontrados no caminho especificado no arquivo YAML da especificação
SparkApplication
.
Siga estas etapas para conferir os registros de eventos do seu aplicativo Spark:
- Abra o arquivo YAML da especificação
SparkApplication
. - Localize o campo
spec
no arquivo. - Localize o campo
sparkConf
aninhado no campospec
. - Localize o valor do campo
spark.eventLog.dir
aninhado na seçãosparkConf
. - Abra o caminho para ver os registros de eventos.
Para ver um exemplo de arquivo YAML da especificação SparkApplication
, consulte
Escrever uma especificação de aplicativo Spark.
Entre em contato com seu gerente de contas para mais informações.