Rychlý Start: použití rozhraní Python API ke spuštění úlohy Azure Batch
Začněte s Azure Batch pomocí rozhraní Python API ke spuštění úlohy Azure Batch z aplikace. aplikace nahrává vstupní datové soubory pro Azure Storage a vytvoří fond výpočetních uzlů Batch (virtuálních počítačů). Pak vytvoří úlohu, která spustí úlohy ke zpracování jednotlivých vstupních souborů ve fondu pomocí příkazu Basic.
Po dokončení tohoto rychlého startu budete porozumět klíčovým konceptům služby Batch a budete připraveni vyzkoušet dávku s efektivnějšími úlohami ve větším měřítku.

Požadavky
Účet Azure s aktivním předplatným. Vytvořte si účet zdarma.
Účet Batch a propojený účet Azure Storage. Informace o vytvoření těchto účtů prostřednictvím webu Azure Portal nebo rozhraní Azure CLI najdete v rychlém startu služby Batch.
Python verze 2,7 nebo 3,6 nebo novější, včetně Správce balíčků PIP .
Přihlášení k Azure
Přihlaste se k webu Azure Portal na adrese https://portal.azure.com.
Získání přihlašovacích údajů k účtu
V tomto příkladu musíte zadat přihlašovací údaje pro účty služeb Batch a Storage. Na webu Azure Portal je snadný způsob, jak získat potřebné přihlašovací údaje. (Tyto přihlašovací údaje můžete také získat pomocí rozhraní API Azure nebo nástrojů příkazového řádku.)
Vyberte všechny služby > Batch účty a potom vyberte název účtu Batch.
Pokud chcete zobrazit přihlašovací údaje dávky, vyberte klíče. Zkopíruje hodnoty Účet Batch, URL a Primární přístupová klíč do textového editoru.
Pokud chcete zobrazit název a klíče účtu úložiště, vyberte účet úložiště. Zkopírujte hodnoty Název účtu úložiště a Klíč1 do textového editoru.
Stažení ukázky
Stáhněte nebo naklonujte ukázkovou aplikaci z GitHubu. K naklonování úložiště ukázkové aplikace pomocí klienta Git použijte následující příkaz:
git clone https://github.com/Azure-Samples/batch-python-quickstart.git
Přejít do adresáře, který obsahuje skript Pythonu python_quickstart_client.py .
Ve vývojovém prostředí Pythonu nainstalujte vyžadované balíčky pomocí pip.
pip install -r requirements.txt
Otevřete soubor config.py. Aktualizujte řetězce přihlašovacích údajů účtu Batch a účtu úložiště s hodnotami získanými pro účty. Například:
_BATCH_ACCOUNT_NAME = 'mybatchaccount'
_BATCH_ACCOUNT_KEY = 'xxxxxxxxxxxxxxxxE+yXrRvJAqT9BlXwwo1CwF+SwAYOxxxxxxxxxxxxxxxx43pXi/gdiATkvbpLRl3x14pcEQ=='
_BATCH_ACCOUNT_URL = 'https://mybatchaccount.mybatchregion.batch.azure.com'
_STORAGE_ACCOUNT_NAME = 'mystorageaccount'
_STORAGE_ACCOUNT_KEY = 'xxxxxxxxxxxxxxxxy4/xxxxxxxxxxxxxxxxfwpbIC5aAWA8wDu+AFXZB827Mt9lybZB1nUcQbQiUrkPtilK5BQ=='
Spuštění aplikace
Pokud chcete vidět pracovní postup Batch v akci, spusťte skript:
python python_quickstart_client.py
Po spuštění skriptu se podívejte do kódu a najděte si, co jednotlivé části aplikace dělají.
Po spuštění ukázkové aplikace vypadá výstup konzoly zhruba následovně. Během provádění dojde k pozastavení na řádku Monitoring all tasks for 'Completed' state, timeout in 00:30:00... a mezitím se spustí výpočetní uzly fondu. Jakmile se spustí první výpočetní uzel, úkoly se zařadí do fronty ke spuštění. Fond, výpočetní uzly, úlohy a úkoly můžete sledovat ve svém účtu Batch na webu Azure Portal.
Sample start: 11/26/2018 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...
Po dokončení úkolů se pro každý úkol zobrazí výstup podobný tomu následujícímu:
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 in business, engineering, science, and other pursuits that require running lots of automated tasks....
...
Když aplikaci spouštíte v její výchozí konfiguraci, je obvyklá doba provádění přibližně 3 minuty. Nejdelší dobu trvá počáteční vytvoření fondu.
Kontrola kódu
Aplikace Python v tomto rychlém startu provádí tyto kroky:
- Odešle tři malé textové soubory do kontejneru objektů blob ve vašem účtu služby Azure Storage. Tyto soubory představují vstup pro zpracování úlohami služby Batch.
- Vytvoří fond dvou výpočetních uzlů se systémem Ubuntu 20,04 LTS.
- Vytvoří úlohu a tři úkoly ke spuštění v uzlech. Každý úkol zpracovává pomocí příkazového řádku prostředí Bash jeden vstupní soubor.
- Zobrazí soubory vrácené úkoly.
Podrobnosti najdete v souboru python_quickstart_client.py a v následujících částech.
Nezbytné úkony
K interakci s účtem úložiště aplikace vytvoří objekt BlobServiceClient .
blob_service_client = BlobServiceClient(
account_url="https://{}.{}/".format(
config._STORAGE_ACCOUNT_NAME,
config._STORAGE_ACCOUNT_DOMAIN
),
credential=config._STORAGE_ACCOUNT_KEY
)
Odkaz blob_service_client slouží aplikaci k vytvoření kontejneru v účtu úložiště a k nahrání datových souborů do tohoto kontejneru. Soubory v úložišti jsou definované jako objekty ResourceFile služby Batch, které může služba Batch později stáhnout do výpočetních uzlů.
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]
K vytváření a správě fondů, úloh a úkolů ve službě Batch aplikace vytvoří objekt BatchServiceClient. Klient služby Batch v ukázce používá ověření pomocí sdíleného klíče. Batch podporuje také ověřování pomocí Azure Active Directory.
credentials = SharedKeyCredentials(config._BATCH_ACCOUNT_NAME,
config._BATCH_ACCOUNT_KEY)
batch_client = BatchServiceClient(
credentials,
batch_url=config._BATCH_ACCOUNT_URL)
Vytvořte fond výpočetních uzlů.
K vytvoření fondu služby Batch aplikace používá třídu PoolAddParameter, která nastavuje počet uzlů, velikost virtuálních počítačů a konfiguraci fondu. Zde je objekt VirtualMachineConfiguration určující element imagereference pro obrázek Ubuntu serveru 20,04 LTS publikovaný v Azure Marketplace. Batch podporuje široké spektrum imagí Linuxu a Windows Serveru v Azure Marketplace, ale i vlastní image virtuálních počítačů.
Počet uzlů (_POOL_NODE_COUNT) a velikost virtuálního počítače (_POOL_VM_SIZE) jsou definované konstanty. Ukázka ve výchozím nastavení vytvoří fond se Standard_DS1_v2 uzly o velikosti 2. Navržená velikost nabízí pro tento rychlý příklad dobrou rovnováhu mezi výkonem a náklady.
Metoda pool.add odešle fond do služby 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="20_04-lts",
version="latest"
),
node_agent_sku_id="batch.node.ubuntu 20.04"),
vm_size=config._POOL_VM_SIZE,
target_dedicated_nodes=config._POOL_NODE_COUNT
)
batch_service_client.pool.add(new_pool)
Vytvoření úlohy Batch
Úloha služby Batch je logická skupina jednoho nebo víc úkolů. Úloha zahrnuje nastavení společná všem úkolům, jako je priorita a fond, ve kterém se mají úkoly spouštět. Aplikace používá třídu JobAddParameter k vytvoření úlohy ve vašem fondu. Metoda Job. Add přidá úlohu do zadaného účtu Batch. Na začátku úloha neobsahuje žádné úkoly.
job = batchmodels.JobAddParameter(
id=job_id,
pool_info=batchmodels.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
Vytváření úloh
Aplikace vytvoří seznam objektů úlohy pomocí třídy TaskAddParameter. Každý úkol zpracovává vstupní objekt resource_files pomocí parametru command_line. Příkazový řádek v ukázce spustí příkaz prostředí Bash cat, který zobrazí textový soubor. Tento příkaz představuje jednoduchý příklad pro demonstrační účely. Při použití služby Batch se aplikace nebo skript zadávají právě na příkazovém řádku. Služba Batch poskytuje několik způsobů, jak nasazovat aplikace a skripty do výpočetních uzlů.
Potom aplikace přidá úkoly do úlohy pomocí metody task.add_collection a ta je zařadí do fronty ke spuštění ve výpočetních uzlech.
tasks = list()
for idx, input_file in enumerate(input_files):
command = "/bin/bash -c \"cat {}\"".format(input_file.file_path)
tasks.append(batchmodels.TaskAddParameter(
id='Task{}'.format(idx),
command_line=command,
resource_files=[input_file]
)
)
batch_service_client.task.add_collection(job_id, tasks)
Zobrazení výstupu úkolu
Aplikace monitoruje stav úlohy, aby se zajistilo dokončení úloh. Potom aplikace zobrazí soubor stdout.txt vygenerovaný jednotlivými dokončenými úlohami. V případě úspěšného spuštění úkolu se výstup příkazu úkolu zapíše do souboru 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("Task: {}".format(task.id))
print("Node: {}".format(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,
encoding)
print("Standard output:")
print(file_text)
Vyčištění prostředků
Aplikace automaticky odstraní kontejner úložiště, který vytvoří, a dá vám možnost odstranit fond a úlohu služby Batch. Poplatky se účtují za fond, ve kterém jsou spuštěné uzly, i když nejsou naplánované žádné úlohy. Až fond nebudete potřebovat, odstraňte ho. Při odstranění fondu se odstraní veškeré výstupy úkolů v uzlech.
Pokud už je nepotřebujete, odstraňte skupinu prostředků, účet Batch a účet úložiště. Provedete to tak, že v Azure Portal vyberete skupinu prostředků účtu Batch a vyberete Odstranit skupinu prostředků.
Další kroky
V tomto rychlém startu jste spustili malou aplikaci sestavenou pomocí rozhraní Python API služby Batch a ta vytvořila fond a úlohu služby Batch. Úloha spustila ukázkové úkoly a stáhla výstup vytvořený v uzlech. Teď chápete klíčové koncepty služby Batch a můžete službu Batch vyzkoušet ve větším měřítku s úlohami, které víc odpovídají realitě. Další informace o službě Azure Batch a vysvětlení paralelních úloh v reálné aplikaci najdete v kurzu o Pythonu služby Batch.