Executar um job do Spark no Google Kubernetes Engine

Este documento mostra como criar um cluster virtual do Managed Service for Apache Spark no GKE, e executar um job do Spark no cluster.

Visão geral das opções

Embora o Managed Service for 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 Managed Service for Apache Spark, consulte Decidir sobre o melhor serviço do Spark.

Antes de começar

  1. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that you have the permissions required to complete this guide.

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. Instale a Google Cloud CLI.

  7. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  8. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  9. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that you have the permissions required to complete this guide.

  11. Verify that billing is enabled for your Google Cloud project.

  12. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  13. Instale a Google Cloud CLI.

  14. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  15. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  16. 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 Managed Service for Apache Spark, peça ao administrador para conceder a você os seguintes papéis do IAM:

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 Managed Service for 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 Managed Service for Apache Spark no GKE é criado como a plataforma de implantação dos componentes do Managed Service for Apache Spark. É um recurso virtual e, ao contrário de um cluster do Managed Service for Apache Spark no Compute Engine, não inclui VMs mestre e de worker separadas do Managed Service for Apache Spark.

  • O Managed Service for Apache Spark no GKE cria pools de nós em um cluster do GKE quando você cria um cluster virtual do Managed Service for Apache Spark no GKE.

  • Os jobs do Managed Service for 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

Console

  1. Noconsola, acesse a página Clusters do Managed Service for Apache Spark Google Cloud .

    Acessar Clusters

  2. Clique em Criar cluster.

  3. Na caixa de diálogo Criar cluster do Managed Service for Apache Spark, clique em Criar na linha Cluster no GKE.

  4. No painel Configurar cluster:

    1. No campo Nome do cluster, insira um nome para o cluster.
    2. Na lista Região, selecione uma região para o cluster virtual do Managed Service for Apache Spark no GKE. Essa região precisa ser a mesma em que o cluster do GKE está localizado (que você seleciona no próximo item).
    3. No campo Cluster do Kubernetes, clique em Procurar para selecionar a região em que o cluster do GKE está localizado.
    4. Opcional: no campo Bucket de preparo do Cloud Storage, clique em Procurar para selecionar um bucket do Cloud Storage. O Managed Service for Apache Spark no GKE vai preparar artefatos no bucket. Ignore esse campo para que o Managed Service for Apache Spark no GKE crie um bucket de preparo.
  5. No painel à esquerda, clique em Configurar pools de nós e, no painel Pools de nós, clique em Adicionar um pool.

    1. Para reutilizar um pool de nós do Managed Service for Apache Spark no GKE:
      1. Clique em Reutilizar o pool de nós atual.
      2. Insira o nome do pool de nós atual e selecione o papel dele. Pelo menos um pool de nós precisa ter o papel DEFAULT.
      3. Clique em Concluído.
    2. Para criar um novo pool de nós do Managed Service for Apache Spark no GKE:
      1. Clique em Criar um novo pool de nós.
      2. Insira os seguintes valores do pool de nós:
        • Nome do pool de nós
        • Papel: pelo menos um pool de nós precisa ter o papel DEFAULT.
        • Local: especifique uma zona na região do cluster do Managed Service for Apache Spark no GKE.
        • Pool de nós tipo de máquina
        • Plataforma de CPU
        • Preempção
        • Mín: número mínimo de nós.
        • Máx: número máximo de nós. O número máximo de nós precisa ser maior que 0.
    3. Clique em Adicionar um pool para adicionar mais pools de nós. Todos os pools de nós precisam ter o local. É possível adicionar um total de quatro pools de nós.
  6. (Opcional) Se você tiver configurado um servidor de histórico permanente (PHS) do Managed Service for Apache Spark para visualizar o histórico de jobs do Spark em clusters ativos e excluídos do Managed Service for Apache Spark no GKE , clique em Personalizar cluster. Em seguida, no campo Cluster do servidor de histórico , procure e escolha o cluster do PHS. O cluster do PHS precisa estar localizado na mesma região que o cluster virtual do Managed Service for Apache Spark no GKE.

  7. Clique em Criar para criar o cluster do Managed Service for Apache Spark. O cluster do Managed Service for Apache Spark no GKE aparece em uma lista na página Clusters. O status dele é Provisionamento até que o cluster esteja pronto para uso, e depois o status muda para Em execução.

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 Managed Service for Apache Spark no GKE.

  1. Defina as variáveis de ambiente:

    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
    
    Observações:

    • DP_CLUSTER: defina o nome do cluster virtual do Managed Service for 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 Managed Service for Apache Spark vai usar para preparar artefatos. Se você não especificar um bucket, o Managed Service for 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) servidor PHS do Managed Service for Apache Spark a ser usado para visualizar o histórico de jobs do Spark em clusters ativos e excluídos do Managed Service for Apache Spark no GKE. O cluster do PHS precisa estar localizado na mesma região que o cluster virtual do Managed Service for Apache Spark no GKE.
  2. Execute o comando:

    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}
    
    Observações:

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 as substituições a seguir:

  • PROJECT: ID do projeto Google Cloud
  • REGION: região do cluster virtual do Dataproc (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 permanente (PHS)
  • BUCKET: (opcional) nome do bucket de preparo. Deixe esse campo vazio para que o Managed Service for 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 Managed Service for Apache Spark no GKE estiver em execução, envie um job do Spark usando o Google Cloud console, a CLI gcloudou a API jobs.submit do Managed Service for 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