Ejecuta un trabajo de Spark en Dataproc en Google Kubernetes Engine

Antes de comenzar

  1. Debes haber creado un clúster zonal o regional de Google Kubernetes Engine (GKE) estándar (no Autopilot) que tenga habilitado Workload Identity en el clúster.

Crea un clúster virtual de Dataproc on GKE

Se crea un clúster virtual de Dataproc on GKE como la plataforma de implementación para los componentes de Dataproc. Es un recurso virtual y, a diferencia de un clúster de Dataproc en Compute Engine, no incluye VMs principales y de trabajador de Dataproc independientes.

  • Dataproc on GKE crea grupos de nodos dentro de un clúster de GKE cuando creas un clúster virtual de Dataproc on GKE.

  • Los trabajos de Dataproc on GKE se ejecutan como Pods en estos grupos de nodos. GKE administra los grupos de nodos y la programación de los Pods de los grupos.

  • Crea varios clústeres virtuales. Puedes crear y ejecutar varios clústeres virtuales en un clúster de GKE para obtener un mejor uso de recursos compartiendo grupos de nodos en los clústeres virtuales.

    • Cada clúster virtual realiza las siguientes acciones:
      • se crean con propiedades separadas, como la versión de motor de Spark
      • esté aislada en un espacio de nombres de GKE independiente en el clúster de GKE

Console

  1. En la consola de Google Cloud, ve a la página Clústeres de Dataproc.

    Ir a los clústeres

  2. Haga clic en Crear clúster.

  3. En el diálogo Crear clúster de Dataproc, haz clic en Crear en la fila Clúster en GKE.

  4. En el panel Configurar clúster, haz lo siguiente:

    1. En el campo Nombre del clúster, ingresa un nombre para el clúster.
    2. En la lista Región, selecciona una región para el clúster virtual de Dataproc on GKE. Esta región debe ser la misma en la que se encuentra tu clúster de GKE existente (que seleccionas en el siguiente elemento).
    3. En el campo Clúster de Kubernetes, haz clic en Explorar para seleccionar la región en la que se encuentra tu clúster de GKE existente.
    4. Opcional: En el campo Bucket de etapa de pruebas de Cloud Storage, puedes hacer clic en Explorar para seleccionar un bucket de Cloud Storage existente. Dataproc en GKE habilitará los artefactos en el bucket. Ignora este campo para que Dataproc on GKE cree un bucket de etapa de pruebas.
  5. En el panel izquierdo, haz clic en Configurar grupos de nodos y, luego, en el panel Grupos de nodos, haz clic en Agregar un grupo.

    1. Para volver a usar un grupo de nodos existente de Dataproc on GKE, sigue estos pasos:
      1. Haz clic en Reutilizar grupo de nodos existente.
      2. Ingresa el nombre del grupo de nodos existente y selecciona su Función. Al menos un grupo de nodos debe tener el rol DEFAULT.
      3. Haz clic en Listo.
    2. Para crear un nuevo grupo de nodos de Dataproc on GKE, haz lo siguiente:
      1. Haz clic en Crear un grupo de nodos nuevo.
      2. Ingresa los siguientes valores del grupo de nodos:
        • Nombre del grupo de nodos
        • Rol: Al menos un grupo de nodos debe tener el rol PREDETERMINADO.
        • Ubicación: Especifica una zona dentro de la región del clúster de Dataproc on GKE.
        • Tipo de máquina del grupo de nodos
        • Plataforma de CPU
        • Prioridad
        • Min (Min): cantidad mínima de nodos.
        • Max: Cantidad máxima de nodos. La cantidad máxima de nodos debe ser mayor que 0.
    3. Haz clic en Agregar un grupo para agregar más grupos de nodos. Todos los grupos de nodos deben tener la ubicación. Puedes agregar un total de cuatro grupos de nodos.
  6. Opcional: Si configuraste un servidor de historial persistente de Dataproc (PHS) para ver el historial de trabajos de Spark, en los clústeres activos y borrados de Dataproc on GKE, haz clic en Personalizar clúster. Luego, en el campo Clúster del servidor del historial, busca y elige tu clúster de PHS. El clúster de PHS debe estar ubicado en la misma región que el clúster virtual de Dataproc on GKE.

  7. Haz clic en Crear para crear el clúster de Dataproc. Tu clúster de Dataproc on GKE aparece en una lista en la página Clústeres. Su estado es Provisioning hasta que el clúster esté listo para usarse y, luego, el estado cambia a Running.

gcloud

Configura las variables de entorno y, luego, ejecuta el comando gcloud dataproc clusters gke create de forma local o en Cloud Shell para crear un clúster de Dataproc on GKE.

  1. Establece las variables de entorno:

    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: Configura el nombre del clúster virtual de Dataproc, que debe comenzar con una letra minúscula seguida por un máximo de 54 letras minúsculas, números o guiones. No puede terminar con un guion.
    • REGION: El region debe ser la misma que la región en la que se encuentra el clúster de GKE.
    • GKE_CLUSTER: Es el nombre de tu clúster de GKE existente.
    • BUCKET: Puedes especificar el nombre de un bucket de Cloud Storage que Dataproc usará para almacenar artefactos en etapa intermedia (opcional). Si no especificas un bucket, Dataproc en GKE creará un bucket de etapa de pruebas.
    • DP_POOLNAME: Es el nombre de un grupo de nodos que se creará en el clúster de GKE.
    • PHS_CLUSTER: Es el servidor de PHS de Dataproc para ver el historial de trabajos de Spark en los clústeres activos y borrados de Dataproc on GKE (opcional). El clúster de PHS debe estar ubicado en la misma región que el clúster virtual de Dataproc on GKE.
  2. Ejecuta el siguiente 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: Es la versión de la imagen de Spark que se usa en el clúster de Dataproc. Puedes usar un identificador, como 3, 3.1 o latest, o especificar la versión submenor completa, como 3.1-dataproc-5.
    • --staging-bucket: Borra esta marca para que Dataproc on GKE cree un bucket de etapa de pruebas.
    • --pools: Esta marca se usa para especificar un grupo de nodos nuevo o existente que Dataproc creará o usará para realizar la carga de trabajo. Enumera la configuración del grupo de nodos de Dataproc on GKE, separada por comas, por ejemplo:
      --pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
      
      Debes especificar el grupo de nodos name y role. Otras opciones de configuración del grupo de nodos son opcionales. Puedes usar varias marcas --pools para especificar varios grupos de nodos. Al menos un grupo de nodos debe tener la función default. Todos los grupos de nodos deben tener la misma ubicación.
    • --setup-workload-identity: Esta marca habilita las vinculaciones de Workload Identity. Estas vinculaciones permiten que las cuentas de servicio de Kubernetes (KSA) actúen como la cuenta de servicio de VM de Dataproc (identidad del plano de datos) predeterminada del clúster virtual.

REST

Completa un virtualClusterConfig como parte de una solicitud cluster.create de la API de Dataproc.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT: ID del proyecto de Google Cloud
  • REGION: La región del clúster virtual de Dataproc (la misma región que la región del clúster de GKE existente)
  • DP_CLUSTER: Nombre del clúster de Dataproc
  • GKE_CLUSTER: Nombre del clúster de GKE
  • NODE_POOL: Nombre del grupo de nodos
  • PHS_CLUSTER: Nombre del clúster del servidor de historial persistente (PHS)
  • BUCKET: Nombre del bucket de etapa de pruebas (opcional). Deja este campo vacío para que Dataproc on GKE cree un bucket de etapa de pruebas.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "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 tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Envía un trabajo de Spark

Después de ejecutar el clúster virtual de Dataproc en GKE, envía un trabajo de Spark con la consola de Google Cloud, la CLI de gcloud o la API de jobs.submit de Dataproc (mediante solicitudes HTTP directas o las bibliotecas cliente de Cloud).

Ejemplo de trabajo de Spark de la CLI de 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

Ejemplo de trabajo de PySpark en la CLI de gcloud:

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

Ejemplo de trabajo SparkR de la CLI de gcloud:

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

Limpia