Este documento mostra como criar um cluster virtual do Serviço Gerenciado para Apache Spark no GKE, e executar um job do Spark no cluster.
Visão geral das opções
Embora o Serviço Gerenciado para Apache Spark no GKE ofereça um controle avançado para ambientes em contêineres, Google Cloud ele também oferece opções totalmente gerenciadas e sem servidor que podem simplificar as operações e acelerar o desenvolvimento. Para uma comparação das opções de implantação do Spark Serviço Gerenciado para Apache Spark, consulte Decidir sobre o melhor serviço do Spark.
Antes de começar
- Faça login na sua Google Cloud conta do. Se você não conhece o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em cenários reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init Você precisa ter criado um cluster padrão (não do Autopilot) do Google Kubernetes Engine (GKE) zonal ou regional com a Identidade da carga de trabalho ativada no cluster.
Funções exigidas
Alguns papéis do IAM são necessários para executar os exemplos nesta página. Dependendo das políticas da organização, esses papéis já podem ter sido concedidos. Para verificar as concessões de papéis, consulte Você precisa conceder papéis?.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Papéis do usuário
Para receber as permissões necessárias para criar um cluster do Serviço Gerenciado para Apache Spark, peça ao administrador para conceder a você os seguintes papéis do IAM:
- Editor do Dataproc (
roles/dataproc.editor) no projeto - Usuário da conta de serviço (
roles/iam.serviceAccountUser) na conta de serviço padrão do Compute Engine
Papel de conta de serviço
Para garantir que a conta de serviço padrão do Compute Engine tenha as permissões necessárias para criar um cluster do Serviço Gerenciado para Apache Spark, peça ao administrador para conceder o papel do IAM de Worker do Dataproc (roles/dataproc.worker) à conta de serviço padrão do Compute Engine no projeto.
Criar um cluster virtual
Um cluster virtual do Serviço Gerenciado para Apache Spark no GKE é criado como a plataforma de implantação dos componentes do Serviço Gerenciado para Apache Spark. É um recurso virtual e, ao contrário de um cluster do Serviço Gerenciado para Apache Spark no Compute Engine, não inclui VMs mestre e de worker separadas do Serviço Gerenciado para Apache Spark.
O Serviço Gerenciado para Apache Spark no GKE cria pools de nós em um cluster do GKE quando você cria um cluster virtual do Serviço Gerenciado para Apache Spark no GKE.
Os jobs do Serviço Gerenciado para Apache Spark no GKE são executados como pods nesses pools de nós. Os pools de nós e o agendamento de pods nos pools de nós são gerenciados pelo GKE.
Criar vários clusters virtuais. É possível criar e executar vários clusters virtuais em um cluster do GKE para melhorar a utilização de recursos compartilhando pools de nós entre os clusters virtuais.
- Cada cluster virtual:
- é criado com propriedades separadas, incluindo a versão do mecanismo do Spark e a identidade da carga de trabalho
- é isolado em um namespace do GKE separado no cluster do GKE
- Cada cluster virtual:
Console
A criação de um cluster do Serviço Gerenciado para Apache Spark no GKE não é compatível com o Google Cloud console.
gcloud
Defina variáveis de ambiente e execute o
gcloud dataproc clusters gke create
comando localmente ou no Cloud Shell para criar um cluster do Serviço Gerenciado para Apache Spark no GKE.
Defina as variáveis de ambiente:
Observações:DP_CLUSTER=Managed Service for Apache Spark on GKE cluster-name \ REGION=region \ GKE_CLUSTER=GKE cluster-name \ BUCKET=Cloud Storage bucket-name \ DP_POOLNAME=node pool-name PHS_CLUSTER=Managed Service for Apache Spark PHS server name
DP_CLUSTER: defina o nome do cluster virtual do Serviço Gerenciado para Apache Spark, que precisa começar com uma letra minúscula, seguida de até 54 letras minúsculas, números ou hifens. Ele e não podem terminar com um hífen.REGION: a region precisa ser a mesma em que o cluster do GKE está localizado.GKE_CLUSTER: o nome do cluster do GKE.BUCKET: (opcional) é possível especificar o nome de um bucket do Cloud Storage, que o Serviço Gerenciado para Apache Spark usará para preparar artefatos. Se você não especificar um bucket, o Serviço Gerenciado para Apache Spark no GKE vai criar um bucket de preparo.DP_POOLNAME: o nome de um pool de nós a ser criado no cluster do GKE.PHS_CLUSTER: (opcional) o servidor PHS do Serviço Gerenciado para Apache Spark a ser usado para visualizar o histórico de jobs do Spark em clusters ativos e excluídos do Serviço Gerenciado para Apache Spark no GKE. O cluster PHS precisa estar localizado na mesma região que o cluster virtual do Serviço Gerenciado para Apache Spark no GKE.
Execute o comando:
Observações:gcloud dataproc clusters gke create ${DP_CLUSTER} \ --region=${REGION} \ --gke-cluster=${GKE_CLUSTER} \ --spark-engine-version=latest \ --staging-bucket=${BUCKET} \ --pools="name=${DP_POOLNAME},roles=default" \ --setup-workload-identity \ --history-server-cluster=${PHS_CLUSTER}--spark-engine-version: a versão da imagem do Spark usada no cluster do Serviço Gerenciado para Apache Spark. É possível usar um identificador, como3,3.1oulatest, ou especificar a versão submenor completa, como3.1-dataproc-5.--staging-bucket: exclua essa flag para que o Serviço Gerenciado para Apache Spark no GKE crie um bucket de preparo.--pools: essa flag é usada para especificar um pool de nós novo ou atual que o Serviço Gerenciado para Apache Spark vai criar ou usar para realizar a carga de trabalho. Liste as configurações do pool de nós do Serviço Gerenciado para Apache Spark no GKE, separadas por vírgulas, por exemplo: É necessário especificar o--pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
namee oroledo pool de nós. Outras configurações do pool de nós são opcionais. É possível usar várias flags--poolspara especificar vários pools de nós. Pelo menos um pool de nós precisa ter o papeldefault. Todos os pools de nós precisam ter o mesmo local.--setup-workload-identity: essa flag ativa as vinculações da Identidade da carga de trabalho. Essas vinculações permitem que as contas de serviço do Kubernetes (KSAs) atuem como a conta de serviço padrão da VM do Serviço Gerenciado para Apache Spark (identidade do plano de dados) do cluster virtual.
REST
Conclua um
virtualClusterConfig
como parte de uma solicitação de API
cluster.create.
Antes de usar os dados da solicitação abaixo, faça estas substituições:
- PROJECT: ID do projeto do Google Cloud
- REGION: região do cluster virtual do Dataproc (a mesma região do cluster do GKE)
- DP_CLUSTER: nome do cluster do Dataproc
- GKE_CLUSTER: nome do cluster do GKE
- NODE_POOL: nome do pool de nós
- PHS_CLUSTER: nome do cluster do servidor de histórico persistente (PHS)
- BUCKET: (opcional) nome do bucket de preparo. Deixe esse campo vazio para que o Serviço Gerenciado para Apache Spark no GKE crie um bucket de preparo.
Método HTTP e URL:
POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters
Corpo JSON da solicitação:
{
"clusterName":"DP_CLUSTER",
"projectId":"PROJECT",
"virtualClusterConfig":{
"auxiliaryServicesConfig":{
"sparkHistoryServerConfig":{
"dataprocCluster":"projects/PROJECT/regions/REGION/clusters/PHS_CLUSTER"
}
},
"kubernetesClusterConfig":{
"gkeClusterConfig":{
"gkeClusterTarget":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER",
"nodePoolTarget":[
{
"nodePool":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER/nodePools/NODE_POOL",
"roles":[
"DEFAULT"
]
}
]
},
"kubernetesSoftwareConfig":{
"componentVersion":{
"SPARK":"latest"
}
}
},
"stagingBucket":"BUCKET"
}
}
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{
"projectId":"PROJECT",
"clusterName":"DP_CLUSTER",
"status":{
"state":"RUNNING",
"stateStartTime":"2022-04-01T19:16:39.865716Z"
},
"clusterUuid":"98060b77-...",
"statusHistory":[
{
"state":"CREATING",
"stateStartTime":"2022-04-01T19:14:27.340544Z"
}
],
"labels":{
"goog-dataproc-cluster-name":"DP_CLUSTER",
"goog-dataproc-cluster-uuid":"98060b77-...",
"goog-dataproc-location":"REGION",
"goog-dataproc-environment":"prod"
},
"virtualClusterConfig":{
"stagingBucket":"BUCKET",
"kubernetesClusterConfig":{
"kubernetesNamespace":"dp-cluster",
"gkeClusterConfig":{
"gkeClusterTarget":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER",
"nodePoolTarget":[
{
"nodePool":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER/nodePools/NODE_POOL",
"roles":[
"DEFAULT"
]
}
]
},
"kubernetesSoftwareConfig":{
"componentVersion":{
"SPARK":"3.1-..."
},
"properties":{
"dpgke:dpgke.unstable.outputOnly.endpoints.sparkHistoryServer":"https://...",
"spark:spark.eventLog.dir":"gs://BUCKET/.../spark-job-history",
"spark:spark.eventLog.enabled":"true"
}
}
},
"auxiliaryServicesConfig":{
"sparkHistoryServerConfig":{
"dataprocCluster":"projects/PROJECT/regions/REGION/clusters/PHS_CLUSTER"
}
}
}
Enviar um job do Spark
Depois que o cluster virtual do Serviço Gerenciado para Apache Spark no GKE estiver em execução,
envie um job do Spark
usando o Google Cloud console,
a CLI gcloud ou a
API
jobs.submit
do Serviço Gerenciado para Apache Spark (usando solicitações HTTP diretas ou as
bibliotecas de cliente do Cloud).
**Exemplo de job do Spark da CLI gcloud:**
gcloud dataproc jobs submit spark \
--region=${REGION} \
--cluster=${DP_CLUSTER} \
--class=org.apache.spark.examples.SparkPi \
--jars=local:///usr/lib/spark/examples/jars/spark-examples.jar \
-- 1000
**Exemplo de job do PySpark da CLI gcloud:**
gcloud dataproc jobs submit pyspark \
--region=${REGION} \
--cluster=${DP_CLUSTER} \
local:///usr/lib/spark/examples/src/main/python/pi.py \
-- 10
**Exemplo de job do SparkR da CLI gcloud:**
gcloud dataproc jobs submit spark-r \
--region=${REGION} \
--cluster=${DP_CLUSTER} \
local:///usr/lib/spark/examples/src/main/r/dataframe.R
Limpar
Exclua qualquer um dos recursos a seguir usados neste guia de início rápido que você não quer continuar usando.
Exclua o cluster do Serviço Gerenciado para Apache Spark no GKE.
Exclua os pools de nós usados pelo cluster do Serviço Gerenciado para Apache Spark no GKE.