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 contenerizados,Google Cloud también proporciona opciones completamente administradas y sin servidores que pueden simplificar las operaciones y acelerar el desarrollo. Para comparar las opciones de implementación de Spark Managed Service para Apache Spark, consulta Cómo decidir el mejor servicio de Spark.
Antes de comenzar
- Accede a tu cuenta de Google Cloud . 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.
-
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.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instala 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.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instala 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.
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 Managed Service para Apache Spark, pídele a tu administrador que te otorgue los siguientes roles de IAM:
- 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
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 for 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
Se crea un clúster virtual de Managed Service para Apache Spark en GKE como plataforma de implementación para los 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 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 separado en el clúster de GKE
- Cada clúster virtual:
Console
No se admite la creación de un clúster de Managed Service para Apache Spark en GKE en la consola de Google Cloud .
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 Managed Service para Apache Spark en GKE.
Establece las variables de entorno:
Notas: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
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: El region debe ser el mismo que 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 Managed Service para Apache Spark usará para preparar artefactos. Si no especificas un bucket, Managed Service para Apache Spark 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 de PHS de Managed Service para Apache Spark que se usará 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.
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 Managed Service para Apache Spark. Puedes usar un identificador, como3,3.1olatest, o bien especificar la versión secundaria completa, como3.1-dataproc-5.--staging-bucket: Borra esta marca para que Managed Service para Apache Spark en GKE cree un bucket de etapa de pruebas.--pools: Esta marca se usa para especificar un grupo de nodos nuevo o existente que Managed Service para Apache Spark creará o usará para realizar la carga de trabajo. Lista de parámetros de configuración del grupo de nodos de Managed Service para Apache Spark 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 Managed Service para Apache Spark (identidad del plano de datos) predeterminada del clúster virtual.
REST
Completa un virtualClusterConfig como parte de una solicitud a la API de 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 (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. 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
Después de que se ejecute tu clúster virtual de Managed Service para Apache Spark 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 Managed Service para Apache Spark (con 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 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
Realiza una limpieza
Borra cualquiera de los siguientes recursos que se usaron en esta guía de inicio rápido y que no quieras seguir usando.
Borra el clúster de Managed Service para Apache Spark en GKE.
Borra los grupos de nodos que usa el clúster de Managed Service para Apache Spark en GKE.