O Google Distributed Cloud (GDC) com isolamento físico 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 Distributed Cloud 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 Distributed Cloud 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 Distributed Cloud para usar hardware especializado, como nós de hardware especializados ou GPUs.
Implante o serviço de contêiner do Dataproc para Spark
O administrador da plataforma (PA, na sigla em inglês) precisa instalar os serviços do Marketplace para você antes que você possa usá-los. Entre em contato com seu PA se precisar do contêiner do Dataproc para Spark. Consulte Instalar um pacote de software do GDC Marketplace para mais informações.
Pré-requisitos para executar aplicativos Spark
Você precisa ter uma conta de serviço em clusters de usuários para usar o serviço do contêiner do Dataproc para Spark. O contêiner do Dataproc para Spark cria um pod de driver do Spark para executar um aplicativo Spark. Um pod de driver do Spark precisa de uma conta de serviço do Kubernetes no namespace do pod com permissões para realizar as seguintes ações:
- Criar, receber, listar e excluir pods executores.
- Crie um serviço headless do Kubernetes para o driver.
Antes de executar um aplicativo Spark, siga estas etapas para garantir que você
tenha uma conta de serviço com as permissões anteriores no namespace foo
:
Crie uma conta de serviço para um pod de driver do Spark usar no namespace
foo
:kubectl create serviceaccount spark --kubeconfig AO_USER_KUBECONFIG --namespace=foo
Crie uma função para conceder permissões de criação, recebimento, listagem e exclusão de pods executores e crie um serviço headless do Kubernetes para o driver no namespace
foo
:kubectl create role spark-driver --kubeconfig AO_USER_KUBECONFIG --verb=* \ --resource=pods,services,configmaps,persistentvolumeclaims \ --namespace=foo
Crie uma vinculação de papel para conceder acesso ao papel da conta de serviço no namespace
foo
:kubectl create --kubeconfig AO_USER_KUBECONFIG \ rolebinding spark-spark-driver \ --role=spark-driver --serviceaccount=foo:spark \ --namespace=foo
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 Distributed Cloud. 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 na Distributed Cloud, 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 AO_USER_KUBECONFIG \ --selector app.kubernetes.io/name=spark-operator -n foo \ -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
Grave 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 usuário:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi namespace: foo 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: 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 AO_USER_KUBECONFIG get SparkApplication spark-pi -n foo
Confira os Registros do driver para ver o resultado:
kubectl --kubeconfig AO_USER_KUBECONFIG logs spark-pi-driver -n foo | 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 usuário:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: pyspark-sql-arrow namespace: foo 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: 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 AO_USER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n foo
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 usuário:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-ml namespace: foo 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: 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 AO_USER_KUBECONFIG get SparkApplication spark-ml -n foo
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 usuário:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-r-dataframe namespace: foo 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: 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 AO_USER_KUBECONFIG get SparkApplication spark-r-dataframe -n foo
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 -n spark get pods
Abra os registros do pod do driver do Spark:
kubectl -n spark logs DRIVER_POD
Substitua
DRIVER_POD
pelo nome do pod de 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.