Executar um job do Spark no Dataproc no Google Kubernetes Engine

Antes de começar

  1. Você deve ter criado um padrão (não piloto automático) Cluster zonal ou regional do Google Kubernetes Engine (GKE) que tenha a Identidade da carga de trabalho ativados no cluster.

Criar um cluster virtual do Dataproc no GKE

Um cluster virtual do Dataproc no GKE é criado como a plataforma de implantação para componentes do Dataproc. É um recurso virtual e, ao contrário de um Dataproc no cluster do Compute Engine, não inclui Dataproc separado VMs mestre e de trabalho.

  • O Dataproc no GKE cria pools de nós em um cluster ao criar um cluster virtual do Dataproc no GKE.

  • Os jobs do Dataproc no GKE são executados como pods nesses pools de nós. Os pools de nós e a programação de pods nos pools de nós são gerenciadas pelo GKE.

  • Crie vários clusters virtuais. É possível criar e executar vários ambientes em um cluster do GKE para receber melhorias o uso de recursos compartilhando pools de nós nos clusters virtuais.

    • Cada cluster virtual:
      • é criado com propriedades separadas, incluindo o Spark versão do mecanismo e identidade da carga de trabalho
      • fica isolado em um namespace separado do GKE no cluster do GKE
.

Console

  1. No console do Google Cloud, acesse a página do Dataproc Clusters.

    Acessar Clusters

  2. Clique em Criar cluster.

  3. Na caixa de diálogo Criar cluster do Dataproc, clique em Criar no a linha Cluster no GKE.

  4. No painel Configurar cluster:

    1. No campo Nome do cluster, insira o nome do cluster.
    2. Na lista Região, selecione uma região para o cluster virtual do Dataproc no GKE. A região precisa ser igual a região onde seu cluster do GKE está localizado (que você selecionará no próximo item).
    3. No campo Cluster do Kubernetes, clique em Procurar para selecionar os a região onde seu cluster do GKE está localizado.
    4. Opcional: no campo Bucket de preparo do Cloud Storage, clique em Navegue para selecionar um bucket do Cloud Storage. O Dataproc no GKE vai organizar os artefatos no bucket. Ignorar para que o Dataproc no GKE crie um bucket de preparo.
  5. No painel à esquerda, clique em Configurar pools de nós e depois em Pools de nós clique em Adicionar um pool.

    1. Para reutilizar um pool de nós atual do Dataproc no GKE:
      1. Clique em Reutilizar pool de nós atual.
      2. Insira o nome do pool de nós atual e selecione o respectivo Papel. 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 Dataproc 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 Dataproc no GKE.
        • Tipo de máquina do pool de nós
        • Plataforma de CPU
        • Preempção
        • Mín.: contagem mínima de nós.
        • Máx.: contagem máxima de nós. A contagem máxima de nós precisa ser maior que 0.
    3. Clique em Adicionar um pool para incluir 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ê configurou um Servidor de histórico permanente do Dataproc (PHS) para visualizar o histórico de jobs do Spark, no Dataproc ativo e excluído do GKE clusters, clique em Personalizar cluster. Em seguida, no cluster do servidor do histórico , procure e escolha seu cluster PHS. O cluster PHS precisa estar localizado na mesma região do cluster virtual do Dataproc no GKE.

  7. Clique em Criar para criar o cluster do Dataproc. Seu O Dataproc no cluster do GKE aparece em uma lista na página Clusters. O status dele será Provisionamento até que o cluster esteja pronto para uso. o status mudará para Em execução.

gcloud

Defina as variáveis de ambiente e execute o gcloud dataproc clusters gke create localmente ou no Cloud Shell para criar um cluster do Dataproc no GKE.

  1. Defina as variáveis de ambiente:

    DP_CLUSTER=Dataproc on GKE  cluster-name \
      REGION=region \
      GKE_CLUSTER=GKE cluster-name \
      BUCKET=Cloud Storage bucket-name \
      DP_POOLNAME=node pool-name
      PHS_CLUSTER=Dataproc PHS server name
    
    Observações:

    • DP_CLUSTER: define o nome do cluster virtual do Dataproc, que precisa começar com uma letra minúscula, seguida por até 54 letras minúsculas, números ou hífens. Ele e não pode terminar com um hífen.
    • REGION: o region precisa ser o mesmo da região em que o cluster do GKE está localizado.
    • GKE_CLUSTER: o nome do cluster atual do GKE.
    • BUCKET (opcional): é possível especificar o nome de um bucket do Cloud Storage, que o Dataproc usará para organizar os artefatos. Se você não especificar um bucket, O Dataproc no GKE vai criar um bucket de preparo.
    • DP_POOLNAME: o nome de um pool de nós para criar no cluster do GKE.
    • PHS_CLUSTER: (opcional) Servidor PHS do Dataproc para visualizar o histórico de jobs do Spark no Dataproc ativo e excluído do GKE clusters. O cluster do PHS precisa estar localizado na mesma região que o Dataproc no cluster virtual do 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:

    • --spark-engine-version: o Versão da imagem do Spark usadas no cluster do Dataproc. Você pode use um identificador, como 3, 3.1 ou latest; ou você pode especificar a versão subsecundária completa, como 3.1-dataproc-5.
    • --staging-bucket: exclua esta sinalização para usar o Dataproc no GKE criar um bucket de preparo.
    • --pools: esta sinalização é usada para especificar um pool de nós novo ou existente. que o Dataproc criará ou usará para executar a carga de trabalho. Lista Configurações do pool de nós do Dataproc no GKE, separados por vírgulas, por exemplo:
      --pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
      
      É preciso especificar os pool de nós name e role. Outro pool de nós são opcionais. É possível usar várias sinalizações --pools para especificar vários pools de nós. Pelo menos um pool de nós precisa têm o papel default. Todos os pools de nós precisam ter o mesmo o local.
    • --setup-workload-identity: essa sinalização ativa Identidade da carga de trabalho vinculações. Essas vinculações permitem que as contas de serviço do Kubernetes (KSAs, na sigla em inglês) para atuar como padrão Conta de serviço da VM do Dataproc (identidade do plano de dados) do cluster virtual.

REST

Conclua um virtualClusterConfig como parte de uma API Dataproc cluster.create solicitação.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT: ID do projeto do Google Cloud
  • REGION: região do cluster virtual do Dataproc (mesma região do cluster do GKE atual)
  • 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, na sigla em inglês)
  • BUCKET: (opcional) nome do bucket de preparo. Deixe em branco para que o Dataproc 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 Dataproc no GKE estiver em execução, enviar um job do Spark usando o console do Google Cloud, CLI gcloud ou a Dataproc jobs.submit API (usando solicitações HTTP diretas ou o Bibliotecas de cliente do Cloud).

Exemplo de job do Spark na gcloud CLI:

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 para a 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 na CLI gcloud:

gcloud dataproc jobs submit spark-r \
    --region=${REGION} \
    --cluster=${DP_CLUSTER} \
    local:///usr/lib/spark/examples/src/main/r/dataframe.R

Limpar