Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Seznamte se se základy vytváření klienta Batch v JavaScriptu pomocí sady Azure Batch JavaScript SDK. Krok za krokem si vysvětlíme scénář dávkové aplikace a pak ho nastavíme pomocí JavaScriptu.
Požadavky
Tento článek předpokládá, že máte funkční znalosti JavaScriptu a znalost Linuxu. Předpokládá se také, že máte nastavení účtu Azure s přístupovými právy k vytváření služeb Batch a Storage.
Doporučujeme přečíst si Azure Batch technický přehled, než si projdete kroky popsané v tomto článku.
Vysvětlení scénáře
Tady máme jednoduchý skript napsaný v Python, který stáhne všechny soubory CSV z kontejneru Azure Blob Storage a převede je na JSON. Aby bylo možné paralelně zpracovat více kontejnerů účtu úložiště, můžeme skript nasadit jako Azure Batch úlohu.
architektura Azure Batch
Následující diagram znázorňuje, jak můžeme škálovat skript Python pomocí Azure Batch a klienta.
JavaScriptová ukázka nasadí dávkovou úlohu s přípravným úkolem (který je podrobně vysvětlen později) a sadu úkolů, které závisejí na počtu kontejnerů v účtu úložiště. Skripty si můžete stáhnout z úložiště GitHub.
Návod
Ukázka JavaScriptu v zadaném odkazu neobsahuje konkrétní kód, který se má nasadit jako aplikace funkcí Azure. Pokyny k jeho vytvoření najdete na následujících odkazech.
Sestavení aplikace
Teď pojďme krok za krokem postupovat podle postupu sestavení javascriptového klienta:
Krok 1: Instalace sady Azure Batch SDK
Sadu Azure Batch SDK pro JavaScript můžete nainstalovat pomocí příkazu npm install. K ověření pomocí Microsoft Entra ID potřebujete také balíček @azure/identity.
npm install @azure/batch @azure/identity
Tento příkaz nainstaluje nejnovější verzi sady Azure Batch JavaScript SDK spolu s knihovnou identit Azure.
Návod
V aplikaci funkcí Azure můžete na kartě Nastavení v konzoli Kudu spustit příkazy npm install. V tomto případě nainstalujte sadu Azure Batch SDK pro JavaScript.
Krok 2: Vytvoření účtu Azure Batch
Můžete ho vytvořit z portálu Azure nebo z příkazového řádku (PowerShell /Azure CLI).
Následuje příkazy, které je potřeba vytvořit prostřednictvím Azure CLI.
Pokud již máte skupinu prostředků, ve které chcete vytvořit účet Batch, tento krok přeskočte; jinak vytvořte novou skupinu prostředků.
az group create -n "<resource-group-name>" -l "<location>"
Dále vytvořte účet Azure Batch.
az batch account create -l "<location>" -g "<resource-group-name>" -n "<batch-account-name>"
Místo používání přístupových klíčů účtu tato ukázka používá k ověřování Microsoft Entra ID pomocí DefaultAzureCredential. Ujistěte se, že identita, pod kterou se kód spouští (vaše přihlášení vývojáře, spravovaná identita nebo instanční objekt), má přiřazenou příslušnou roli Azure RBAC pro účet Batch, například Azure Batch Data Contributor nebo Azure Batch Data Reader. Další informace najdete v tématu Ověřování řešení služby Batch pomocí Microsoft Entra ID.
Při místním spuštění může DefaultAzureCredential vyzvednout přihlašovací údaje z Azure CLI (az login), Azure PowerShell, Visual Studio Code nebo proměnných prostředí. V Azure hostovaných prostředích, jako jsou Azure Functions nebo Azure virtuální počítače, může používat spravovanou identitu.
Krok 3: Vytvoření klienta služby Azure Batch
Následující fragment kódu naimportuje moduly @azure/batch a @azure/identity pak vytvoří BatchClient pomocí DefaultAzureCredential.
// Initializing Azure Batch variables
import { DefaultAzureCredential } from "@azure/identity";
import { BatchClient } from "@azure/batch";
// Replace value below with your Batch account URL
const batchEndpoint = '<batch-account-url>';
const credentials = new DefaultAzureCredential();
const batchClient = new BatchClient(batchEndpoint, credentials);
Identifikátor URI Azure Batch najdete na kartě Přehled na portálu Azure. Má formát:
https://accountname.location.batch.azure.com
Podívejte se na snímek obrazovky:
Krok 4: Vytvoření fondu Azure Batch
Fond Azure Batch se skládá z několika virtuálních počítačů (označovaných také jako Uzly služby Batch). Azure Batch služba nasadí úlohy na tyto uzly a spravuje je. Můžete definovat následující konfigurační parametry pro váš fond.
- Typ virtuálního počítače image
- Velikost uzlů virtuálních počítačů
- Počet uzlů virtuálních počítačů
Návod
Velikost a počet uzlů virtuálních počítačů do značné míry závisí na počtu úloh, které chcete spustit paralelně, a také na samotném úkolu. Doporučujeme otestovat ideální počet a velikost.
Následující fragment kódu vytvoří objekty konfiguračních parametrů.
// Creating Image reference configuration for Ubuntu Linux VM
const imgRef = {
publisher: "Canonical",
offer: "UbuntuServer",
sku: "20.04-LTS",
version: "latest"
}
// Creating the VM configuration object with the SKUID
const vmConfig = {
imageReference: imgRef,
nodeAgentSkuId: "batch.node.ubuntu 20.04"
};
// Number of VMs to create in a pool
const numVms = 4;
// Setting the VM size
const vmSize = "STANDARD_D1_V2";
Návod
Seznam imagí virtuálních počítačů s Linuxem dostupných pro Azure Batch a jejich ID skladových položek najdete v tématu Seznam imagí virtuálních počítačů.
Po definování konfigurace fondu můžete vytvořit fond Azure Batch. Příkaz fondu Batch vytvoří Azure uzly virtuálního počítače a připraví je tak, aby byly připravené k příjmu úkolů ke spuštění. Každý fond by měl mít jedinečné ID pro referenci v dalších krocích.
Následující fragment kódu vytvoří fond Azure Batch.
// Create a unique Azure Batch pool ID
const now = new Date();
const poolId = `processcsv_${now.getFullYear()}${now.getMonth()}${now.getDay()}${now.getHours()}${now.getSeconds()}`;
const poolConfig = {
id: poolId,
displayName: "Processing csv files",
vmSize: vmSize,
virtualMachineConfiguration: vmConfig,
targetDedicatedNodes: numVms,
enableAutoScale: false
};
// Creating the Pool
try {
await batchClient.createPool(poolConfig);
} catch (error) {
console.log(error);
}
Můžete zkontrolovat stav vytvořeného fondu a zajistit, že je aktivní, před odesláním úlohy do tohoto fondu.
try {
const cloudPool = await batchClient.getPool(poolId);
if (cloudPool.state === "active") {
console.log("Pool is active");
}
} catch (error) {
if (error.statusCode === 404) {
console.log("Pool not found yet returned 404...");
} else {
console.log("Error occurred while retrieving pool data");
}
}
Následuje ukázkový objekt výsledku vrácený funkcí pool.get.
{
id: 'processcsv_2022002321',
displayName: 'Processing csv files',
url: 'https://<batch-account-name>.westus.batch.azure.com/pools/processcsv_2022002321',
eTag: '0x8D9D4088BC56FA1',
lastModified: 2022-01-10T07:12:21.943Z,
creationTime: 2022-01-10T07:12:21.943Z,
state: 'active',
stateTransitionTime: 2022-01-10T07:12:21.943Z,
allocationState: 'steady',
allocationStateTransitionTime: 2022-01-10T07:13:35.103Z,
vmSize: 'standard_d1_v2',
virtualMachineConfiguration: {
imageReference: {
publisher: 'Canonical',
offer: 'UbuntuServer',
sku: '20.04-LTS',
version: 'latest'
},
nodeAgentSKUId: 'batch.node.ubuntu 20.04'
},
resizeTimeout: 'PT15M',
currentDedicatedNodes: 4,
currentLowPriorityNodes: 0,
targetDedicatedNodes: 4,
targetLowPriorityNodes: 0,
enableAutoScale: false,
enableInterNodeCommunication: false,
taskSlotsPerNode: 1,
taskSchedulingPolicy: { nodeFillType: 'Spread' }}
Krok 4: Odeslání úlohy Azure Batch
Úloha Azure Batch je logická skupina podobných úkolů. V našem scénáři se jedná o "Zpracování souboru CSV do formátu JSON". Každý úkol zde může zpracovávat soubory CSV, které jsou přítomné v každém kontejneru Azure Storage.
Tyto úlohy by se spouštěly paralelně a nasazovaly napříč několika uzly, orchestrované službou Azure Batch.
Návod
Vlastnost taskSlotsPerNode můžete použít k určení maximálního počtu úloh, které se dají spustit souběžně na jednom uzlu.
Přípravný úkol
Vytvořené uzly virtuálních počítačů jsou prázdné uzly Ubuntu. Často je potřeba nainstalovat sadu programů podle požadavků. Pro uzly s Linuxem můžete mít skript shellu, který nainstaluje nezbytné balíčky před spuštěním skutečných úloh. Může to ale být jakýkoli programovatelný spustitelný soubor.
Shellový skript v tomto příkladu nainstaluje Python-pip a Azure Storage Blob SDK pro Python.
Skript můžete nahrát na účet Azure Storage a vygenerovat identifikátor URI SAS pro přístup ke skriptu. Tento proces je také možné automatizovat pomocí sady Azure Storage JavaScript SDK.
Návod
Přípravný úkol pro úlohu běží jenom na uzlech virtuálních počítačů, kde je potřeba konkrétní úkol spustit. Pokud chcete, aby se požadavky nainstalovaly na všechny uzly bez ohledu na úlohy, které na něm běží, můžete při přidávání fondu použít vlastnost startTask. Pro referenci můžete použít následující definici přípravného úkolu.
Během odesílání Azure Batch úlohy je určen přípravný úkol. Tady jsou některé konfigurovatelné parametry přípravné úlohy:
- ID: Jedinečný identifikátor pro přípravný úkol
- commandLine: Příkazový řádek pro spuštění spustitelného souboru úlohy
-
resourceFiles: Pole objektů, které poskytují podrobnosti o souborech potřebných ke stažení pro spuštění této úlohy. Níže jsou uvedené možnosti:
- httpUrl: Adresa URL souboru ke stažení
- filePath: Místní cesta ke stažení a uložení souboru
- fileMode: Platí pouze pro uzly Linuxu, fileMode je v osmičkovém formátu s výchozí hodnotou 0770.
- waitForSuccess: Pokud je nastavena hodnota true, úloha se nespustí při selhání přípravné úlohy.
- runElevated: Nastavte ji na true, pokud jsou ke spuštění úlohy potřeba zvýšená oprávnění.
Následující fragment kódu ukazuje ukázku konfigurace skriptu přípravného úkolu:
const jobPrepTaskConfig = {
id: "installprereq",
commandLine: "sudo sh startup_prereq.sh > startup.log",
resourceFiles: [{ httpUrl: 'Blob sh url', filePath: 'startup_prereq.sh' }],
waitForSuccess: true,
userIdentity: { autoUser: { elevationLevel: "admin", scope: "pool" } }
};
Pokud pro spuštění úkolů nejsou žádné požadavky, můžete úkoly přípravy přeskočit. Následující kód vytvoří úlohu se zobrazovaným názvem "zpracování souborů CSV".
// Setting Batch Pool ID
const poolInfo = { poolId: poolId };
// Batch job configuration object
const jobId = "processcsvjob";
const jobConfig = {
id: jobId,
displayName: "process csv files",
jobPreparationTask: jobPrepTaskConfig,
poolInfo: poolInfo
};
// Adding Azure batch job to the pool
try {
await batchClient.createJob(jobConfig);
} catch (error) {
console.log("An error occurred while creating the job...");
console.log(error);
}
Krok 5: Odeslání úloh Azure Batch pro úlohu
Teď, když je naše úloha zpracování csv vytvořená, můžeme pro tuto úlohu vytvářet úkoly. Za předpokladu, že máme čtyři kontejnery, musíme vytvořit čtyři úkoly, jeden pro každý kontejner.
Pokud se podíváme na skript Python, přijímá dva parametry:
- název kontejneru: Kontejner úložiště pro stahování souborů z
- pattern: Volitelný parametr vzoru názvu souboru
Za předpokladu, že máme čtyři kontejnery "con1", "con2", "con3", "con4" následující kód ukazuje odeslání čtyř úkolů do Azure dávkové úlohy "proces csv", kterou jsme vytvořili dříve.
// storing container names in an array
const containerList = ["con1", "con2", "con3", "con4"]; //Replace with list of blob containers within storage account
for (const val of containerList) {
console.log("Submitting task for container : " + val);
const containerName = val;
const taskID = containerName + "_process";
// Task configuration object
const taskConfig = {
id: taskID,
displayName: 'process csv in ' + containerName,
commandLine: 'python processcsv.py --container ' + containerName,
resourceFiles: [{ httpUrl: 'Blob script url', filePath: 'processcsv.py' }]
};
try {
await batchClient.createTask(jobId, taskConfig);
console.log("Task for container : " + containerName + " submitted successfully");
} catch (error) {
console.log("Error occurred while creating task for container " + containerName + ". Details : " + error);
}
}
Kód přidá do poolu více úloh. Každá z těchto úloh se spustí na uzlu ve fondu vytvořených virtuálních počítačů. Pokud počet úkolů překračuje počet virtuálních počítačů ve fondu nebo taskSlotsPerNode vlastnost, úkoly čekají na zpřístupnění uzlu. Orchestrace je automaticky zpracovávána službou Azure Batch.
Portál obsahuje podrobná zobrazení úkolů a stavů úloh. Můžete také použít funkce list a get v Azure JavaScript SDK. Podrobnosti najdete na odkazu na dokumentaci.
Další kroky
- Seznamte se s pracovním postupem služby Batch a primárními prostředky, jako jsou fondy, uzly, joby a úkoly.
- Podívejte se na referenční informace k rozhraní Batch JavaScript a prozkoumejte rozhraní API služby Batch.