Execute uma tarefa do Spark no Dataproc no Google Kubernetes Engine

Antes de começar

  1. Tem de ter criado um cluster zonal ou regional do Google Kubernetes Engine (GKE)padrão (não automático) com o Workload Identity ativado no cluster.

Crie um cluster virtual do Dataproc no GKE

É criado um cluster virtual do Dataproc no GKE como a plataforma de implementação dos componentes do Dataproc. É um recurso virtual e, ao contrário de um cluster do Dataproc no Compute Engine, não inclui VMs principais e de trabalho do Dataproc separadas.

  • O Dataproc no GKE cria node pools num cluster do GKE quando cria um cluster virtual do Dataproc no GKE.

  • As tarefas do Dataproc no GKE são executadas como pods nestes conjuntos de nós. Os node pools e o agendamento de pods nos node pools são geridos pelo GKE.

  • Crie vários clusters virtuais. Pode criar e executar vários clusters virtuais num cluster do GKE para obter uma utilização melhorada dos recursos partilhando conjuntos de nós entre os clusters virtuais.

    • Cada cluster virtual:
      • é criado com propriedades separadas, incluindo a versão do motor Spark e a identidade da carga de trabalho
      • está isolado num espaço de nomes do GKE separado no cluster do GKE

Consola

  1. Na Google Cloud consola, aceda à página Dataproc Clusters.

    Aceda a Clusters

  2. Clique em Criar cluster.

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

  4. No painel Configurar cluster:

    1. No campo Nome do cluster, introduza um nome para o cluster.
    2. Na lista Região, selecione uma região para o cluster virtual do Dataproc no GKE. Esta região tem de ser a mesma região onde o cluster do GKE existente está localizado (que seleciona no item seguinte).
    3. No campo Cluster do Kubernetes, clique em Procurar para selecionar a região onde se encontra o cluster do GKE existente.
    4. Opcional: no campo Contentor de preparação do Cloud Storage, pode clicar em Procurar para selecionar um contentor do Cloud Storage existente. O Dataproc no GKE prepara os artefactos no contentor. Ignore este campo para que o Dataproc no GKE crie um contentor de preparação.
  5. No painel do lado esquerdo, clique em Configurar conjuntos de nós e, de seguida, no painel Conjuntos de nós, clique em Adicionar conjunto.

    1. Para reutilizar um node pool do Dataproc no GKE existente:
      1. Clique em Reutilizar pool de nós existente.
      2. Introduza o nome do conjunto de nós existente e selecione a respetiva função. Pelo menos um conjunto de nós tem de ter a função PREDEFINIDA.
      3. Clique em Concluído.
    2. Para criar um novo conjunto de nós do Dataproc no GKE:
      1. Clique em Criar um novo conjunto de nós.
      2. Introduza os seguintes valores do conjunto de nós:
    3. Clique em Adicionar um conjunto para adicionar mais conjuntos de nós. Todos os conjuntos de nós têm de ter a localização. Pode adicionar um total de quatro conjuntos de nós.
  6. (Opcional) Se tiver configurado um servidor de histórico persistente (PHS) do Dataproc para usar para ver o histórico de tarefas do Spark, em clusters do Dataproc no GKE ativos e eliminados, clique em Personalizar cluster. Em seguida, no campo Cluster do servidor de histórico, procure e escolha o seu cluster do PHS. O cluster do PHS tem de estar localizado na mesma região que o cluster virtual do Dataproc no GKE.

  7. Clique em Criar para criar o cluster do Dataproc. O cluster do Dataproc on GKE aparece numa lista na página Clusters. O respetivo estado é Aprovisionamento até o cluster estar pronto a usar e, em seguida, o estado muda para Em execução.

gcloud

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

  1. Defina 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
    
    Notas:

    • DP_CLUSTER: defina o nome do cluster virtual do Dataproc, que tem de começar com uma letra minúscula, seguida de até 54 letras minúsculas, números ou hífenes. Não pode terminar com um hífen.
    • REGION: A region tem de ser igual à região onde o cluster do GKE está localizado.
    • GKE_CLUSTER: o nome do cluster do GKE existente.
    • BUCKET: (Opcional) Pode especificar o nome de um contentor do Cloud Storage, que o Dataproc vai usar para preparar artefactos. Se não especificar um contentor, o Dataproc no GKE cria um contentor de preparação.
    • DP_POOLNAME: o nome de um node pool a criar no cluster do GKE.
    • PHS_CLUSTER: (Opcional) servidor PHS do Dataproc a usar para ver o histórico de tarefas do Spark em clusters do Dataproc no GKE ativos e eliminados. O cluster do PHS tem de estar localizado na mesma região que o cluster virtual do Dataproc 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}
    
    Notas:

    • --spark-engine-version: a versão da imagem do Spark usada no cluster do Dataproc. Pode usar um identificador, como 3, 3.1 ou latest, ou pode especificar a versão subminor completa, como 3.1-dataproc-5.
    • --staging-bucket: Elimine esta flag para que o Dataproc no GKE crie um contentor de preparação.
    • --pools: esta flag é usada para especificar um conjunto de nós novo ou existente que o Dataproc vai criar ou usar para executar a carga de trabalho. Lista das definições do conjunto de nós do Dataproc no GKE, separadas por vírgulas, por exemplo:
      --pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
      
      Tem de especificar o conjunto de nós name e role. As outras definições do conjunto de nós são opcionais. Pode usar várias flags --pools para especificar vários conjuntos de nós. Pelo menos, um conjunto de nós tem de ter a função default. Todos os conjuntos de nós têm de ter a mesma localização.
    • --setup-workload-identity: este sinalizador ativa as associações do Workload Identity. Estas associações permitem que as contas de serviço do Kubernetes (KSAs) atuem como a conta de serviço da VM do Dataproc (identidade do plano de dados) predefinida do cluster virtual.

REST

Conclua um virtualClusterConfig como parte de um pedido cluster.create da API Dataproc.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT: ID do projeto do Google Cloud
  • REGION: região do cluster virtual do Dataproc (a mesma região que a região do cluster do GKE existente)
  • DP_CLUSTER: nome do cluster do Dataproc
  • GKE_CLUSTER: nome do cluster do GKE
  • NODE_POOL: nome do node pool
  • PHS_CLUSTER: Nome do cluster do servidor de histórico persistente (PHS)
  • BUCKET: (Opcional) Nome do contentor de preparação. Deixe este campo vazio para que o Dataproc no GKE crie um contentor de preparação.

Método HTTP e URL:

POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

Corpo JSON do pedido:

{
  "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 o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

{
  "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"
      }
    }
  }

Envie uma tarefa do Spark

Depois de o cluster virtual do Dataproc no GKE estar em execução, envie uma tarefa do Spark através da Google Cloud consola, da CLI gcloud ou da API jobs.submit Dataproc (através de pedidos HTTP diretos ou das bibliotecas cliente da Google Cloud).

Exemplo de tarefa 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 tarefa 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 tarefa 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