Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве показано, как приступить к работе с пакетной службой Azure, запустив приложение, использующее библиотеки пакетной службы Azure для Python. Приложение Python:
- Отправляет несколько входных файлов данных в контейнер BLOB-объектов службы хранилища Azure для обработки задач пакетной службы.
- Создает пул из двух виртуальных машин (VM) или вычислительных узлов, работающих под управлением ОС Ubuntu 22.04 LTS.
- Создает задание и три задачи для выполнения на узлах. Каждая задача обрабатывает один из входных файлов с помощью командной строки оболочки Bash.
- Отображает выходные файлы, возвращаемые задачами.
После работы с этим кратким руководством вы узнаете основные понятия пакетной службы и готовы использовать пакетную службу с более реалистичными, большими масштабируемыми рабочими нагрузками.
Предпосылки
Учетная запись Azure с активной подпиской. Если у вас нет учетной записи, создайте бесплатную учетную запись.
Учетная запись службы Batch со связанной учетной записью Azure Storage. Учетные записи можно создать с помощью любого из следующих методов: Azure CLI | портала Azure | Bicep | ARM-шаблона | Terraform.
Python версии 3.8 или более поздней версии, которая включает диспетчер пакетов pip .
Запуск приложения
Чтобы завершить работу с этим кратким руководством, вы скачаете или клонируете приложение Python, укажите данные вашей учетной записи, запустите приложение и проверьте выходные данные.
Скачивание или клонирование приложения
Загрузите или клонируйте приложение Azure Batch Python Quickstart с GitHub. Используйте следующую команду, чтобы клонировать репозиторий приложения с клиентом Git:
git clone https://github.com/Azure-Samples/batch-python-quickstart.git
Перейдите в папку batch-python-quickstart/src и установите необходимые пакеты с помощью
pip
.pip install -r requirements.txt
Укажите сведения о учетной записи
Приложение Python должно использовать имена учетных записей Batch и Storage, значения ключей учетной записи и конечную точку учетной записи Batch. Эти сведения можно получить с портала Azure, API Azure или средств командной строки.
Чтобы получить сведения об учетной записи на портале Azure, выполните следующие действия.
- На панели поиска Azure найдите и выберите имя учетной записи Batch.
- На странице учетной записи Batch выберите Ключи в области навигации слева.
- На странице "Ключи" скопируйте следующие значения:
- Учетная запись пакетной обработки
- Конечная точка учетной записи
- Первичный ключ доступа
- Имя учетной записи хранения
- Key1
В скачанном приложении Python измените следующие строки в файле config.py , чтобы указать скопированные значения.
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>'
Это важно
Экспонирование ключей учетной записи в исходном коде приложения не рекомендуется для использования в продуктивной среде. Необходимо ограничить доступ к учетным данным и ссылаться на них в коде с помощью переменных или файла конфигурации. Оптимальным вариантом является хранение ключей учетной записи Batch и Storage в Azure Key Vault.
Запуск приложения и просмотр выходных данных
Запустите приложение, чтобы увидеть пакетный рабочий процесс в действии.
python python_quickstart_client.py
Обычное время выполнения составляет примерно три минуты. Начальная настройка узла пула занимает больше всего времени.
Приложение возвращает выходные данные, аналогичные следующему примеру:
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...
На Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
возникает пауза, пока запускаются вычислительные узлы пула. По мере создания задач системой пакетной обработки они ставятся в очередь для выполнения в пуле. Как только первый вычислительный узел доступен, первая задача выполняется на узле. Вы можете отслеживать состояние узла, задачи и задания на странице учетной записи пакетной службы на портале Azure.
После завершения каждой задачи вы увидите выходные данные, аналогичные следующему примеру:
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...
Просмотр кода
Ознакомьтесь с кодом, чтобы понять шаги в быстром старте Python для пакетной службы Azure.
Создание клиентов служб и отправка файлов ресурсов
Приложение создает объект BlobServiceClient для взаимодействия с учетной записью хранения.
blob_service_client = BlobServiceClient( account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/", credential=config.STORAGE_ACCOUNT_KEY )
Приложение использует ссылку
blob_service_client
на создание контейнера в учетной записи хранения и отправку файлов данных в контейнер. Файлы в хранилище определяются как объекты Batch ResourceFile, которые Batch может впоследствии загрузить на вычислительные узлы.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]
Приложение создает объект BatchServiceClient для создания пулов, заданий и задач в учетной записи пакетной службы и управления ими. Клиент пакетной службы использует проверку подлинности с общим ключом. Пакет также поддерживает аутентификацию Microsoft Entra.
credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME, config.BATCH_ACCOUNT_KEY) batch_client = BatchServiceClient( credentials, batch_url=config.BATCH_ACCOUNT_URL)
Создание пула вычислительных узлов
Чтобы создать пул Batch, приложение использует класс PoolAddParameter для задания количества узлов, размера ВМ и конфигурации пула. Следующий объект VirtualMachineConfiguration указывает ImageReference для образа Ubuntu Server 22.04 LTS Azure Marketplace. Batch-сервис поддерживает широкий спектр образов Linux и Windows Server Marketplace, а также поддерживает пользовательские образы виртуальных машин.
POOL_NODE_COUNT
и POOL_VM_SIZE
— это определенные константы. Приложение создает пул из двух узлов размера Standard_DS1_v2. Этот размер обеспечивает хороший баланс производительности и затрат для этого быстрого запуска.
Метод pool.add отправляет пул в пакетную службу.
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)
Создание пакетного задания
Пакетное задание — это логическая группировка одной или нескольких задач. Задание включает параметры, общие для задач, таких как приоритет и пул для выполнения задач.
Приложение использует класс JobAddParameter для создания задания в пуле. Метод job.add добавляет задание в указанную учетную запись Batch. Изначально задание не имеет задач.
job = batchmodels.JobAddParameter(
id=job_id,
pool_info=batchmodels.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
Создание задач
Сервис Batch предлагает несколько способов развертывания приложений и скриптов на вычислительных узлах. Это приложение создает список объектов задач с помощью класса TaskAddParameter . Каждая задача обрабатывает входной файл с помощью command_line
параметра для указания приложения или скрипта.
Следующий скрипт обрабатывает входные resource_files
объекты, выполнив команду оболочки cat
Bash для отображения текстовых файлов. Затем приложение использует метод task.add_collection, чтобы добавить каждую задачу в задание, что ставит задачи в очередь на выполнение на вычислительных узлах.
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)
Просмотр выходных данных задачи
Приложение отслеживает состояние задачи, чтобы убедиться, что задачи завершены. При успешном выполнении каждой задачи выходные данные команды задачи записываются в файл stdout.txt . Затем приложение отображает файлstdout.txt для каждой завершенной задачи.
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)
Очистка ресурсов
Приложение автоматически удаляет контейнер хранилища, который оно создает, и предоставляет возможность удаления пула Batch и задания. Пулы и узлы несут расходы, пока узлы активны, даже если они не выполняют задания. Если пул больше не нужен, удалите его.
Если вам больше не нужны ресурсы пакетной службы, можно удалить группу ресурсов, содержащую их. На портале Azure выберите "Удалить группу ресурсов " в верхней части страницы группы ресурсов. На экране Удаление группы ресурсов введите имя группы ресурсов, а затем выберите Удалить.
Дальнейшие действия
В этом кратком руководстве вы запустили приложение, использующее API Python пакетной службы для создания пула пакетной службы, узлов, заданий и задач. Задание отправляет файлы ресурсов в контейнер хранилища, выполняет задачи на узлах и отображает выходные данные узлов.
Теперь, когда вы понимаете основные понятия пакетной службы, вы готовы использовать пакетную службу с более реалистичными, большими масштабируемыми рабочими нагрузками. Чтобы узнать больше о Azure Batch и ознакомиться с параллельной работой с реальным приложением, перейдите к руководству по Batch на Python.