Esegui un job Spark su Dataproc su Google Kubernetes Engine

Prima di iniziare

  1. Devi aver creato un cluster standard (non autopilot) Google Kubernetes Engine (GKE) a livello di zona o a livello di regione con Workload Identity abilitato nel cluster.

Crea un cluster virtuale Dataproc su GKE

Un cluster virtuale Dataproc su GKE viene creato come piattaforma di deployment per i componenti Dataproc. È una risorsa virtuale e, a differenza di un cluster Dataproc sul cluster Compute Engine, non include VM Dataproc e master Dataproc.

  • Dataproc su GKE crea pool di nodi all'interno di un cluster GKE quando crei un cluster virtuale Dataproc su GKE.

  • I job Dataproc su GKE vengono eseguiti come pod su questi pool di nodi. I pool di nodi e la pianificazione dei pod nei pool di nodi sono gestiti da GKE.

  • Crea più cluster virtuali. Puoi creare ed eseguire più cluster virtuali su un cluster GKE per ottenere un utilizzo migliorato delle risorse condividendo i pool di nodi tra i cluster virtuali.

    • Ogni cluster virtuale:
      • viene creato con proprietà separate, tra cui la versione del motore Spark e l'identità del carico di lavoro
      • è isolato in uno spazio dei nomi GKE separato sul cluster GKE

Console

  1. In Google Cloud Console, vai alla pagina Cluster di Dataproc.

    Vai ai cluster

  2. Fai clic su Crea cluster.

  3. Nella finestra di dialogo Crea cluster Dataproc, fai clic su Crea nella riga Cluster su GKE.

  4. Nel riquadro Configura cluster:

    1. Nel campo Nome del cluster, inserisci un nome per il cluster.
    2. Nell'elenco Area geografica, seleziona un'area geografica per il cluster virtuale Dataproc su GKE. Questa regione deve essere la stessa regione in cui si trova il tuo cluster GKE esistente (selezionato nel prossimo elemento).
    3. Nel campo Cluster Kubernetes, fai clic su Sfoglia per selezionare l'area geografica in cui si trova il cluster GKE esistente.
    4. Facoltativo: nel campo Bucket di gestione temporanea di Cloud Storage, puoi fare clic su Sfoglia per selezionare un bucket Cloud Storage esistente. Dataproc su GKE creerà temporaneamente degli artefatti nel bucket. Ignora questo campo per fare in modo che Dataproc su GKE crei un bucket temporaneo.
  5. Nel riquadro a sinistra, fai clic su Configura pool di nodi, quindi nel riquadro Pool di nodi fai clic su Aggiungi un pool.

    1. Per riutilizzare un pool di nodi Dataproc su GKE esistente:
      1. Fai clic su Riutilizza un pool di nodi esistente.
      2. Inserisci il nome del pool di nodi esistente e seleziona il suo ruolo. Almeno un pool di nodi deve avere il ruolo DEFAULT.
      3. Fai clic su Fine.
    2. Per creare un nuovo pool di nodi Dataproc su GKE:
      1. Fai clic su Crea un nuovo pool di nodi.
      2. Inserisci i seguenti valori del pool di nodi:
    3. Fai clic su Aggiungi pool per aggiungere altri pool di nodi. Tutti i pool di nodi devono avere la località. Puoi aggiungere un totale di quattro pool di nodi.
  6. (Facoltativo) Se hai configurato un server di cronologia permanente (DataProc Persistent Server) da utilizzare per visualizzare la cronologia dei job Spark, su cluster Dataproc attivi ed eliminati sui cluster GKE, fai clic su Personalizza cluster. Quindi, nel campo Cluster server della cronologia, cerca e scegli il cluster PHS. Il cluster PHS deve trovarsi nella stessa regione del cluster virtuale Dataproc su GKE.

  7. Fai clic su Crea per creare il cluster Dataproc. Il cluster Dataproc su un elenco viene visualizzato in un elenco nella pagina Cluster. Il suo stato è Provisioning finché il cluster non è pronto per l'uso, quindi lo stato passa a In esecuzione.

gcloud

Imposta le variabili di ambiente, quindi esegui il comando gcloud dataproc clusters gke create in locale o in Cloud Shell per creare un cluster Dataproc su GKE.

  1. Imposta le variabili di 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
    
    Note

    • DP_CLUSTER: imposta il nome del cluster virtuale di Dataproc, che deve iniziare con una lettera minuscola, seguita da un massimo di 54 lettere minuscole, numeri o trattini. Non può terminare con un trattino.
    • REGION: region deve corrispondere alla regione in cui si trova il cluster GKE.
    • GKE_CLUSTER: il nome del tuo cluster GKE esistente.
    • BUCKET: (facoltativo) puoi specificare il nome di un bucket Cloud Storage, che Dataproc utilizzerà per archiviare gli artefatti. Se non specifichi un bucket, Dataproc su GKE crea un bucket temporaneo.
    • DP_POOLNAME: il nome di un pool di nodi da creare sul cluster GKE.
    • PHS_CLUSTER: (Facoltativo) Server PHP Pros da utilizzare per visualizzare la cronologia dei job Spark su cluster GKE attivi ed eliminati sui cluster GKE. Il cluster PHS deve trovarsi nella stessa regione del cluster virtuale GKE.
  2. Esegui il 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}
    
    Note

    • --spark-engine-version: la versione immagine Spark utilizzata nel cluster Dataproc. Puoi utilizzare un identificatore, ad esempio 3, 3.1 o latest, oppure specificare la versione secondaria secondaria, ad esempio 3.1-dataproc-5.
    • --staging-bucket: elimina questo flag per fare in modo che Dataproc su GKE crei un bucket temporaneo.
    • --pools: questo flag viene utilizzato per specificare un pool di nodi nuovo o esistente che Dataproc creerà o utilizzerà per eseguire il carico di lavoro. Elenca le impostazioni del pool di nodi GKE su GKE, separate da virgole, ad esempio:
      --pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
      
      Devi specificare il pool di nodi name e role. Altre impostazioni del pool di nodi sono facoltative. Puoi utilizzare più flag --pools per specificare più pool di nodi. Almeno un pool di nodi deve avere il ruolo default. Tutti i pool di nodi devono avere la stessa località.
    • --setup-workload-identity: questo flag abilita i associazioni di Workload Identity. Queste associazioni consentono agli account di servizio Kubernetes (KSA) di agire come account di servizio VM di Dataproc (identità del piano dati) del cluster virtuale.

REST &AM; LINEA CMD

Completare una virtualClusterConfig come parte di una richiesta dell'API Dataproccluster.create.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT: ID progetto Google Cloud
  • REGION: regione del cluster virtuale Dataproc (stessa regione dell'area geografica del cluster GKE esistente)
  • DP_CLUSTER: nome del cluster Dataproc
  • GKE_CLUSTER: nome del cluster GKE
  • NODE_POOL: nome del pool di nodi
  • PHS_CLUSTER: nome del cluster Persistent History Server (PHS)
  • (Facoltativo) BUCKET. Nome del bucket temporaneo. Lascia vuoto questo campo per fare in modo che Dataproc su GKE crei un bucket temporaneo.

Metodo HTTP e URL:

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

Corpo JSON richiesta:

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

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Invia un job Spark

Dopo aver eseguito il cluster virtuale Dataproc su GKE, invia un job Spark utilizzando la console Google Cloud, l'interfaccia a riga di comando gcloud o l'API Dataproc jobs.submit (utilizzando richieste HTTP dirette o librerie client Cloud).

Esempio di job Spark per 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

Esempio di job PySpark gcloud CLI:

gcloud dataproc jobs submit pyspark \
    --region=${REGION} \
    --cluster=${DP_CLUSTER} \
    local:///usr/lib/spark/examples/src/main/python/pi.py \
    -- 10

Esempio di job Spark di gcloud CLI:

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

Esegui la pulizia