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
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
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:
- Az Azure Search sávon keresse meg és válassza ki a Batch-fiók nevét.
- A Batch-fiók lapján válassza a bal oldali navigációs sáv Kulcsok elemét.
- 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
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 )
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]
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.