Ejecuta un trabajo de Spark en Google Kubernetes Engine

En este documento, se muestra cómo crear un clúster virtual de Managed Service para Apache Spark en GKE, y, luego, ejecutar un trabajo de Spark en el clúster.

Descripción general de las opciones

Si bien Managed Service para Apache Spark en GKE ofrece un control potente para los entornos en contenedores, Google Cloud también proporciona opciones completamente administradas y sin servidores que pueden simplificar las operaciones y acelerar el desarrollo. Para obtener una comparación de las opciones de implementación de Spark Managed Service para Apache Spark, consulta Decide on the best Spark service.

Antes de comenzar

  1. Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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. Instala Google Cloud CLI.

  7. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  8. Para inicializar gcloud CLI, ejecuta el siguiente 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. Instala Google Cloud CLI.

  14. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  15. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  16. Debes haber creado un clúster estándar (no piloto automático) de Google Kubernetes Engine (GKE) zonal o regional que tenga Workload Identity habilitado en el clúster.

Roles obligatorios

Se requieren ciertos roles de IAM para ejecutar los ejemplos de esta página. Según las políticas de la organización, es posible que ya se hayan otorgado estos roles. Para verificar las concesiones de roles, consulta ¿Necesitas otorgar roles?.

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Funciones de usuario

Para obtener los permisos que necesitas para crear un clúster de Managed Service para Apache Spark, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Función de cuenta de servicio

Para asegurarte de que la cuenta de servicio predeterminada de Compute Engine tenga los permisos necesarios para crear un clúster de Managed Service para Apache Spark, pídele a tu administrador que otorgue el rol de IAM de Trabajador de Dataproc (roles/dataproc.worker) a la cuenta de servicio predeterminada de Compute Engine en el proyecto.

Crea un clúster virtual

Un clúster virtual de Managed Service para Apache Spark en GKE se crea como la plataforma de implementación para componentes de Managed Service para Apache Spark. Es un recurso virtual y, a diferencia de un clúster de Managed Service para Apache Spark en Compute Engine, no incluye VMs de trabajador y principal de Managed Service para Apache Spark independientes.

  • Managed Service para Apache Spark en GKE crea grupos de nodos dentro de un clúster de GKE cuando creas un clúster virtual de Managed Service para Apache Spark en GKE.

  • Los trabajos de Managed Service para Apache Spark en GKE se ejecutan como pods en estos grupos de nodos. GKE administra los grupos de nodos y la programación de pods en los grupos de nodos.

  • 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 los recursos mediante el uso compartido de grupos de nodos en los clústeres virtuales.

    • Cada clúster virtual:
      • se crea con propiedades independientes, incluidas la versión del motor de Spark y Workload Identity.
      • está aislado dentro de un espacio de nombres de GKE independiente en el clúster de GKE.

Console

  1. En la Google Cloud consola de, ve a la página de Managed Service para Apache Spark Clústeres.

    Ir a los clústeres

  2. Haz clic en Crear clúster.

  3. En el diálogo Crear clúster de Managed Service para Apache Spark, 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 Managed Service para Apache Spark en 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. Managed Service para Apache Spark en GKE organizará los artefactos en el bucket. Ignora este campo para que Managed Service para Apache Spark en 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 reutilizar un grupo de nodos existente de Managed Service para Apache Spark en GKE, haz lo siguiente:
      1. Haz clic en Reutilizar un grupo de nodos existente.
      2. Ingresa el nombre del grupo de nodos existente y selecciona su rol. Al menos un grupo de nodos debe tener el rol DEFAULT.
      3. Haz clic en Listo.
    2. Para crear un grupo de nodos nuevo de Managed Service para Apache Spark en 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 DEFAULT.
        • Ubicación: Especifica una zona dentro de la región del clúster de Managed Service para Apache Spark en GKE.
        • Tipo de máquina del grupo de nodos
        • Plataforma de CPU
        • Capacidad de expulsión
        • Mín: Cantidad mínima de nodos.
        • Máx: 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 (PHS) de Managed Service para Apache Spark para ver el historial de trabajos de Spark en clústeres activos y borrados de Managed Service para Apache Spark en GKE , haz clic en Personalizar clúster. Luego, en el campo Clúster del servidor de 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 Managed Service para Apache Spark en GKE.

  7. Haz clic en Crear para crear el clúster de Managed Service para Apache Spark. Tu clúster de Managed Service para Apache Spark en GKE aparece en una lista en la página Clústeres. Su estado es Aprovisionando hasta que el clúster esté listo para usarse y, luego, el estado cambia a En ejecución.

gcloud

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

  1. Establece las variables de entorno:

    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
    
    Notas:

    • DP_CLUSTER: Establece el nombre del clúster virtual de Managed Service para Apache Spark, que debe comenzar con una letra minúscula, seguida de hasta 54 letras minúsculas, números o guiones. No puede terminar con un guion.
    • REGION: La region debe ser la misma que la región en la que se encuentra el clúster de GKE.
    • GKE_CLUSTER: El nombre de tu clúster de GKE existente.
    • BUCKET: (Opcional) Puedes especificar el nombre de un bucket de Cloud Storage, que Managed Service para Apache Spark usará para organizar los artefactos. Si no especificas un bucket, Managed Service para Apache Spark en GKE creará un bucket de etapa de pruebas.
    • DP_POOLNAME: El nombre de un grupo de nodos que se creará en el clúster de GKE.
    • PHS_CLUSTER: (Opcional) Servidor de PHS de Managed Service para Apache Spark para ver el historial de trabajos de Spark en clústeres activos y borrados de Managed Service para Apache Spark en GKE. El clúster de PHS debe estar ubicado en la misma región que el clúster virtual de Managed Service para Apache Spark en 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:

REST

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

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

  • PROJECT: ID del proyecto de Google Cloud
  • REGION: Región del clúster virtual de Dataproc (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: (Opcional) Nombre del bucket de etapa de pruebas. Déjalo vacío para que Managed Service para Apache Spark en 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"
      }
    }
  }

Enviar un trabajo de Spark

Una vez que se ejecute tu clúster virtual de Managed Service para Apache Spark en GKE, envía un trabajo de Spark con la Google Cloud consola, gcloud CLI o la API de Managed Service para Apache Spark jobs.submit (mediante solicitudes HTTP directas o las bibliotecas cliente de Cloud).

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

Ejemplo de trabajo de PySpark de gcloud CLI:

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

Ejemplo de trabajo de SparkR de gcloud CLI:

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

Limpia