Snabbstart: Använda Python API för att köra ett Azure Batch jobb
Kom igång med Azure Batch med hjälp av Python-API:et för att köra Azure Batch jobb från en app. Appen laddar upp indatafiler till Azure Storage skapar en pool med Batch-beräkningsnoder (virtuella datorer). Sedan skapas ett jobb som kör aktiviteter för att bearbeta varje indatafil i poolen med hjälp av ett grundläggande kommando.
När du har slutfört den här snabbstarten kommer du att förstå viktiga begrepp i Batch-tjänsten och vara redo att testa Batch med mer realistiska arbetsbelastningar i större skala.

Förutsättningar
Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
Ett Batch-konto och ett länkat Azure Storage-konto. Information om hur du skapar de här kontona finns Batch-snabbstarterna som du kommer åt via Azure-portalen eller Azure CLI.
Python version 2.7 eller 3.6 eller senare, inklusive pip-pakethanteraren.
Logga in på Azure
Logga in på Azure Portal på https://portal.azure.com.
Hämta kontouppgifter
Du måste ange autentiseringsuppgifter för dina Batch- och Storage-konton i det här exemplet. Ett enkelt sätt att hämta de autentiseringsuppgifter som behövs är i Azure-portalen. (Du kan också hämta autentiseringsuppgifterna via Azures API:er och kommandoradsverktyg.)
Välj alla tjänster > batch-konton och välj sedan namnet på batch-kontot.
Om du vill se batch-autentiseringsuppgifterna väljer du nycklar. Kopiera värdena för Batch-konto, URL och Primär åtkomstnyckel till en textredigerare.
Om du vill se lagrings kontots namn och nycklar väljer du lagrings konto. Kopiera värdena för Lagringskontonamn och Key1 till en textredigerare.
Ladda ned exemplet
Ladda ned eller klona exempelappen från GitHub. Om du vill klona lagringsplatsen för exempelappen med en Git-klient använder du följande kommando:
git clone https://github.com/Azure-Samples/batch-python-quickstart.git
Gå till katalogen som innehåller Python-skriptet python_quickstart_client.py .
I Python-miljön installerar du de nödvändiga paketen med pip.
pip install -r requirements.txt
Öppna filen config.py. Uppdatera autentiseringssträngarna med Batch- och lagringskontouppgifter med värdena för dina konton. Exempel:
_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=='
Kör appen
Kör skriptet för att se Batch-arbetsflödet i praktiken:
python python_quickstart_client.py
Granska koden för att lära dig vad varje del av appen gör när skriptet har körts.
När du kör exempelappen ser utdata i konsolen ut ungefär så här. Under körningen uppstår det en paus vid Monitoring all tasks for 'Completed' state, timeout in 00:30:00... medan poolens beräkningsnoder startas. Aktiviteter köas för att köras när den första beräkningsnoden körs. Gå till Batch-kontot i Azure-portalen för att övervaka poolen, beräkningsnoderna, jobbet och aktiviteterna på Batch-kontot.
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...
När aktiviteterna har slutförts kan du se utdata som liknar följande för varje aktivitet:
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....
...
Körningen tar normalt runt 3 minuter om du kör programmet med standardkonfigurationen. Den ursprungliga poolinstallationen tar längst tid.
Granska koden
Python-appen i den här snabbstarten gör följande:
- Överför tre små textfiler till en blobcontainer i ditt Azure-lagringskonto. Dessa filer är indata som ska bearbetas av Batch-aktiviteter.
- Skapar en pool med två beräkningsnoder som kör Ubuntu 20.04 LTS.
- Skapar ett jobb och tre aktiviteter som ska köras på noderna. Varje aktivitet bearbetar en av indatafilerna på en kommandorad för Bash-gränssnitt.
- Visar filer som returneras av aktiviteterna.
Se filen python_quickstart_client.py och information i följande avsnitt.
Förberedelser
Om du vill interagera med ett lagringskonto skapar appen ett BlobServiceClient-objekt.
blob_service_client = BlobServiceClient(
account_url="https://{}.{}/".format(
config._STORAGE_ACCOUNT_NAME,
config._STORAGE_ACCOUNT_DOMAIN
),
credential=config._STORAGE_ACCOUNT_KEY
)
Appen använder referensen blob_service_client för att skapa en container i lagringskontot och för att överföra filer till containern. De lagrade filerna har definierats som Batch ResourceFile-objekt som Batch senare kan hämta till beräkningsnoder.
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]
Appen skapar ett BatchServiceClient-objekt för att skapa och hantera pooler, jobb och aktiviteter i Batch-tjänsten. Batch-klienten i exemplet använder autentisering med delad nyckel. Batch har även stöd för Azure Active Directory-autentisering.
credentials = SharedKeyCredentials(config._BATCH_ACCOUNT_NAME,
config._BATCH_ACCOUNT_KEY)
batch_client = BatchServiceClient(
credentials,
batch_url=config._BATCH_ACCOUNT_URL)
Skapa en pool med beräkningsnoder
För att skapa en Batch-pool använder appen klassen PoolAddParameter för att ange antalet noder, VM-storlek och en poolkonfiguration. Här anger ett VirtualMachineConfiguration-objekt en ImageReference till en Ubuntu Server 20.04 LTS-avbildning som publicerats i Azure Marketplace. Batch stöder ett brett utbud av Linux- och Windows Server-avbildningar på Azure Marketplace samt anpassade VM-avbildningar.
Antalet noder (_POOL_NODE_COUNT) och VM-storlek (_POOL_VM_SIZE) är definierade konstanter. Exemplet skapar som standard en pool med 2 Standard_DS1_v2 noder. Storleken som föreslås erbjuder en bra balans mellan prestanda och kostnad för det här snabba exemplet.
Metoden pool.add skickar poolen till Batch-tjänsten.
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)
Skapa ett Batch-jobb
Ett Batch-jobb är en logisk gruppering av en eller flera aktiviteter. Ett jobb omfattar inställningar som är gemensamma för aktiviteter, till exempel prioritet och vilken pool som aktiviteterna ska köras på. Appen använder klassen JobAddParameter för att skapa ett jobb på din pool. Metoden job.add lägger till ett jobb i det angivna Batch-kontot. Från början har jobbet inga uppgifter.
job = batchmodels.JobAddParameter(
id=job_id,
pool_info=batchmodels.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
Skapa uppgifter
Appen skapar en lista med aktivitetsobjekt med hjälp av klassen TaskAddParameter. Varje aktivitet bearbetar ett indata resource_files-objekt med en command_line-parameter. I det här exemplet kör kommandoraden Bash-gränssnittskommandot cat för att visa textfilen. Detta kommando är ett enkelt exempel i demonstrationssyfte. När du använder Batch är det på kommandoraden som du anger din app eller ditt skript. Batch tillhandahåller ett antal sätt att distribuera appar och skript till beräkningsnoder.
Sedan lägger appen till aktiviteter i jobbet med metoden task.add_collection som köar dem för att köras på beräkningsnoderna.
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)
Visa aktivitetens utdata
Appen övervakar aktivitetstillståndet för att säkerställa att aktiviteterna slutförs. Sedan visar appen den stdout.txt-fil som skapats av varje slutförd aktivitet. När aktiviteten körs skrivs utdata från aktivitetskommandot till 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)
Rensa resurser
Appen tar automatiskt bort den lagringscontainer den skapar och ger dig möjlighet att ta bort Batch-poolen och jobbet. Du debiteras för poolen medan noderna körs, även om inga jobb är schemalagda. Ta bort poolen när du inte längre behöver den. När du tar bort poolen raderas alla aktivitetsutdata på noderna.
När de inte längre behövs tar du bort resursgruppen, Batch-kontot och lagringskontot. Om du vill göra det Azure Portal väljer du resursgruppen för Batch-kontot och väljer Ta bort resursgrupp.
Nästa steg
I den här snabbstarten körde du en liten app som skapats med Batch Python-API för att skapa en Batch-pool och ett Batch-jobb. Jobbet körde exempelaktiviteter och hämtade utdata som skapats på noderna. Nu när du förstår nyckelbegreppen för Batch-tjänsten är du redo att testa Batch med mer realistiska arbetsbelastningar i större skala. Om du vill lära dig mer om Azure Batch och gå igenom parallell arbetsbelastning med ett verkligt program ska du fortsätta med självstudierna om Batch Python.