En esta página se describe cómo ejecutar un trabajo de Dataflow mediante una plantilla flexible. Las plantillas flexibles te permiten empaquetar un flujo de procesamiento de Dataflow para que puedas ejecutarlo sin tener un entorno de desarrollo de Apache Beam.
Permisos obligatorios
Cuando ejecutas una plantilla flexible, Dataflow crea una tarea. Para crear el trabajo, la cuenta de servicio de Dataflow necesita el siguiente permiso:
dataflow.serviceAgent
Cuando usas Dataflow por primera vez, el servicio te asigna este rol, por lo que no tienes que conceder este permiso.
De forma predeterminada, la cuenta de servicio de Compute Engine se usa en las VMs de inicio y de trabajador. La cuenta de servicio necesita los siguientes roles y funciones:
- Administrador de objetos de Storage (
roles/storage.objectAdmin) - Lector (
roles/viewer) - Trabajador de Dataflow (
roles/dataflow.worker) - Acceso de lectura y escritura al bucket de almacenamiento provisional
- Acceso de lectura a la imagen de la plantilla Flex
Para conceder acceso de lectura y escritura al segmento de almacenamiento provisional, puedes usar el rol Administrador de objetos de Storage (roles/storage.objectAdmin). Para obtener más información, consulta Roles de gestión de identidades y accesos para Cloud Storage.
Para conceder acceso de lectura a la imagen de la plantilla de Flex, puedes usar el rol Lector de objetos de Storage (roles/storage.objectViewer). Para obtener más información, consulta Configurar el control de acceso.
Ejecutar una plantilla Flex
Para ejecutar una plantilla Flex, usa el comando
gcloud dataflow flex-template run:
gcloud dataflow flex-template run JOB_ID \ --template-file-gcs-location gs://TEMPLATE_FILE_LOCATION \ --region REGION \ --staging-location STAGING_LOCATION \ --temp-location TEMP_LOCATION \ --parameters PARAMETERS \ --additional-user-labels LABELS \
Haz los cambios siguientes:
JOB_ID: el ID de tu trabajoTEMPLATE_FILE_LOCATION: la ubicación del archivo de plantilla en Cloud StorageREGION: la región en la que se ejecutará el trabajo de DataflowSTAGING_LOCATION: la ubicación de Cloud Storage para almacenar archivos localesTEMP_LOCATION: la ubicación de Cloud Storage en la que se escribirán los archivos temporales. Si no se define, se usará la ubicación de almacenamiento provisional de forma predeterminada.PARAMETERS: parámetros de la canalización del trabajoLABELS: opcional. Etiquetas adjuntas a tu trabajo, con el formatoKEY_1=VALUE_1,KEY_2=VALUE_2,....
Durante el paso de almacenamiento provisional de la activación de una plantilla, Dataflow escribe archivos en la ubicación de almacenamiento provisional. Dataflow lee estos archivos de almacenamiento para crear el gráfico de la tarea. Durante el paso de ejecución, Dataflow escribe archivos en la ubicación temporal.
Definir opciones de flujo de procesamiento
Para definir las opciones de la canalización al ejecutar una plantilla Flex, usa las siguientes marcas en el comando gcloud dataflow flex-template run:
parameters: Usa esta marca para definir los siguientes tipos de opciones de canalización:Opciones de flujo de procesamiento compatibles con las plantillas Flex. Para ver una lista de las opciones que admiten las plantillas flexibles, consulta Opciones de flujo de procesamiento.
Opciones de flujo de procesamiento declaradas en los metadatos de la plantilla.
additional-pipeline-options: Usa esta marca para definir otras opciones de la canalización de Apache Beam que no sean compatibles directamente con las plantillas Flex.additional-experiments: Usa esta marca para definir opciones de canalización experimentales (equivalente a la opciónexperiments).
gcloud
Incluye opciones de canalización con la marca
parameters.Incluye experimentos de tiempo de ejecución y opciones de canalización mediante las marcas
additional-experimentsyadditional-pipeline-options.
Cuando transfieras parámetros de tipo List o Map, es posible que tengas que definir parámetros en un archivo YAML y usar la marca flags-file.
API
Incluye opciones de la canalización con el campo
parameters.Incluya experimentos de tiempo de ejecución y opciones de canalización mediante los campos
additionalExperimentsyadditionalPipelineOptions.
En el siguiente ejemplo se muestra cómo incluir opciones de canalización, experimentos y opciones adicionales en un cuerpo de solicitud:
{
"jobName": "my-flex-template-job",
"parameters": {
"option_defined_in_metadata": "value"
},
"environment": {
"additionalExperiments": [
"use_runner_v2"
],
"additionalPipelineOptions": {
"common_pipeline_option": "value"
}
}
}
Cuando usas plantillas flexibles, puedes configurar algunas opciones de la canalización durante la inicialización, pero otras no se pueden cambiar. Si se sobrescriben los argumentos de línea de comandos que requiere la plantilla flex, es posible que el trabajo ignore, sobrescriba o descarte las opciones de la canalización que haya pasado el lanzador de plantillas. Es posible que la tarea no se inicie o que se inicie una tarea que no use la plantilla Flex. Para obtener más información, consulta No se ha podido leer el archivo de trabajo.
Durante la inicialización de la canalización, no cambies las siguientes opciones de canalización:
Java
runnerprojectjobNametemplateLocationregion
Python
runnerprojectjob_nametemplate_locationregion
Go
runnerprojectjob_nametemplate_locationregion
Bloquear las claves SSH del proyecto en las VMs que usan claves SSH basadas en metadatos
Puedes impedir que las VMs acepten claves SSH almacenadas en los metadatos del proyecto bloqueando las claves SSH del proyecto en las VMs. Usa la marca additional-experiments con la opción de servicio block_project_ssh_keys:
--additional-experiments=block_project_ssh_keys
Para obtener más información, consulta las opciones de servicio de Dataflow.
Actualizar una tarea de plantilla Flex
En la siguiente solicitud de ejemplo se muestra cómo actualizar un trabajo de streaming de plantillas mediante el método projects.locations.flexTemplates.launch. Si quieres usar la herramienta de línea de comandos gcloud, consulta Actualizar un flujo de procesamiento.
Si quieres actualizar una plantilla clásica, usa projects.locations.templates.launch en su lugar.
Sigue los pasos para crear una tarea de streaming a partir de una plantilla flexible. Envía la siguiente solicitud HTTP POST con los valores modificados:
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/flexTemplates:launch { "launchParameter": { "update": true "jobName": "JOB_NAME", "parameters": { "input_subscription": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_NAME", "output_table": "PROJECT_ID:DATASET.TABLE_NAME" }, "containerSpecGcsPath": "STORAGE_PATH" }, }- Sustituye
PROJECT_IDpor el ID del proyecto. - Sustituye
REGIONpor la región de Dataflow de la tarea que vas a actualizar. - Sustituye
JOB_NAMEpor el nombre exacto del trabajo que quieras actualizar. - Asigna
parametersa tu lista de pares clave-valor. Los parámetros que se indican son específicos de este ejemplo de plantilla. Si usas una plantilla personalizada, modifica los parámetros según sea necesario. Si utilizas la plantilla de ejemplo, sustituye las siguientes variables.- Sustituye
SUBSCRIPTION_NAMEpor el nombre de tu suscripción a Pub/Sub. - Sustituye
DATASETpor el nombre de tu conjunto de datos de BigQuery. - Sustituye
TABLE_NAMEpor el nombre de tu tabla de BigQuery.
- Sustituye
- Sustituye
STORAGE_PATHpor la ubicación de Cloud Storage del archivo de plantilla. La ubicación debe empezar porgs://.
- Sustituye
Usa el parámetro
environmentpara cambiar la configuración del entorno. Para obtener más información, consultaFlexTemplateRuntimeEnvironment.Opcional: Para enviar tu solicitud con curl (Linux, macOS o Cloud Shell), guarda la solicitud en un archivo JSON y, a continuación, ejecuta el siguiente comando:
curl -X POST -d "@FILE_PATH" -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/flexTemplates:launchSustituye FILE_PATH por la ruta al archivo JSON que contiene el cuerpo de la solicitud.
Usa la interfaz de monitorización de flujo de datos para comprobar que se ha creado un nuevo trabajo con el mismo nombre. Este trabajo tiene el estado Actualizado.
Siguientes pasos
- Consulta cómo crear una plantilla flexible para tu canalización de Apache Beam.
- Para obtener más información sobre las plantillas clásicas, las plantillas Flex y sus casos prácticos, consulta Plantillas de Dataflow.
- Para obtener información sobre cómo solucionar problemas de plantillas Flex, consulta Solucionar problemas de tiempo de espera de plantillas Flex.
- Para ver más arquitecturas de referencia, diagramas y prácticas recomendadas, consulta el centro de arquitectura de Cloud.