Rychlý Start: použití rozhraní Python API ke spuštění úlohy Azure BatchQuickstart: Use Python API to run an Azure Batch job

Začněte s Azure Batch pomocí rozhraní Python API ke spuštění úlohy Azure Batch z aplikace.Get started with Azure Batch by using the Python API to run an Azure Batch job from an app. Aplikace nahrává vstupní datové soubory pro Azure Storage a vytvoří fond výpočetních uzlů Batch (virtuálních počítačů).The app uploads input data files to Azure Storage and creates a pool of Batch compute nodes (virtual machines). Pak vytvoří úlohu, která spustí úlohy ke zpracování jednotlivých vstupních souborů ve fondu pomocí příkazu Basic.It then creates a job that runs tasks to process each input file in the pool using a basic command.

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.After completing this quickstart, you'll understand key concepts of the Batch service and be ready to try Batch with more realistic workloads at larger scale.

Přehled pracovního postupu Azure Batch

PředpokladyPrerequisites

Přihlášení k AzureSign in to Azure

Přihlaste se k webu Azure Portal na adrese https://portal.azure.com.Sign in to the Azure portal at https://portal.azure.com.

Získání přihlašovacích údajů k účtuGet account credentials

V tomto příkladu musíte zadat přihlašovací údaje pro účty služeb Batch a Storage.For this example, you need to provide credentials for your Batch and Storage accounts. Na webu Azure Portal je snadný způsob, jak získat potřebné přihlašovací údaje.A straightforward way to get the necessary credentials is in the Azure portal. (Tyto přihlašovací údaje můžete také získat pomocí rozhraní API Azure nebo nástrojů příkazového řádku.)(You can also get these credentials using the Azure APIs or command-line tools.)

  1. Vyberte všechny služby > Batch účtya potom vyberte název účtu Batch.Select All services > Batch accounts, and then select the name of your Batch account.

  2. Pokud chcete zobrazit přihlašovací údaje dávky, vyberte klíče.To see the Batch credentials, select Keys. Zkopíruje hodnoty Účet Batch, URL a Primární přístupová klíč do textového editoru.Copy the values of Batch account, URL, and Primary access key to a text editor.

  3. Pokud chcete zobrazit název a klíče účtu úložiště, vyberte účet úložiště.To see the Storage account name and keys, select Storage account. Zkopírujte hodnoty Název účtu úložiště a Klíč1 do textového editoru.Copy the values of Storage account name and Key1 to a text editor.

Stažení ukázkyDownload the sample

Stáhněte nebo naklonujte ukázkovou aplikaci z GitHubu.Download or clone the sample app from GitHub. K naklonování úložiště ukázkové aplikace pomocí klienta Git použijte následující příkaz:To clone the sample app repo with a Git client, use the following command:

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 .Go to the directory that contains the Python script python_quickstart_client.py.

Ve vývojovém prostředí Pythonu nainstalujte vyžadované balíčky pomocí pip.In your Python development environment, install the required packages using pip.

pip install -r requirements.txt

Otevřete soubor config.py.Open the file config.py. Aktualizujte řetězce přihlašovacích údajů účtu Batch a účtu úložiště s hodnotami získanými pro účty.Update the Batch and storage account credential strings with the values you obtained for your accounts. Příklad:For example:

_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í aplikaceRun the app

Pokud chcete vidět pracovní postup Batch v akci, spusťte skript:To see the Batch workflow in action, run the script:

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í.After running the script, review the code to learn what each part of the application does.

Po spuštění ukázkové aplikace vypadá výstup konzoly zhruba následovně.When you run the sample application, the console output is similar to the following. 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.During execution, you experience a pause at Monitoring all tasks for 'Completed' state, timeout in 00:30:00... while the pool's compute nodes are started. Jakmile se spustí první výpočetní uzel, úkoly se zařadí do fronty ke spuštění.Tasks are queued to run as soon as the first compute node is running. Fond, výpočetní uzly, úlohy a úkoly můžete sledovat ve svém účtu Batch na webu Azure Portal.Go to your Batch account in the Azure portal to monitor the pool, compute nodes, job, and tasks in your Batch account.

Sample start: 11/26/2018 4:02:54 PM

Container [input] created.
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:After tasks complete, you see output similar to the following for each task:

Printing task output...
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard out:
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.Typical execution time is approximately 3 minutes when you run the application in its default configuration. Nejdelší dobu trvá počáteční vytvoření fondu.Initial pool setup takes the most time.

Kontrola kóduReview the code

Aplikace Python v tomto rychlém startu provádí tyto kroky:The Python app in this quickstart does the following:

  • Odešle tři malé textové soubory do kontejneru objektů blob ve vašem účtu služby Azure Storage.Uploads three small text files to a blob container in your Azure storage account. Tyto soubory představují vstup pro zpracování úlohami služby Batch.These files are inputs for processing by Batch tasks.
  • Vytvoří fond dvou výpočetních uzlů se systémem Ubuntu 18,04 LTS.Creates a pool of two compute nodes running Ubuntu 18.04 LTS.
  • Vytvoří úlohu a tři úkoly ke spuštění v uzlech.Creates a job and three tasks to run on the nodes. Každý úkol zpracovává pomocí příkazového řádku prostředí Bash jeden vstupní soubor.Each task processes one of the input files using a Bash shell command line.
  • Zobrazí soubory vrácené úkoly.Displays files returned by the tasks.

Podrobnosti najdete v souboru python_quickstart_client.py a v následujících částech.See the file python_quickstart_client.py and the following sections for details.

Nezbytné úkonyPreliminaries

K práci s účtem úložiště aplikace používá balíček azure-storage-blob k vytvoření objektu BlockBlobService.To interact with a storage account, the app uses the azure-storage-blob package to create a BlockBlobService object.

blob_client = azureblob.BlockBlobService(
    account_name=config._STORAGE_ACCOUNT_NAME,
    account_key=config._STORAGE_ACCOUNT_KEY)

Odkaz blob_client slouží aplikaci k vytvoření kontejneru v účtu úložiště a k nahrání datových souborů do tohoto kontejneru.The app uses the blob_client reference to create a container in the storage account and to upload data files to the container. 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ů.The files in storage are defined as Batch ResourceFile objects that Batch can later download to compute nodes.

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_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.The app creates a BatchServiceClient object to create and manage pools, jobs, and tasks in the Batch service. Klient služby Batch v ukázce používá ověření pomocí sdíleného klíče.The Batch client in the sample uses shared key authentication. Batch podporuje také ověřování pomocí Azure Active Directory.Batch also supports Azure Active Directory authentication.

credentials = batch_auth.SharedKeyCredentials(config._BATCH_ACCOUNT_NAME,
                                              config._BATCH_ACCOUNT_KEY)

batch_client = batch.BatchServiceClient(
    credentials,
    batch_url=config._BATCH_ACCOUNT_URL)

Vytvořte fond výpočetních uzlů.Create a pool of compute nodes

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.To create a Batch pool, the app uses the PoolAddParameter class to set the number of nodes, VM size, and a pool configuration. Zde je objekt VirtualMachineConfiguration určující element imagereference pro obrázek Ubuntu serveru 18,04 LTS publikovaný v Azure Marketplace.Here, a VirtualMachineConfiguration object specifies an ImageReference to an Ubuntu Server 18.04 LTS image published in the Azure Marketplace. Batch podporuje široké spektrum imagí Linuxu a Windows Serveru v Azure Marketplace, ale i vlastní image virtuálních počítačů.Batch supports a wide range of Linux and Windows Server images in the Azure Marketplace, as well as custom VM images.

Počet uzlů (_POOL_NODE_COUNT) a velikost virtuálního počítače (_POOL_VM_SIZE) jsou definované konstanty.The number of nodes (_POOL_NODE_COUNT) and VM size (_POOL_VM_SIZE) are defined constants. Ukázka ve výchozím nastavení vytvoří fond se 2 uzly velikosti Standard_A1_v2.The sample by default creates a pool of 2 size Standard_A1_v2 nodes. Navržená velikost nabízí pro tento rychlý příklad dobrou rovnováhu mezi výkonem a náklady.The size suggested offers a good balance of performance versus cost for this quick example.

Metoda pool.add odešle fond do služby Batch.The pool.add method submits the pool to the Batch service.

new_pool = batch.models.PoolAddParameter(
    id=pool_id,
    virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
        image_reference=batchmodels.ImageReference(
            publisher="Canonical",
            offer="UbuntuServer",
            sku="18.04-LTS",
            version="latest"
        ),
        node_agent_sku_id="batch.node.ubuntu 18.04"),
    vm_size=config._POOL_VM_SIZE,
    target_dedicated_nodes=config._POOL_NODE_COUNT
)
batch_service_client.pool.add(new_pool)

Vytvoření úlohy BatchCreate a Batch job

Úloha služby Batch je logická skupina jednoho nebo víc úkolů.A Batch job is a logical grouping of one or more tasks. Úloha zahrnuje nastavení společná všem úkolům, jako je priorita a fond, ve kterém se mají úkoly spouštět.A job includes settings common to the tasks, such as priority and the pool to run tasks on. Aplikace používá třídu JobAddParameter k vytvoření úlohy ve vašem fondu.The app uses the JobAddParameter class to create a job on your pool. Metoda Job. Add přidá úlohu do zadaného účtu Batch.The job.add method adds a job to the specified Batch account. Na začátku úloha neobsahuje žádné úkoly.Initially the job has no tasks.

job = batch.models.JobAddParameter(
    id=job_id,
    pool_info=batch.models.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)

Vytváření úlohCreate tasks

Aplikace vytvoří seznam objektů úlohy pomocí třídy TaskAddParameter.The app creates a list of task objects using the TaskAddParameter class. Každý úkol zpracovává vstupní objekt resource_files pomocí parametru command_line.Each task processes an input resource_files object using a command_line parameter. Příkazový řádek v ukázce spustí příkaz prostředí Bash cat, který zobrazí textový soubor.In the sample, the command line runs the Bash shell cat command to display the text file. Tento příkaz představuje jednoduchý příklad pro demonstrační účely.This command is a simple example for demonstration purposes. Při použití služby Batch se aplikace nebo skript zadávají právě na příkazovém řádku.When you use Batch, the command line is where you specify your app or script. Služba Batch poskytuje několik způsobů, jak nasazovat aplikace a skripty do výpočetních uzlů.Batch provides a number of ways to deploy apps and scripts to compute nodes.

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.Then, the app adds tasks to the job with the task.add_collection method, which queues them to run on the compute nodes.

tasks = list()

for idx, input_file in enumerate(input_files):
    command = "/bin/bash -c \"cat {}\"".format(input_file.file_path)
    tasks.append(batch.models.TaskAddParameter(
        id='Task{}'.format(idx),
        command_line=command,
        resource_files=[input_file]
    )
    )
batch_service_client.task.add_collection(job_id, tasks)

Zobrazení výstupu úkoluView task output

Aplikace monitoruje stav úlohy, aby se zajistilo dokončení úloh.The app monitors task state to make sure the tasks complete. Potom aplikace zobrazí soubor stdout.txt vygenerovaný jednotlivými dokončenými úlohami.Then, the app displays the stdout.txt file generated by each completed task. V případě úspěšného spuštění úkolu se výstup příkazu úkolu zapíše do souboru stdout.txt:When the task runs successfully, the output of the task command is written to 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ůClean up resources

Aplikace automaticky odstraní kontejner úložiště, který vytvoří, a dá vám možnost odstranit fond a úlohu služby Batch.The app automatically deletes the storage container it creates, and gives you the option to delete the Batch pool and job. Poplatky se účtují za fond, ve kterém jsou spuštěné uzly, i když nejsou naplánované žádné úlohy.You are charged for the pool while the nodes are running, even if no jobs are scheduled. Až fond nebudete potřebovat, odstraňte ho.When you no longer need the pool, delete it. Při odstranění fondu se odstraní veškeré výstupy úkolů v uzlech.When you delete the pool, all task output on the nodes is deleted.

Pokud už je nepotřebujete, odstraňte skupinu prostředků, účet Batch a účet úložiště.When no longer needed, delete the resource group, Batch account, and storage account. Provedete to tak, že v Azure Portal vyberete skupinu prostředků účtu Batch a vyberete Odstranit skupinu prostředků.To do so in the Azure portal, select the resource group for the Batch account and select Delete resource group.

Další krokyNext steps

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.In this quickstart, you ran a small app built using the Batch Python API to create a Batch pool and a Batch job. Úloha spustila ukázkové úkoly a stáhla výstup vytvořený v uzlech.The job ran sample tasks, and downloaded output created on the nodes. 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ě.Now that you understand the key concepts of the Batch service, you are ready to try Batch with more realistic workloads at larger scale. 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.To learn more about Azure Batch, and walk through a parallel workload with a real-world application, continue to the Batch Python tutorial.