En este documento, primero se enumeran las alternativas para ejecutar trabajos de Spark en un clúster de Dataproc en Google Kubernetes Engine. Luego, se muestra cómo crear un clúster virtual de Dataproc en GKE y, luego, ejecutar un trabajo de Spark en el clúster.
Descripción general de las opciones
Si bien Dataproc 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.
Dataproc en Compute Engine: Para una experiencia familiar basada en VM con el máximo control sobre el entorno de tu clúster, Dataproc en Compute Engine es ideal para migrar cargas de trabajo existentes de Hadoop y Spark.
Google Cloud Serverless for Apache Spark: Para una experiencia sin operaciones con ajuste de escala automático, Serverless for Apache Spark te permite enfocarte en tu código. También es ideal para las canalizaciones nuevas y el análisis interactivo.
Para comparar las opciones de implementación de Spark, consulta Cómo decidir el mejor servicio de Spark.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verifica que tengas los permisos necesarios para completar esta guía.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verifica que tengas los permisos necesarios para completar esta guía.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init Debes haber creado un clúster zonal o regional estándar (no de Autopilot) de Google Kubernetes Engine (GKE) que tenga Workload Identity habilitado en el clúster.
-
Editor de Dataproc (
roles/dataproc.editor) en el proyecto -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) en la cuenta de servicio predeterminada de Compute Engine Dataproc en GKE crea grupos de nodos dentro de un clúster de GKE cuando creas un clúster virtual de Dataproc en GKE.
Los trabajos de Dataproc en GKE se ejecutan como Pods en estos grupos de nodos. GKE administra los grupos de nodos y la programación de los Pods en ellos.
Crea varios clústeres virtuales. Puedes crear y ejecutar varios clústeres virtuales en un clúster de GKE para obtener una mejor utilización de los recursos, ya que los grupos de nodos se comparten entre los clústeres virtuales.
- Cada clúster virtual:
- se crea con propiedades separadas, incluidas la versión del motor de Spark y la identidad de la carga de trabajo
- está aislado dentro de un espacio de nombres de GKE independiente en el clúster de GKE
- Cada clúster virtual:
En la consola de Google Cloud , ve a la página Clústeres de Dataproc.
Haga clic en Crear clúster.
En el diálogo Crear clúster de Dataproc, haz clic en Crear en la fila Clúster en GKE.
En el panel Configura el clúster, haz lo siguiente:
- En el campo Nombre del clúster, ingresa un nombre para el clúster.
- En la lista Región, selecciona una región para el clúster virtual de Dataproc en GKE. Esta región debe ser la misma en la que se encuentra tu clúster de GKE existente (que seleccionarás en el siguiente elemento).
- 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.
- Opcional: En el campo Bucket de Cloud Storage para la etapa de pruebas, puedes hacer clic en Explorar para seleccionar un bucket de Cloud Storage existente. Dataproc en GKE transferirá los artefactos al bucket. Ignora este campo para que Dataproc en GKE cree un bucket de etapa de pruebas.
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.
- Para reutilizar un grupo de nodos existente de Dataproc en GKE, haz lo siguiente:
- Haz clic en Reutilizar un grupo de nodos existente.
- Ingresa el nombre del grupo de nodos existente y selecciona su rol. Al menos un grupo de nodos debe tener el rol DEFAULT.
- Haz clic en Listo.
- Para crear un grupo de nodos nuevo de Dataproc en GKE, haz lo siguiente:
- Haz clic en Crear un grupo de nodos nuevo.
- 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 Dataproc en GKE.
- Tipo de máquina del grupo de nodos
- Plataforma de CPU
- Interrumpibilidad
- Mín.: Es la cantidad mínima de nodos.
- Máx.: Es la cantidad máxima de nodos. La cantidad máxima de nodos debe ser mayor que 0.
- 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.
- Para reutilizar un grupo de nodos existente de Dataproc en GKE, haz lo siguiente:
(Opcional) Si configuraste un servidor de historial persistente (PHS) de Dataproc para ver el historial de trabajos de Spark en clústeres de Dataproc en GKE activos y borrados, 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 Dataproc en GKE.
Haz clic en Crear para crear el clúster de Dataproc. Tu clúster de Dataproc en GKE aparecerá en una lista en la página Clústeres. Su estado es Aprovisionando hasta que el clúster esté listo para usarse y, luego, cambia a En ejecución.
Establece las variables de entorno:
Notas: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
DP_CLUSTER: Establece el nombre del clúster virtual de Dataproc, 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: El valor de region debe ser el mismo que el de la región en la que se encuentra el clúster de GKE.GKE_CLUSTER: Es el nombre del clúster de GKE existente.BUCKET: (Opcional) Puedes especificar el nombre de un bucket de Cloud Storage que Dataproc usará para almacenar artefactos de forma intermedia. 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: (Opcional) Servidor PHS de Dataproc que se usará para ver el historial de trabajos de Spark en clústeres de Dataproc en GKE activos y borrados. El clúster de PHS debe estar ubicado en la misma región que el clúster virtual de Dataproc en GKE.
Ejecuta el siguiente comando:
Notas: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}--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, como3,3.1olatest, o especificar la versión secundaria completa, como3.1-dataproc-5.--staging-bucket: Borra esta marca para que Dataproc en GKE cree un bucket de staging.--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. Lista de parámetros de configuración del grupo de nodos de Dataproc en GKE, separados por comas, por ejemplo: Debes especificar el--pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
namey elroledel grupo de nodos. Otros parámetros de configuración del grupo de nodos son opcionales. Puedes usar varias marcas--poolspara especificar varios grupos de nodos. Al menos un grupo de nodos debe tener el roldefault. 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.
- PROJECT: ID del proyecto de Google Cloud
- REGION: Región del clúster virtual de Dataproc (la misma región que la 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. Deja este campo vacío para que Dataproc en GKE cree un bucket de etapa de pruebas.
Borra cualquiera de los siguientes recursos que se usaron en esta guía de inicio rápido y que no quieras seguir usando.
Borra los grupos de nodos que usa el clúster de Dataproc en GKE.
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 estos roles ya se hayan otorgado. Para verificar las asignaciones 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 Dataproc, 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 Dataproc, pídele a tu administrador que otorgue a la cuenta de servicio predeterminada de Compute Engine el rol de IAM de trabajador de Dataproc (roles/dataproc.worker) en el proyecto.
Crea un clúster virtual de Dataproc en GKE
Se crea un clúster virtual de Dataproc en GKE como 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 de trabajador y principal de Dataproc independientes.
Console
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 en GKE.
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:
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
Después de que se ejecute tu 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 Dataproc 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 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 de 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