Rövid útmutató: Batch-készlet létrehozása és feladat futtatása a Python használatával

Ez a rövid útmutató bemutatja, hogyan kezdheti el az Azure Batch használatát egy olyan alkalmazás futtatásával, amely a PythonHoz készült Azure Batch-kódtárakat használja. A Python-alkalmazás:

  • Több bemeneti adatfájlt tölt fel egy Azure Storage-blobtárolóba a Batch-feladatfeldolgozáshoz való használatra.
  • Létrehoz egy készletet két virtuális gépből vagy számítási csomópontból, amely az Ubuntu 20.04 LTS operációs rendszert futtatja.
  • Létrehoz egy feladatot és három tevékenységet, amelyek a csomópontokon futnak. Minden feladat egy Bash-rendszerhéj parancssorával dolgozza fel az egyik bemeneti fájlt.
  • Megjeleníti a tevékenységek által visszaadott kimeneti fájlokat.

A rövid útmutató elvégzése után megismerheti a Batch szolgáltatás alapvető fogalmait, és készen áll a Batch reálisabb, nagyobb méretű számítási feladatok használatára.

Előfeltételek

  • Egy Azure-fiók, aktív előfizetéssel. Ha nem rendelkezik ilyen fiókkal, hozzon létre ingyenes fiókot.

  • Csatolt Azure Storage-fiókkal rendelkező Batch-fiók. A fiókokat az alábbi módszerek bármelyikével hozhatja létre: Azure CLI | Azure Portal | Bicep | ARM-sablon | Terraform.

  • A Python 3.8-es vagy újabb verziója, amely tartalmazza a pip csomagkezelőt.

Az alkalmazás futtatása

A rövid útmutató végrehajtásához töltse le vagy klónozza a Python-alkalmazást, adja meg a fiók értékeit, futtassa az alkalmazást, és ellenőrizze a kimenetet.

Az alkalmazás letöltése vagy klónozása

  1. Töltse le vagy klónozza az Azure Batch Python gyorsindítási alkalmazást a GitHubról. Az alábbi paranccsal klónozza az alkalmazás-adattárat egy Git-ügyféllel:

    git clone https://github.com/Azure-Samples/batch-python-quickstart.git
    
  2. Váltson a batch-python-quickstart/src mappára, és telepítse a szükséges csomagokat a használatával pip.

    pip install -r requirements.txt
    

Adja meg a fiók adatait

A Python-alkalmazásnak a Batch- és Storage-fiókneveket, a fiókkulcsértékeket és a Batch-fiókvégpontot kell használnia. Ezeket az információkat az Azure Portalról, az Azure API-kból vagy a parancssori eszközökből szerezheti be.

Fiókadatok lekérése az Azure Portalról:

  1. Az Azure Search sávon keresse meg és válassza ki a Batch-fiók nevét.
  2. A Batch-fiók lapján válassza a bal oldali navigációs sáv Kulcsok elemét.
  3. Másolja a következő értékeket a Kulcsok lapra:
  • Batch-fiók
  • Fiókvégpont
  • Elsődleges hozzáférési kulcs
  • Tárfiók neve
  • 1. kulcs

A letöltött Python-alkalmazásban szerkessze a következő sztringeket a config.py fájlban a másolt értékek megadásához.

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>'

Fontos

Az alkalmazás forrásában lévő fiókkulcsok közzététele éles használat esetén nem ajánlott. Korlátoznia kell a hitelesítő adatokhoz való hozzáférést, és változók vagy konfigurációs fájlok használatával hivatkoznia kell rájuk a kódban. A Legjobb, ha Batch- és Storage-fiókkulcsokat tárol az Azure Key Vaultban.

Az alkalmazás futtatása és a kimenet megtekintése

Futtassa az alkalmazást a Batch-munkafolyamat működés közbeni megtekintéséhez.

python python_quickstart_client.py

A tipikus futási idő körülbelül három perc. A kezdeti készletcsomópont beállítása a legtöbb időt igénybe veszi.

Az alkalmazás a következő példához hasonló kimenetet ad vissza:

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... A készlet számítási csomópontjai elindulnak. A tevékenységek létrehozásakor a Batch várólistára állítja őket a készleten való futtatáshoz. Amint az első számítási csomópont elérhetővé válik, az első feladat a csomóponton fut. A csomópontok, a tevékenységek és a feladatok állapotát az Azure Portal Batch-fiókjának oldaláról figyelheti.

Az egyes tevékenységek befejezése után a következő példához hasonló kimenet jelenik meg:

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...

A kód áttekintése

Tekintse át a kódot az Azure Batch Python rövid útmutatójának lépéseinek megértéséhez.

Szolgáltatás-ügyfelek létrehozása és erőforrásfájlok feltöltése

  1. Az alkalmazás létrehoz egy BlobServiceClient objektumot a Storage-fiókkal való interakcióhoz.

    blob_service_client = BlobServiceClient(
            account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/",
            credential=config.STORAGE_ACCOUNT_KEY
        )
    
  2. Az alkalmazás a blob_service_client hivatkozással létrehoz egy tárolót a Storage-fiókban, és adatfájlokat tölt fel a tárolóba. A tárolóban lévő fájlokat a rendszer a Batch által később a számítási csomópontra letölthető Batch ResourceFile-objektumként határozza meg.

    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]
    
  3. Az alkalmazás létrehoz egy BatchServiceClient objektumot, amely készleteket, feladatokat és feladatokat hoz létre és kezel a Batch-fiókban. A Batch-ügyfél megosztott kulcsos hitelesítést használ. A Batch a Microsoft Entra-hitelesítést is támogatja.

    credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME,
            config.BATCH_ACCOUNT_KEY)
    
        batch_client = BatchServiceClient(
            credentials,
            batch_url=config.BATCH_ACCOUNT_URL)
    

Számításicsomópont-készlet létrehozása

Batch-készlet létrehozásához az alkalmazás a PoolAddParameter osztály használatával állítja be a csomópontok számát, a virtuális gép méretét és a készletkonfigurációt. Az alábbi VirtualMachineConfiguration objektum az Ubuntu Server 20.04 LTS Azure Marketplace-rendszerképhez tartozó ImageReference objektumot adja meg. A Batch linuxos és Windows Server Marketplace-rendszerképek széles skáláját támogatja, és egyéni virtuálisgép-rendszerképeket is támogat.

Az POOL_NODE_COUNT és POOL_VM_SIZE definiált állandók. Az alkalmazás két méretű Standard_DS1_v2 csomópontból álló készletet hoz létre. Ez a méret a teljesítmény és a költségek jó egyensúlyát kínálja ehhez a rövid útmutatóhoz.

A pool.add metódus elküldi a készletet a Batch szolgáltatásnak.

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)

Batch-feladat létrehozása

A Batch-feladat egy vagy több tevékenység logikai csoportosítása. A feladat tartalmazza a tevékenységekhez gyakran használt beállításokat, például a prioritást és a készletet a tevékenységek futtatásához.

Az alkalmazás a JobAddParameter osztály használatával hoz létre feladatot a készleten. A job.add metódus hozzáadja a feladatot a megadott Batch-fiókhoz. A feladat kezdetben nem tartalmaz tevékenységeket.

job = batchmodels.JobAddParameter(
    id=job_id,
    pool_info=batchmodels.PoolInformation(pool_id=pool_id))

batch_service_client.job.add(job)

Feladatok létrehozása

A Batch többféleképpen is üzembe helyezhet alkalmazásokat és szkripteket a számítási csomópontokon. Ez az alkalmazás a TaskAddParameter osztály használatával létrehozza a feladatobjektumok listáját. Minden feladat feldolgoz egy bemeneti fájlt egy command_line paraméterrel egy alkalmazás vagy szkript megadásához.

Az alábbi szkript a bash shell cat parancs futtatásával dolgozza fel a bemeneti resource_files objektumokat a szövegfájlok megjelenítéséhez. Az alkalmazás ezután a task.add_collection metódussal adja hozzá az egyes tevékenységeket a feladathoz, amely várólistára állítja a számítási csomópontokon futtatandó feladatokat.

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)

A tevékenység kimenetének megtekintése

Az alkalmazás monitorozza a tevékenységek állapotát, hogy a tevékenységek sikeresen befejeződjenek. Ha minden tevékenység sikeresen lefut, a feladatparancs kimenete a stdout.txt fájlba ír. Az alkalmazás ezután megjeleníti az egyes befejezett tevékenységek stdout.txt fájlját.

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)

Az erőforrások eltávolítása

Az alkalmazás automatikusan törli a létrehozott Storage-tárolót, és felkínálja a Batch-készlet és -feladat törlésének lehetőségét. A készletek és csomópontok díjakat vonnak maguk után, amíg a csomópontok futnak, még akkor is, ha nem futtatnak feladatokat. Ha már nincs szüksége a készletre, törölje.

Ha már nincs szüksége a Batch-erőforrásokra, törölheti az őket tartalmazó erőforráscsoportot. Az Azure Portalon válassza az Erőforráscsoport törlése lehetőséget az erőforráscsoport lap tetején. Az erőforráscsoport törlése képernyőn adja meg az erőforráscsoport nevét, majd válassza a Törlés lehetőséget.

Következő lépések

Ebben a rövid útmutatóban futtatott egy alkalmazást, amely a Batch Python API használatával hoz létre Batch-készletet, csomópontokat, feladatokat és feladatokat. A feladat erőforrásfájlokat töltött fel egy tárolóba, feladatokat futtatott a csomópontokon, és megjeleníti a csomópontok kimenetét.

Most, hogy megismerte a Batch szolgáltatás főbb fogalmait, készen áll a Batch reálisabb, nagyobb méretű számítási feladatok használatára. Ha többet szeretne megtudni az Azure Batchről, és egy valós alkalmazással párhuzamos számítási feladaton szeretne végighaladni, folytassa a Batch Python-oktatóanyaggal.