Envía una carga de trabajo por lotes de Apache Spark

Aprende a enviar una carga de trabajo por lotes en la infraestructura de procesamiento de Managed Service para Apache Spark que ajusta los recursos según sea necesario.

Antes de comenzar

Configura tu proyecto y, si es necesario, otorga roles de Identity and Access Management.

Configura tu proyecto

Realiza uno o más de los siguientes pasos según sea necesario:

  1. Accede a tu Google Cloud cuenta de. 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.

    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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

Otorga roles de IAM si es necesario

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 ya se hayan otorgado estos roles. Para verificar las concesiones 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 enviar una carga de trabajo por lotes sin servidores, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Función de cuenta de servicio

Para garantizar que la cuenta de servicio predeterminada de Compute Engine tenga los permisos necesarios para enviar una carga de trabajo por lotes sin servidores, 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.

Envía una carga de trabajo por lotes de Spark

Puedes usar la Google Cloud consola, Google Cloud CLI o la API de REST para crear y enviar una carga de trabajo por lotes de Managed Service para Apache Spark.

Console

  1. En la Google Cloud consola, ve a Lotes de Managed Service para Apache Spark.

  2. Haz clic en Crear.

  3. Envía una carga de trabajo por lotes de Spark que calcule el valor aproximado de pi. Para ello, selecciona y completa los siguientes campos:

    • Información del lote:
      • ID del 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: Confirma o selecciona la versión del entorno de ejecución 3.0.
      • Clase principal:
        org.apache.spark.examples.SparkPi
      • Archivos JAR (este archivo está preinstalado en el entorno de ejecución de Spark de Managed Service para Apache Spark).
        file:///usr/lib/spark/examples/jars/spark-examples.jar
      • Argumentos: 1000.
    • Configuración de ejecución: Selecciona Cuenta de servicio. De forma predeterminada, el lote se ejecutará con la cuenta de servicio predeterminada de Compute Engine. Puedes especificar una cuenta de servicio personalizada. La cuenta de servicio predeterminada o personalizada debe tener el rol de trabajador de Dataproc.
    • Configuración de red: Selecciona una subred en la región de la sesión. Managed Service para Apache Spark habilita el Acceso privado a Google (PGA) en la subred especificada. Para conocer los requisitos de conectividad de red, consulta Configuración de red de Managed Service para Apache Spark.
    • Propiedades: Ingresa la Key (nombre de la propiedad) y el Value de propiedades de Spark compatibles para establecer en tu carga de trabajo por lotes de Spark. Nota: A diferencia de las propiedades del clúster de Managed Service para Apache Spark , las propiedades de la carga de trabajo de Managed Service para Apache Spark no incluyen un prefijo spark:.
    • Otras opciones:
  4. Haz clic en Enviar para ejecutar la carga de trabajo por lotes de Spark.

gcloud

Para 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 la terminal o en Cloud Shell.

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

Reemplaza lo siguiente:

  • REGION: Especifica la región donde se ejecutará tu carga de trabajo.
  • Otras opciones: Puedes agregar gcloud dataproc batches submit spark marcas para especificar otras opciones de carga de trabajo y propiedades de Spark.
    • --jars: El archivo JAR de ejemplo está preinstalado en el entorno de ejecución de Spark. El argumento de 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 "-- ").
    • --subnet: Puedes agregar esta marca para especificar el nombre de una subred en la región de la sesión. Si no especificas una subred, Managed Service para Apache Spark selecciona la subred default en la región de la sesión. Managed Service para Apache Spark habilita el Acceso privado a Google (PGA) en la subred. Para conocer los requisitos de conectividad de red, consulta Configuración de red de Managed Service para Apache Spark.
    • --tags: Puedes agregar esta marca para especificar etiquetas de red para el control de tráfico. Usa etiquetas de red para limitar la conectividad. En producción, la práctica recomendada es limitar las reglas de firewall a las direcciones IP que usan tus cargas de trabajo de Spark.
    • --properties: Puedes agregar esta marca para ingresar las propiedades de Spark compatibles que usará tu carga de trabajo por lotes de Spark.
    • --deps-bucket: Puedes agregar esta marca para especificar un bucket de Cloud Storage en el que Managed Service para Apache Spark subirá las dependencias de la carga de trabajo. No se requiere el prefijo de URI gs:// del bucket . Puedes especificar la ruta de acceso o el nombre del bucket. Managed Service para Apache 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 tu carga de trabajo por lotes hace referencia a archivos en tu máquina local.
    • --ttl: Puedes agregar la --ttl marca para especificar la duración del ciclo de vida del lote. Cuando la carga de trabajo supera esta duración, se finaliza de forma incondicional sin esperar a que finalice el trabajo en curso. Especifica la duración con un s, m, h, o d (segundos, minutos, horas o días) sufijo. El valor mínimo es de 10 minutos (10m), y el valor máximo es de 14 días (14d).
      • Lotes de entorno de ejecución 1.1 o 2.0: Si --ttl no se especifica para una carga de trabajo por lotes de entorno de ejecución 1.1 o 2.0, se permite que la carga de trabajo se ejecute hasta que salga de forma natural (o se ejecute para siempre si no sale).
      • Lotes de entorno de ejecución 2.1 o versiones posteriores: Si no se especifica --ttl para una carga de trabajo por lotes de entorno de ejecución 2.1 o versiones posteriores, el valor predeterminado es 4h.
    • --service-account: Puedes especificar una cuenta de servicio para usar y ejecutar tu carga de trabajo. Si no especificas una cuenta de servicio, la carga de trabajo se ejecuta con la cuenta de servicio predeterminada de Compute Engine. Tu cuenta de servicio debe tener el rol de trabajador de Dataproc.
    • Almacén de metadatos de Hive: El siguiente comando configura una carga de trabajo por lotes para usar un almacén de metadatos de Hive externo autoadministrado con una configuración estándar de Spark.
      gcloud dataproc batches submit spark\
          --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. El siguiente comando crea un PHS en un clúster de Managed Service para Apache Spark de un solo nodo. El PHS debe ubicarse en la región en la que ejecutas cargas de trabajo por lotes, y el bucket-name de Cloud Storage debe existir.
        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 tu 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 --version marca para especificar la versión del entorno de ejecución de Managed Service para Apache Spark 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 con Managed Service para Apache Spark batches.create`

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

  • project-id: Es el ID del proyecto de Google Cloud .
  • region: Es una región de Compute Engine en la que Managed Service para Apache Spark ejecutará la carga de trabajo.
  • Notas:

    • PROJECT_ID: Es el ID del Google Cloud proyecto. Los IDs del proyecto se enumeran en la sección Información del proyecto en el Google Cloud panel de la consola.
    • REGION: Es la región de la sesión.

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"
    ],
    "runtimeConfig": {
      "version": "2.3",
    },
    "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":{
    "version":"2.3",
    "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

Las cargas de trabajo de Managed Service para Apache Spark consumen unidades de procesamiento de datos (DCU) y recursos de almacenamiento de ordenamiento aleatorio. Para obtener un ejemplo que genere Managed Service para Apache Spark UsageMetrics para estimar el consumo de recursos y los costos de la carga de trabajo, consulta Precios de Managed Service para Apache Spark.

¿Qué sigue?

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