Ejecuta una carga de trabajo por lotes de Apache Spark

Aprende a usar Dataproc Serverless para enviar una carga de trabajo por lotes en una infraestructura de procesamiento administrada por Dataproc que escala recursos según sea necesario.

Antes de comenzar

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita la API de Dataproc.

    Habilita la API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  7. Habilita la API de Dataproc.

    Habilita la API

Envía una carga de trabajo por lotes de Spark

Console

  1. En la consola de Google Cloud, ve a Lotes de Dataproc. Haz clic en Crear para abrir la página Crear lote.

  2. Selecciona y completa los siguientes campos en la página para enviar una carga de trabajo por lotes de Spark que calcule el valor aproximado de pi:

    • Información por lotes:
      • ID de lote: especifica un ID para tu carga de trabajo por lotes. Este valor debe tener entre 4 y 63 caracteres en minúscula. Los caracteres válidos son /[a-z][0-9]-/.
      • Región: Selecciona una región en la que se ejecutará tu carga de trabajo.
    • Contenedor:
      • Tipo de lote: Spark.
      • Versión del entorno de ejecución: Se selecciona la versión predeterminada del entorno de ejecución. De manera opcional, puedes especificar una versión no predeterminada del entorno de ejecución de Dataproc Serverless.
      • Clase principal:
        org.apache.spark.examples.SparkPi
      • Archivos jar (este archivo está preinstalado en el entorno de ejecución Dataproc Serverless Spark).
        file:///usr/lib/spark/examples/jars/spark-examples.jar
      • Argumentos: 1,000.
    • Configuración de ejecución: Puedes especificar una cuenta de servicio para ejecutar tu carga de trabajo. Si no especificas una cuenta de servicio, la carga de trabajo se ejecuta en la cuenta de servicio predeterminada de Compute Engine.
    • Configuración de red: La subred de VPC que ejecuta Dataproc Serverless para las cargas de trabajo de Spark debe estar habilitada para el Acceso privado a Google y cumplir con los demás requisitos enumerados en la configuración de red de Dataproc Serverless para Spark. En la lista de subredes, se muestran las subredes de la red seleccionada que están habilitadas para el Acceso privado a Google.
    • Propiedades: Ingresa el Key (nombre de la propiedad) y el Value de las propiedades compatibles de Spark para configurar en tu carga de trabajo por lotes de Spark. Nota: A diferencia de las propiedades del clúster de Dataproc en Compute Engine, las propiedades de la carga de trabajo de Dataproc sin servidores para Spark no incluyen un prefijo spark:.
    • Otras opciones:
  3. Haz clic en ENVIAR para ejecutar la carga de trabajo por lotes de Spark.

gcloud

Si deseas enviar una carga de trabajo por lotes de Spark para calcular el valor aproximado de pi, ejecuta el siguiente comando gcloud dataproc batches submit spark de gcloud CLI de forma local en una ventana de terminal o en Cloud Shell.

gcloud dataproc batches submit spark \
    --region=REGION \
    --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
    --class=org.apache.spark.examples.SparkPi \
    -- 1000

Notas:

  • REGION: Especifica la región en la que se ejecutará tu carga de trabajo.
  • Subred: La subred de VPC que ejecuta Dataproc Serverless para las cargas de trabajo de Spark debe estar habilitada para el Acceso privado a Google y cumplir con los demás requisitos que se mencionan en la configuración de red de Dataproc Serverless para Spark. Si la subred de la red default correspondiente a la región especificada en el comando gcloud dataproc batches submit no está habilitada para el Acceso privado a Google, debes realizar una de las siguientes acciones:
    • Habilitar la subred de la red predeterminada de la región para el Acceso privado a Google
    • Usa la marca --subnet=[SUBNET_URI] en el comando para especificar una subred que tenga habilitado el Acceso privado a Google. Puedes ejecutar el comando gcloud compute networks describe [NETWORK_NAME] para enumerar los URI de las subredes en una red.
  • --jars: El archivo JAR de ejemplo está preinstalado en el entorno de ejecución de Spark. El argumento del comando 1000 que se pasa a la carga de trabajo de SparkPi especifica 1,000 iteraciones de la lógica de estimación de pi (los argumentos de entrada de la carga de trabajo se incluyen después de “--”).
  • --properties: Puedes agregar la marca --properties para ingresar las propiedades de Spark compatibles que deseas que use tu carga de trabajo por lotes de Spark.
  • --deps-bucket: Puedes agregar esta marca para especificar un bucket de Cloud Storage en el que Dataproc Serverless subirá las dependencias de la carga de trabajo. No se requiere el prefijo de URI gs:// del bucket. Puedes especificar la ruta o el nombre del bucket, por ejemplo, “mybucketname”. Dataproc Serverless para Spark sube los archivos locales a una carpeta /dependencies en el bucket antes de ejecutar la carga de trabajo por lotes. Nota: Esta marca es obligatoria si la carga de trabajo por lotes hace referencia a archivos en tu máquina local.
  • --ttl: Puedes agregar la marca --ttl para especificar la duración de la vida útil del lote. Cuando la carga de trabajo supera esta duración, se finaliza de forma incondicional y no se espera a que finalice el trabajo en curso. Especifica la duración con un sufijo s, m, h o d (segundos, minutos, horas o días). El valor mínimo es 10 minutos (10m) y el valor máximo es 14 días (14d).
    • Lotes de entorno de ejecución 1.1 o 2.0: Si no se especifica --ttl para una carga de trabajo por lotes de entorno de ejecución 1.1 o 2.0, la carga de trabajo puede ejecutarse hasta que salga de forma natural (o se ejecute para siempre si no sale).
    • Lotes de entorno de ejecución 2.1 o superiores: Si no se especifica --ttl para una carga de trabajo por lotes del entorno de ejecución 2.1 o posterior, el valor predeterminado es 4h.
  • Otras opciones: Puedes agregar marcas de comando gcloud dataproc batches submit para especificar otras opciones de cargas de trabajo y propiedades de Spark.
    • Hive Metastore: El siguiente comando configura una carga de trabajo por lotes para usar un hive Metastore autoadministrado externo con una configuración estándar de Spark.
      gcloud dataproc batches submit \
          --properties=spark.sql.catalogImplementation=hive,spark.hive.metastore.uris=METASTORE_URI,spark.hive.metastore.warehouse.dir=WAREHOUSE_DIR> \
          other args ...
              
    • Servidor de historial persistente:
      1. Con el siguiente comando, se crea un PHS en un clúster de Dataproc de un solo nodo. El PHS debe estar ubicado en la región en la que ejecutas las cargas de trabajo por lotes y debe existir el bucket-name de Cloud Storage.
        gcloud dataproc clusters create PHS_CLUSTER_NAME \
            --region=REGION \
            --single-node \
            --enable-component-gateway \
            --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/phs/*/spark-job-history
                     
      2. Envía una carga de trabajo por lotes y especifica el servidor de historial persistente en ejecución.
        gcloud dataproc batches submit spark \
            --region=REGION \
            --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
            --class=org.apache.spark.examples.SparkPi \
            --history-server-cluster=projects/project-id/regions/region/clusters/PHS-cluster-name \
            -- 1000
                      
    • Versión del entorno de ejecución: Usa la marca --version a fin de especificar la versión del entorno de ejecución de Dataproc Serverless para la carga de trabajo.
      gcloud dataproc batches submit spark \
          --region=REGION \
          --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
          --class=org.apache.spark.examples.SparkPi \
          --version=VERSION
          -- 1000
                  

API

En esta sección, se muestra cómo crear una carga de trabajo por lotes para calcular el valor aproximado de pi mediante Dataproc Serverless para Spark batches.create

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

  • project-id: Es un ID del proyecto de Google Cloud.
  • region: Una región de Compute Engine en la que Dataproc Serverless ejecutará la carga de trabajo.
  • Notas:
    • Custom-container-image: Especifica la imagen de contenedor personalizada con el formato de nombre de imagen de Docker: {hostname}/{project-id}/{image}:{tag}, por ejemplo, “gcr.io/my-project-id/my-image:1.0.1”. Nota: Debes alojar tu contenedor personalizado en Container Registry.
    • Subred: La subred de VPC que ejecuta Dataproc Serverless para las cargas de trabajo de Spark debe estar habilitada para el Acceso privado a Google y cumplir con los demás requisitos enumerados en la configuración de red de Dataproc Serverless para Spark. Si la subred de la red default correspondiente a la región especificada no está habilitada para el Acceso privado a Google, debes realizar una de las siguientes acciones:
      1. Habilitar la subred de la red predeterminada de la región para el Acceso privado a Google
      2. Usa el campo ExecutionConfig.subnetworkUri para especificar una subred que tenga habilitado el Acceso privado a Google. Puedes ejecutar el comando gcloud compute networks describe [NETWORK_NAME] para enumerar los URI de las subredes en una red.
    • sparkBatch.jarFileUris: El archivo JAR de ejemplo está preinstalado en el entorno de ejecución de Spark. El sparkBatch.args “1,000” se pasa a la carga de trabajo de SparkPi y especifica 1,000 iteraciones de la lógica de estimación de pi.
    • Spark properties: Puedes usar el campo RuntimeConfig.properties para ingresar las propiedades de Spark compatibles que quieras que use tu carga de trabajo por lotes de Spark.
    • --ttl: Puedes usar el campo EnvironmentConfig.ttl para especificar la duración de la vida útil del lote. Cuando la carga de trabajo supera esta duración, se finaliza de forma incondicional y no se espera a que finalice el trabajo en curso. Especifica la duración como la representación JSON para Duración. El valor mínimo es 10 minutos y el valor máximo es 14 días.
      • Lotes de entorno de ejecución 1.1 o 2.0: Si no se especifica --ttl para una carga de trabajo por lotes de entorno de ejecución 1.1 o 2.0, la carga de trabajo puede ejecutarse hasta que salga de forma natural (o se ejecute para siempre si no sale).
      • Lotes de entorno de ejecución 2.1 o más: Si no se especifica --ttl para una carga de trabajo por lotes de entorno de ejecución 2.1 o posterior, el valor predeterminado es de 4 horas.
    • Otras opciones:

    Método HTTP y URL:

    POST https://dataproc.googleapis.com/v1/projects/project-id/locations/region/batches

    Cuerpo JSON de la solicitud:

    {
      "sparkBatch":{
        "args":[
          "1000"
        ],
        "jarFileUris":[
          "file:///usr/lib/spark/examples/jars/spark-examples.jar"
        ],
        "mainClass":"org.apache.spark.examples.SparkPi"
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
    "name":"projects/project-id/locations/region/batches/batch-id",
      "uuid":",uuid",
      "createTime":"2021-07-22T17:03:46.393957Z",
      "sparkBatch":{
        "mainClass":"org.apache.spark.examples.SparkPi",
        "args":[
          "1000"
        ],
        "jarFileUris":[
          "file:///usr/lib/spark/examples/jars/spark-examples.jar"
        ]
      },
      "runtimeInfo":{
        "outputUri":"gs://dataproc-.../driveroutput"
      },
      "state":"SUCCEEDED",
      "stateTime":"2021-07-22T17:06:30.301789Z",
      "creator":"account-email-address",
      "runtimeConfig":{
        "properties":{
          "spark:spark.executor.instances":"2",
          "spark:spark.driver.cores":"2",
          "spark:spark.executor.cores":"2",
          "spark:spark.app.name":"projects/project-id/locations/region/batches/batch-id"
        }
      },
      "environmentConfig":{
        "peripheralsConfig":{
          "sparkHistoryServerConfig":{
          }
        }
      },
      "operation":"projects/project-id/regions/region/operation-id"
    }
    

Estima los costos de la carga de trabajo

Dataproc Serverless para las cargas de trabajo de Spark consumen recursos de unidad de procesamiento de datos (DCU) y Shuffle de almacenamiento. Si deseas ver un ejemplo que muestre UsageMetrics de Dataproc para estimar el consumo y los costos de recursos de las cargas de trabajo, consulta Precios de Dataproc Serverless .

¿Qué sigue?

Obtén más información acerca de los siguientes temas: