Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una tarea que se ejecuta en Azure Batch puede generar datos de salida cuando se ejecuta. Los datos de salida de tareas a menudo deben almacenarse para su recuperación por otras tareas del trabajo, la aplicación cliente que ejecutó el trabajo o ambos. Las tareas escriben datos de salida en el sistema de archivos de un nodo de proceso de Batch, pero todos los datos del nodo se pierden al restablecer su imagen inicial o cuando el nodo abandona el grupo. Las tareas también pueden tener un período de retención de archivos, después del cual se eliminan los archivos creados por la tarea. Por estas razones, es importante conservar la salida de la tarea que necesitará más adelante en un almacén de datos, como Azure Storage.
Para ver las opciones de la cuenta de almacenamiento en Batch, consulte Cuentas de Batch y Cuentas de Azure Storage.
Puede conservar los datos de tareas de Azure Batch mediante la biblioteca de convenciones de archivos para .NET. La biblioteca de convenciones de archivo simplifica el proceso de almacenamiento y recuperación de los datos de salida de tareas en Azure Storage. Puede usar la biblioteca de convenciones de archivo en el código de tarea y en el de cliente. En el modo de tarea, use la biblioteca para conservar los archivos. En el modo de cliente, use la biblioteca para enumerar y recuperar archivos. El código de la tarea también puede recuperar las salidas de las tareas precedentes de la cadena mediante la biblioteca, como en un escenario con dependencias entre tareas.
Para recuperar archivos de salida con la biblioteca de convenciones de archivo, busque los archivos de un trabajo o tarea. No es necesario conocer los nombres ni las ubicaciones de los archivos. En su lugar, puede enumerar los archivos por identificador y propósito. Por ejemplo, enumere todos los archivos intermedios de una tarea determinada. O bien, obtenga un archivo de vista previa para un trabajo determinado.
A partir de la versión 2017-05-01, la API del servicio Batch admite la conservación de datos de salida en Azure Storage para tareas y tareas de administrador de trabajos que se ejecutan en grupos creados con la configuración de la máquina virtual (VM). Puede guardar la salida desde dentro del código que crea una tarea. Este método es una alternativa a la biblioteca de convenciones de archivo. Puede modificar las aplicaciones cliente de Batch para conservar la salida sin necesidad de actualizar la aplicación en la que se ejecuta la tarea. Para más información, consulte Almacenamiento de datos de tareas en Azure Storage con la API del servicio Batch.
Casos de uso de la biblioteca
Azure Batch proporciona varias maneras de conservar la salida de la tarea. Use la biblioteca de convenciones de archivo cuando desee:
- Modifique el código de la aplicación en la que se ejecuta la tarea para conservar los archivos.
- Transmita datos a Azure Storage mientras la tarea todavía se está ejecutando.
- Guarde los datos de los grupos.
- Busque y descargue archivos de salida de tareas por identificador o propósito en la aplicación cliente u otras tareas.
- Vea la salida de tarea en Azure Portal.
En otros escenarios, es posible que desee considerar un enfoque diferente. Para obtener más información sobre otras opciones, consulte Guardar salidas de trabajos y tareas en Azure Storage.
¿Cuál es el estándar de convenciones de archivo por lotes?
El estándar Batch File Conventions proporciona un esquema de nomenclatura para los contenedores de destino y las rutas de acceso de blob a las que se escriben los archivos de salida. Los archivos almacenados en Azure Storage que siguen el estándar se pueden ver automáticamente en Azure Portal.
La biblioteca de convenciones de archivo para .NET asigna automáticamente nombres a los contenedores de almacenamiento y los archivos de salida de tareas según el estándar. La biblioteca también proporciona métodos para consultar archivos de salida en Azure Storage. Puede consultar por identificador de trabajo, identificador de tarea o propósito.
Si está desarrollando con un lenguaje distinto de .NET, puede implementar usted mismo el estándar de convenciones de archivos en su aplicación. Para obtener más información, consulte Implementación del estándar de convenciones de archivos por lotes.
Vinculación de una cuenta de Azure Storage
Para conservar los datos de salida en Azure Storage mediante la biblioteca De convenciones de archivo, primero vincule una cuenta de Azure Storage a la cuenta de Batch.
- Inicie sesión en Azure Portal.
- Busque y seleccione Batch en la barra de búsqueda.
- Seleccione la cuenta de Batch para vincularla con Azure Storage.
- En la página Cuenta de Batch, en Configuración, seleccione Cuenta de almacenamiento.
- Si aún no tiene una cuenta de Azure Storage asociada a la cuenta de Batch, seleccione Cuenta de almacenamiento (Ninguno).
- Seleccione la cuenta de Azure Storage que se va a usar. Para obtener el mejor rendimiento, use una cuenta en la misma región que la cuenta de Batch.
Conservar los datos de salida
Puede guardar los datos de salida de trabajos y tareas con la biblioteca de convenciones de archivo. En primer lugar, cree un contenedor en Azure Storage. A continuación, guarde la salida en el contenedor. Utilice la biblioteca de cliente de Azure Storage para .NET en el código de tarea para subir la salida de la tarea al contenedor.
Para más información sobre cómo trabajar con contenedores y blobs en Azure Storage, consulte Introducción a Azure Blob Storage mediante .NET.
Todas las salidas de trabajos y tareas guardados con la biblioteca de convenciones de archivo se almacenan en el mismo contenedor. Si un gran número de tareas intenta conservar archivos al mismo tiempo, es posible que se apliquen los límites de limitación de Azure Storage. Para más información, consulte Lista de comprobación de rendimiento y escalabilidad para Blob Storage.
Creación de un contenedor de almacenamiento
Para conservar la salida de la tarea en Azure Storage, primero cree un contenedor mediante una llamada a CloudJob. PrepareOutputStorageAsync. Este método de extensión toma un objeto CloudStorageAccount como parámetro. El método crea un contenedor con un nombre establecido en función del estándar de convenciones de archivo. Los contenidos del contenedor son accesibles a través del Portal de Azure y los métodos de recuperación descritos en este artículo.
Normalmente, cree un contenedor en tu aplicación cliente, que cree tus grupos, tus trabajos y tus tareas. Por ejemplo:
CloudJob job = batchClient.JobOperations.CreateJob(
"myJob",
new PoolInformation { PoolId = "myPool" });
// Create reference to the linked Azure Storage account
CloudStorageAccount linkedStorageAccount =
new CloudStorageAccount(myCredentials, true);
// Create the blob storage container for the outputs
await job.PrepareOutputStorageAsync(linkedStorageAccount);
Almacenar salidas de tareas
Después de crear el contenedor de almacenamiento, las tareas pueden guardar la salida en el contenedor mediante TaskOutputStorage. Esta clase está disponible en la biblioteca de convenciones de archivo.
En el código de la tarea, cree un objeto TaskOutputStorage . Cuando la tarea complete su trabajo, llame a TaskOutputStorage. Método SaveAsync . Este paso guarda la salida en Azure Storage.
CloudStorageAccount linkedStorageAccount = new CloudStorageAccount(myCredentials);
string jobId = Environment.GetEnvironmentVariable("AZ_BATCH_JOB_ID");
string taskId = Environment.GetEnvironmentVariable("AZ_BATCH_TASK_ID");
TaskOutputStorage taskOutputStorage = new TaskOutputStorage(
linkedStorageAccount, jobId, taskId);
/* Code to process data and produce output file(s) */
await taskOutputStorage.SaveAsync(TaskOutputKind.TaskOutput, "frame_full_res.jpg");
await taskOutputStorage.SaveAsync(TaskOutputKind.TaskPreview, "frame_low_res.jpg");
Parámetro kind de TaskOutputStorage.El método SaveAsync clasifica los archivos persistentes. Hay cuatro tipos predefinidos taskOutputKind : TaskOutput, TaskPreview, TaskLogy TaskIntermediate. también puede definir categorías personalizadas de salida.
Especifique qué tipo de salidas se van a enumerar al consultar Batch más adelante. A continuación, al enumerar las salidas de una tarea, puede filtrar por uno de los tipos de salida. Por ejemplo, filtre por "Dame la salida de vista previa de la tarea 109". Para obtener más información, consulte Recuperación de datos de salida.
El tipo de salida también determina dónde aparece un archivo de salida en Azure Portal. Los archivos de la categoría TaskOutput se encuentran en Archivos de salida de la tarea. Los archivos de la categoría TaskLog se encuentran en Registros de tareas.
Almacenar resultados de trabajo
También puede almacenar las salidas asociadas a un trabajo completo. Por ejemplo, en la tarea de combinación de un trabajo de representación de una película, podría guardar la película totalmente representada como una salida de trabajo. Una vez completado el trabajo, la aplicación cliente puede enumerar y recuperar las salidas del trabajo. La aplicación cliente no tiene que consultar las tareas individuales.
Almacene la salida del trabajo llamando al método JobOutputStorage.SaveAsync. Especifique JobOutputKind y el nombre de archivo. Por ejemplo:
CloudJob job = new JobOutputStorage(acct, jobId);
JobOutputStorage jobOutputStorage = job.OutputStorage(linkedStorageAccount);
await jobOutputStorage.SaveAsync(JobOutputKind.JobOutput, "mymovie.mp4");
await jobOutputStorage.SaveAsync(JobOutputKind.JobPreview, "mymovie_preview.mp4");
Al igual que con el tipo TaskOutputKind para las salidas de tarea, use el tipo JobOutputKind para clasificar los archivos persistentes de un trabajo. Más adelante, puede enumerar un tipo específico de salida. El tipo JobOutputKind incluye categorías de salida y vista previa. El tipo también admite la creación de categorías personalizadas.
Almacenar registros de tareas
Es posible que también tenga que conservar los archivos que se actualizan durante la ejecución de una tarea. Por ejemplo, es posible que tenga que conservar los archivos de registro o stdout.txt y stderr.txt. La biblioteca de convenciones de archivo proporciona el método TaskOutputStorage.SaveTrackedAsync para conservar estos tipos de archivos. Realice un seguimiento de las actualizaciones de un archivo en el nodo en un intervalo especificado con SaveTrackedAsync. Después, conserve esas actualizaciones en Azure Storage.
En el ejemplo siguiente se usa SaveTrackedAsync para actualizar stdout.txt en Azure Storage cada 15 segundos durante la ejecución de la tarea:
TimeSpan stdoutFlushDelay = TimeSpan.FromSeconds(3);
string logFilePath = Path.Combine(
Environment.GetEnvironmentVariable("AZ_BATCH_TASK_DIR"), "stdout.txt");
// The primary task logic is wrapped in a using statement that sends updates to
// the stdout.txt blob in Storage every 15 seconds while the task code runs.
using (ITrackedSaveOperation stdout =
await taskStorage.SaveTrackedAsync(
TaskOutputKind.TaskLog,
logFilePath,
"stdout.txt",
TimeSpan.FromSeconds(15)))
{
/* Code to process data and produce output file(s) */
// We are tracking the disk file to save our standard output, but the
// node agent may take up to 3 seconds to flush the stdout stream to
// disk. So give the file a moment to catch up.
await Task.Delay(stdoutFlushDelay);
}
Reemplaza la sección comentada Code to process data and produce output file(s) con el código que tu tarea normalmente utiliza. Por ejemplo, puede tener código que descargue datos de Azure Storage y, a continuación, realice transformaciones o cálculos. Puede encapsular este código en un using bloque para actualizar periódicamente un archivo con SaveTrackedAsync.
El agente de nodo es un programa que se ejecuta en cada nodo del conjunto. Este programa proporciona la interfaz de comando y control entre el nodo y el servicio Batch. La Task.Delay llamada es necesaria al final de este using bloque. La llamada garantiza que el agente de nodo tenga tiempo de vaciar el contenido del estándar en el archivo stdout.txt del nodo. Sin este retraso, es posible perder los últimos segundos de salida. Es posible que no necesite este retraso para todos los archivos.
Al habilitar el seguimiento de archivos con SaveTrackedAsync, solo se conservan los anexos al archivo con seguimiento en Azure Storage. Use este método solo para realizar el seguimiento de archivos de registro no rotativos u otros archivos que se escriben con operaciones de adición al final del archivo.
Recuperación de datos de salida
Para recuperar los archivos de salida de una tarea o trabajo específicos, no es necesario conocer la ruta de acceso en Azure Storage ni los nombres de archivo. En su lugar, puede solicitar archivos de salida por tarea o identificador de trabajo.
El código de ejemplo siguiente recorre en iteración las tareas de un trabajo. A continuación, el código imprime información sobre los archivos de salida de la tarea. A continuación, el código descarga los archivos de AzureStorage.
foreach (CloudTask task in myJob.ListTasks())
{
foreach (OutputFileReference output in
task.OutputStorage(storageAccount).ListOutputs(
TaskOutputKind.TaskOutput))
{
Console.WriteLine($"output file: {output.FilePath}");
output.DownloadToFileAsync(
$"{jobId}-{output.FilePath}",
System.IO.FileMode.Create).Wait();
}
}
Visualización de archivos de salida en Azure Portal
Si los archivos de salida de la tarea usan el estándar Batch File Conventions, puede ver los archivos en Azure Portal.
Para habilitar la visualización de los archivos de salida en el portal, debe cumplir los siguientes requisitos:
Para que los archivos de salida se muestren automáticamente en Azure Portal, debe hacer lo siguiente:
- Vincule una cuenta de Azure Storage a su cuenta de Batch.
- Siga las convenciones de nomenclatura predefinidas para los archivos y contenedores de Azure Storage. Revise el archivo LÉAME para todas las definiciones. Si usa la biblioteca de convenciones de archivo para guardar su salida, sus archivos se guardan según el estándar de convenciones de archivo.
Para ver los archivos y registros de salida de tareas en Azure Portal:
- Inicie sesión en Azure Portal.
- Vaya a la tarea para la que desea ver el resultado.
- Seleccione Archivos de salida guardados o Registros guardados.
Ejemplo de código
El proyecto de ejemplo PersistOutputs es uno de los ejemplos de código de Azure Batch en GitHub. En esta solución de Visual Studio se muestra cómo usar la biblioteca de convenciones de archivos de Azure Batch para conservar la salida de la tarea en un almacenamiento duradero. Para ejecutar el ejemplo, siga estos pasos:
- Abra el proyecto en Visual Studio 2019.
- Agregue las credenciales de la cuenta de Batch y Azure Storage a AccountSettings.settings en el proyecto Microsoft.Azure.Batch.Samples.Common .
- Compile la solución. No ejecute la solución todavía.
- Si se le solicita, restaure los paquetes NuGet.
- Cargue un paquete de aplicación para PersistOutputsTask a través de Azure Portal.
- Incluya el
PersistOutputsTask.exearchivo ejecutable y sus ensamblados dependientes en el paquete .zip. - Establezca el identificador de aplicación en
PersistOutputsTask. - Establezca la versión del paquete de aplicación en
1.0.
- Incluya el
- Seleccione Iniciar para ejecutar el proyecto.
- Cuando se le pida que seleccione la tecnología de persistencia que se va a usar, escriba 1. Esta opción ejecuta el ejemplo mediante la biblioteca de convenciones de archivo para guardar la salida de la tarea.
Obtén la biblioteca de convenciones de archivos por lotes para .NET
La biblioteca de convenciones de archivos de Batch para .NET está disponible en NuGet. La biblioteca amplía las clases CloudJob y CloudTask con nuevos métodos. Para más información, consulte la documentación de referencia de la biblioteca de convenciones de archivo.
El código fuente de la biblioteca File Conventions está disponible en GitHub.