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.
En este inicio rápido se muestra cómo empezar a trabajar con Azure Batch mediante la ejecución de una aplicación que usa las bibliotecas de Azure Batch para Python. La aplicación python:
- Carga varios archivos de datos de entrada en un contenedor de blobs de Azure Storage para usarlos para el procesamiento de tareas de Batch.
- Crea un grupo de dos máquinas virtuales (VM) o nodos de proceso que ejecutan el sistema operativo Ubuntu 22.04 LTS.
- Crea un trabajo y tres tareas que se ejecutan en los nodos. Cada tarea procesa uno de los archivos de entrada mediante una línea de comandos de shell de Bash.
- Muestra los archivos de salida que devuelven las tareas.
Tras completar este artículo de inicio rápido, comprenderás los conceptos clave del servicio Batch y estarás listo para usar dicho servicio con cargas de trabajo más realistas y a mayor escala.
Prerrequisitos
Una cuenta de Azure con una suscripción activa. Si no tienes ninguna cuenta, crea una gratuita.
Una cuenta de Batch con una cuenta de Azure Storage vinculada. Puede crear las cuentas mediante cualquiera de los métodos siguientes: CLI de Azure | portal de Azure | Bicep | plantilla de ARM | Terraform.
Python versión 3.8 o posterior, que incluye el administrador de paquetes pip .
Ejecución de la aplicación
Para completar este inicio rápido, descargue o clone la aplicación de Python, proporcione los valores de la cuenta, ejecute la aplicación y compruebe la salida.
Descarga o clonación de la aplicación
Descargue o clone la aplicación de inicio rápido de Python de Azure Batch desde GitHub. Use el siguiente comando para clonar el repositorio de aplicaciones con un cliente de Git:
git clone https://github.com/Azure-Samples/batch-python-quickstart.gitCambie a la carpeta batch-python-quickstart/src e instale los paquetes necesarios mediante
pip.pip install -r requirements.txt
Proporcionar la información de la cuenta
La aplicación de Python debe usar los nombres de cuenta de Batch y Storage, los valores de clave de cuenta y el punto de conexión de la cuenta de Batch. Puede obtener esta información desde Azure Portal, las API de Azure o las herramientas de línea de comandos.
Para obtener la información de la cuenta desde Azure Portal:
- En la barra de Azure Search, busque y seleccione el nombre de la cuenta de Batch.
- En la página de la cuenta de Batch, seleccione Claves en el panel de navegación izquierdo.
- En la página Claves , copie los valores siguientes:
- Cuenta de Batch
- Punto de conexión de cuenta
- Clave de acceso principal
- Nombre de la cuenta de almacenamiento
- Key1
En la aplicación de Python descargada, edite las siguientes cadenas en el archivo config.py para proporcionar los valores que copió.
BATCH_ACCOUNT_NAME = '<batch account>'
BATCH_ACCOUNT_KEY = '<primary access key>'
BATCH_ACCOUNT_URL = '<account endpoint>'
STORAGE_ACCOUNT_NAME = '<storage account name>'
STORAGE_ACCOUNT_KEY = '<key1>'
Importante
No se recomienda exponer las claves de cuenta en el origen de la aplicación para el uso de producción. Debe restringir el acceso a las credenciales y hacer referencia a ellas en el código mediante variables o un archivo de configuración. Es mejor almacenar claves de cuenta de Batch y Storage en Azure Key Vault.
Ejecución de la aplicación y visualización de la salida
Ejecute la aplicación para ver el flujo de trabajo de Batch en acción.
python python_quickstart_client.py
El tiempo de ejecución típico es de aproximadamente tres minutos. La configuración del nodo de grupo inicial tarda más tiempo.
La aplicación devuelve un resultado similar al ejemplo siguiente:
Sample start: 11/26/2012 4:02:54 PM
Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [PythonQuickstartPool]...
Creating job [PythonQuickstartJob]...
Adding 3 tasks to job [PythonQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
Hay una pausa en Monitoring all tasks for 'Completed' state, timeout in 00:30:00... mientras se inician los nodos de ejecución del grupo. A medida que se crean las tareas, Batch las pone en cola para que se ejecuten en el grupo. Tan pronto como el primer nodo de proceso esté disponible, la primera tarea se ejecuta en el nodo. Puede supervisar el estado del nodo, la tarea y el trabajo desde la página de la cuenta de Batch en Azure Portal.
Una vez completada cada tarea, verá una salida similar a la del ejemplo siguiente:
Printing task output...
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard output:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...
Revisión del código
Revise el código para comprender los pasos del inicio rápido de Python de Azure Batch.
Creación de clientes de servicio y carga de archivos de recursos
La aplicación crea un objeto BlobServiceClient para interactuar con la cuenta de Storage.
blob_service_client = BlobServiceClient( account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/", credential=config.STORAGE_ACCOUNT_KEY )La aplicación usa la
blob_service_clientreferencia para crear un contenedor en la cuenta de almacenamiento y cargar archivos de datos en el contenedor. Los archivos de almacenamiento se definen como objetos ResourceFile que Batch puede descargar después en nodos de ejecución.input_file_paths = [os.path.join(sys.path[0], 'taskdata0.txt'), os.path.join(sys.path[0], 'taskdata1.txt'), os.path.join(sys.path[0], 'taskdata2.txt')] input_files = [ upload_file_to_container(blob_service_client, input_container_name, file_path) for file_path in input_file_paths]La aplicación crea un objeto BatchServiceClient para crear y administrar grupos, trabajos y tareas en la cuenta de Batch. El cliente de Batch usa la autenticación de clave compartida. Batch también admite la autenticación de Microsoft Entra.
credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME, config.BATCH_ACCOUNT_KEY) batch_client = BatchServiceClient( credentials, batch_url=config.BATCH_ACCOUNT_URL)
Crear un grupo de nodos de cómputo
Para crear un grupo de Batch, la aplicación usa la clase PoolAddParameter para establecer el número de nodos, el tamaño de máquina virtual y la configuración del grupo. El siguiente objeto VirtualMachineConfiguration especifica una imageReference en una imagen de Azure Marketplace de Ubuntu Server 22.04 LTS. Batch admite una amplia gama de imágenes de Marketplace de Linux y Windows Server y también admite imágenes de máquina virtual personalizadas.
POOL_NODE_COUNT y POOL_VM_SIZE son constantes definidas. La aplicación crea un grupo de dos nodos de tamaño Standard_DS1_v2. Este tamaño ofrece un buen equilibrio de rendimiento frente al costo de este inicio rápido.
El método pool.add envía el grupo al servicio Batch.
new_pool = batchmodels.PoolAddParameter(
id=pool_id,
virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
image_reference=batchmodels.ImageReference(
publisher="canonical",
offer="0001-com-ubuntu-server-focal",
sku="22_04-lts",
version="latest"
),
node_agent_sku_id="batch.node.ubuntu 22.04"),
vm_size=config.POOL_VM_SIZE,
target_dedicated_nodes=config.POOL_NODE_COUNT
)
batch_service_client.pool.add(new_pool)
Creación de un trabajo de Batch
Un trabajo de Batch es una agrupación lógica de una o varias tareas. El trabajo incluye valores comunes para las tareas, como la prioridad y el grupo en el que se ejecutan las tareas.
La aplicación usa la clase JobAddParameter para crear un trabajo en el grupo. El método job.add agrega el trabajo a la cuenta de Batch especificada. Inicialmente, el trabajo no tiene tareas.
job = batchmodels.JobAddParameter(
id=job_id,
pool_info=batchmodels.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
Crear tareas
Batch proporciona varias formas de implementar aplicaciones y scripts en nodos de proceso. Esta aplicación crea una lista de objetos de tarea mediante la clase TaskAddParameter . Cada tarea procesa un archivo de entrada mediante un command_line parámetro para especificar una aplicación o un script.
El script siguiente procesa los objetos de entrada resource_files mediante la ejecución del comando del shell cat de Bash para mostrar los archivos de texto. A continuación, la aplicación usa el método task.add_collection para agregar cada tarea al trabajo, que pone en cola las tareas para ejecutarse en los nodos de proceso.
tasks = []
for idx, input_file in enumerate(resource_input_files):
command = f"/bin/bash -c \"cat {input_file.file_path}\""
tasks.append(batchmodels.TaskAddParameter(
id=f'Task{idx}',
command_line=command,
resource_files=[input_file]
)
)
batch_service_client.task.add_collection(job_id, tasks)
Visualización de la salida de la tarea
La aplicación supervisa el estado de la tarea para asegurarse de que las tareas se completan. Cuando cada tarea se ejecuta correctamente, el resultado del comando de la tarea se escribe al archivo stdout.txt. A continuación, la aplicación muestra el archivo stdout.txt para cada tarea completada.
tasks = batch_service_client.task.list(job_id)
for task in tasks:
node_id = batch_service_client.task.get(job_id, task.id).node_info.node_id
print(f"Task: {task.id}")
print(f"Node: {node_id}")
stream = batch_service_client.file.get_from_task(
job_id, task.id, config.STANDARD_OUT_FILE_NAME)
file_text = _read_stream_as_string(
stream,
text_encoding)
if text_encoding is None:
text_encoding = DEFAULT_ENCODING
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = text_encoding)
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = text_encoding)
print("Standard output:")
print(file_text)
Limpieza de recursos
La aplicación elimina automáticamente el contenedor de almacenamiento que crea y ofrece la opción de eliminar el grupo y el trabajo de Batch. Los grupos y nodos incurren en cargos mientras se ejecutan los nodos, incluso si no ejecutan trabajos. Si ya no necesita el grupo, elimínelo.
Cuando ya no necesite los recursos de Batch, puede eliminar el grupo de recursos que los contiene. En Azure Portal, seleccione Eliminar grupo de recursos en la parte superior de la página del grupo de recursos. En la pantalla Eliminar un grupo de recursos , escriba el nombre del grupo de recursos y seleccione Eliminar.
Pasos siguientes
En este inicio rápido, ejecutaste una aplicación que usa la API de Python de Batch para crear un grupo, nodos, trabajos y tareas de Batch. El trabajo cargó archivos de recursos en un contenedor de almacenamiento, ejecutó tareas en los nodos y mostró la salida de los nodos.
Ahora que conoces los conceptos clave del servicio Batch, ya estás listo para usar Batch con cargas de trabajo más realistas y a mayor escala. Para más información sobre Azure Batch y recorrer una carga de trabajo paralela con una aplicación real, continúe con el tutorial de Python de Batch.