Dataproc en Google Kubernetes Engine

Resumen

Esta función te permite enviar trabajos de Spark a un clúster de Google Kubernetes Engine en ejecución desde la API de trabajos de Dataproc.

Usa esta función para lo siguiente:

  • Implementar una administración unificada de recursos
  • Aislar trabajos de Spark para acelerar el ciclo de vida de estadísticas

Ejecuta trabajos de Dataproc en GKE

  1. Crear un clúster de GKE

    Se necesita un clúster de GKE en ejecución como la plataforma de implementación para los componentes de Dataproc.

    gcloud

    Configura las variables de entorno y, luego, ejecuta el comando gcloud beta container clusters create de forma local o en Cloud Shell para crear un clúster de GKE que pueda funcionan como un clúster de Dataproc.

    1. Configurar variables de entorno.
      • Establece gke-cluster-name. Use solo caracteres alfanuméricos en minúscula y “-”.
      • Configura el clúster region, por ejemplo, "us-central1".
      • Configura el clúster zone en una zona en la región seleccionada, por ejemplo, “us-central1-a”.
      GKE_CLUSTER=gke-cluster-name \
        GCE_REGION=region
      
    2. Ejecuta el comando gcloud.
      • Configura --scopes como “cloud-platform” para usar la cuenta de servicio del clúster como mecanismo de permisos.
      • Configura --workload-metadata-from-node como “GCE_METADATA” para usar la autenticación de VM de Compute Engine.
      • Configura --machine-type en “n1-standard-4” (se recomienda un mínimo de 4 CPU).
      gcloud beta container clusters create "${GKE_CLUSTER}" \
          --scopes=cloud-platform \
          --workload-metadata-from-node=GCE_METADATA \
          --machine-type=n1-standard-4 \
          --region="${GCE_REGION}"
      
  2. Crea un clúster de Dataproc en GKE

    En este paso, se asigna un clúster de Dataproc a un clúster de GKE existente, y se implementan componentes que vinculan el clúster de GKE con el servicio de Dataproc para permitir el envío de trabajos de Spark.

    gcloud

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

    1. Configurar variables de entorno.
      • Usa solo caracteres alfanuméricos en minúscula y “-” para dataproc-cluster-name.
      • Especifica un Dataproc en GKE version, por ejemplo, "1.4.27-beta".
      • Especifica un URI bucket de Cloud Storage para artefactos de etapa de pruebas.

      DATAPROC_CLUSTER=dataproc-cluster-name \
        VERSION=version \
        BUCKET=bucket-name
      

    2. Ejecuta el comando gcloud .

      gcloud beta dataproc clusters create "${DATAPROC_CLUSTER}" \
          --gke-cluster="${GKE_CLUSTER}" \
          --region="${GCE_REGION}" \
          --image-version="${VERSION}" \
          --bucket="${BUCKET}"
      

      Notas:

      • El comando anterior generará un espacio de nombres dentro del clúster de GKE automáticamente, pero puedes especificar el espacio de nombres si agregas el argumento --gke-cluster-namespace.
      • Debes otorgar acceso a las cuentas de servicio de Dataproc. La cuenta de servicio específica del proyecto de Dataproc debe tener la función de IAM Kubernetes Engine Admin. Esta cuenta de servicio tiene el siguiente formato: service-{project-number}@dataproc-accounts.iam.gserviceaccount.com).

        • Solo para la versión 1.4.23-beta, también debes otorgar a la cuenta de instalación de Dataproc acceso service-51209575642@gcp-sa-saasmanagement.iam.gserviceaccount.com a tu clúster de Kubernetes a través de la función de IAM Kubernetes Engine Admin.

  3. Enviar un trabajo de Spark

    Envía trabajos de Spark al clúster de Dataproc mediante los comandos gcloud dataproc, la API Jobs de Dataproc y Cloud Console (consulta Envía un trabajo).

    Ejemplo de trabajo de Spark

    gcloud dataproc jobs submit spark \
        --cluster="${DATAPROC_CLUSTER}" \
        --region="${GCE_REGION}" \
        --class=org.apache.spark.examples.SparkPi \
        --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar
    

    Ejemplo de trabajo de PySpark:

    gcloud dataproc jobs submit pyspark \
        --cluster="${DATAPROC_CLUSTER}" foo.py \
        --region="${GCE_REGION}"
    

    Ejemplo de trabajo SparkR:

    gcloud dataproc jobs submit spark-r \
        --cluster="${DATAPROC_CLUSTER}" file:/usr/lib/spark/examples/src/main/r/dataframe.R \
        --region="${GCE_REGION}"
    

Versiones

Crear un clúster de Dataproc en GKE requiere una especificación de número de versión. Un número de versión corresponde a un paquete específico de componentes opcionales y obligatorios, que se instalarán en el clúster en el espacio de nombres específico del clúster de Dataproc. En la siguiente tabla, se enumeran las versiones disponibles.

Versión Componentes Imágenes predeterminadas Notas
1.4.23-beta Agente de trabajo de Dataproc, operador de Spark Spark: gcr.io/cloud-dataproc/spark:1.4.23-deb9-beta
  • Admite los tipos de trabajo Spark, PySpark y SparkR
  • Requiere que la cuenta de servicio service-51209575642@gcp-sa-saasmanagement.iam.gserviceaccount.com reciba la función de IAM Kubernetes Engine Admin.
1.4.27-beta Agente de trabajo de Dataproc, operador de Spark Spark: gcr.io/cloud-dataproc/spark:1.4.27-deb9-beta
  • Admite los tipos de trabajo Spark, PySpark y SparkR

Imagen de Docker de Dataproc

Las imágenes de Docker de Dataproc predeterminadas se usan automáticamente en el clúster según la versión especificada en el momento en que se creó el clúster de Dataproc. La configuración predeterminada de la imagen configura Spark con Cloud Storage Connector. Puedes ver las imágenes predeterminadas en la documentación de la versión.

Logging

Los registros del controlador de trabajos y del ejecutor están disponibles en Stackdriver Logging en el clúster y espacio de nombres de GKE.

Soluciona problemas

  • Los controladores aislados Spark 2.4.1+ tienen un problema conocido, SPARK-27812, en el que se interrumpen los controladores (en particular, los controladores de PySpark) debido a un subproceso de cliente de Kubernetes. Para solucionar este problema, sigue estos pasos:

    1. Llama a spark.stop() en tu SparkSession o a sc.stop() en tu SparkContext para detener tu SparkSession o SparkContext.
    2. Usa una imagen basada en Spark 2.4.0, como gcr.io/dataproc-2f10d78d114f6aaec7646/spark/spark.

Limpia

Para borrar los recursos asignados, usa los siguientes comandos de eliminación gcloud. Para evitar errores, borra el clúster de Dataproc antes de borrar el clúster de GKE.

Borra los recursos del clúster de Dataproc.

gcloud beta dataproc clusters delete "${DATAPROC_CLUSTER}" \
    --region=${GCE_REGION}

Borra el clúster de GKE.

gcloud beta container clusters delete "${GKE_CLUSTER}"  \
  --region="${GCE_REGION}"