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
  • Aísla los trabajos de Spark para acelerar el ciclo de vida de las 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 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 funcionar 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 de 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 como “GCE_METADATA” para usar la autenticación de la VM de Compute Engine.
      • Establece --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=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 la función de IAM Kubernetes Engine Admin a la cuenta de servicio del agente de servicio de Dataproc. Esta cuenta de servicio tiene el siguiente formato: service-{your-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

Crea un clúster de Dataproc en GKE requiere una especificación de número de versión. El número de versión corresponde a un paquete específico de componentes obligatorios y opcionales, que se instalarán en el clúster del 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 tenga 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

El clúster usa de forma automática las imágenes de Docker predeterminadas de Dataproc según la versión especificada cuando se creó el clúster de Dataproc. La configuración predeterminada de la imagen configura Spark con el conector de Cloud Storage. 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

  • Controladores inactivos : Spark 2.4.1 y versiones posteriores tienen un problema conocido, SPARK-27812, donde los controladores (en particular, los controladores de PySpark) se detienen. debido a un subproceso de cliente de Kubernetes. Para solucionar este problema, detén tu SparkSession o SparkContext mediante una llamada a spark.stop() en tu SparkSession o sc.stop() en tu SparkContext.

Realice una limpieza

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