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.
Než si projdete kroky popsané v tomto článku, doporučujeme přečíst si technický přehled služby Azure Batch .
Vysvětlení scénáře
Tady máme jednoduchý skript napsaný v Pythonu, který stáhne všechny soubory CSV z kontejneru úložiště objektů blob v Azure a převede je na JSON. Abychom mohli paralelně zpracovat více kontejnerů účtu úložiště, můžeme skript nasadit jako úlohu Azure Batch.
Architektura služby Azure Batch
Následující diagram znázorňuje, jak můžeme škálovat skript Pythonu pomocí služby 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.
npm install @azure/batch
Tento příkaz nainstaluje nejnovější verzi sady Azure-batch JavaScript SDK.
Návod
V aplikaci Funkcí Azure můžete přejít na konzolu Kudu na kartě Nastavení funkce Azure a 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 webu Azure Portal nebo z příkazového řádku (PowerShell /Azure CLI).
Následuje příkazy, které ho vytvoří 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>"
Každý účet Batch má odpovídající přístupové klíče. Tyto klíče jsou potřeba k vytvoření dalších prostředků v účtu Azure Batch. Dobrým postupem pro produkční prostředí je použití služby Azure Key Vault k uložení těchto klíčů. Pak můžete vytvořit principál služby pro aplikaci. Pomocí tohoto instančního objektu může aplikace vytvořit token OAuth pro přístup k klíčům z trezoru klíčů.
az batch account keys list -g "<resource-group-name>" -n "<batch-account-name>"
Zkopírujte a uložte klíč, který se má použít v dalších krocích.
Krok 3: Vytvoření klienta služby Azure Batch
Následující fragment kódu nejprve naimportuje modul Azure-batch JavaScript a pak vytvoří klienta služby Batch. Nejprve musíte vytvořit objekt SharedKeyCredentials s klíčem účtu Batch zkopírovaným z předchozího kroku.
// Initializing Azure Batch variables
import { BatchServiceClient, BatchSharedKeyCredentials } from "@azure/batch";
// Replace values below with Batch Account details
const batchAccountName = '<batch-account-name>';
const batchAccountKey = '<batch-account-key>';
const batchEndpoint = '<batch-account-url>';
const credentials = new BatchSharedKeyCredentials(batchAccountName, batchAccountKey);
const batchClient = new BatchServiceClient(credentials, batchEndpoint);
Identifikátor URI služby Azure Batch najdete na kartě Přehled na webu Azure Portal. 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 batch). Služba Azure Batch 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ří uzly virtuálního počítače Azure 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
var pool = batchClient.pool.add(poolConfig, function (error, result){
if(error!=null){console.log(error.response)};
});
Můžete zkontrolovat stav vytvořeného fondu a zajistit, že je aktivní, před odesláním úlohy do tohoto fondu.
var cloudPool = batchClient.pool.get(poolId,function(error,result,request,response){
if(error == null)
{
if(result.state == "active")
{
console.log("Pool is active");
}
}
else
{
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 úloh. V našem scénáři se jedná o proces csv do FORMÁTU JSON. Každý úkol 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, které orchestruje služba Azure Batch.
Návod
Vlastnost taskSlotsPerNode můžete použít k určení maximálního počtu úloh, které lze 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 pip pro Python a Azure Storage Blob SDK pro Python.
Skript můžete nahrát do účtu služby Azure Storage a vygenerovat identifikátor URI SAS pro přístup ke skriptu. Tento proces je také možné automatizovat pomocí sady JavaScript SDK služby Azure Storage.
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í úlohy Azure Batch se zadává 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:
var jobPrepTaskConfig = {id:"installprereq",commandLine:"sudo sh startup_prereq.sh > startup.log",resourceFiles: [{ 'httpUrl': 'Blob sh url', 'filePath': 'startup_prereq.sh' }],waitForSuccess:true,runElevated: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
const job = batchClient.job.add(jobConfig, function (error, result) {
if (error !== null) {
console.log("An error occurred while creating the job...");
console.log(error.response);
}
}
);
Krok 5: Odeslání úkolů služby 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 Pythonu, 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 úlohy Batch "process 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
containerList.forEach(function (val, index) {
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' }]
};
const task = batchClient.task.add(jobId, taskConfig, function (error, result) {
if (error !== null) {
console.log("Error occurred while creating task for container " + containerName + ". Details : " + error.response);
}
else {
console.log("Task for container : " + containerName + " submitted successfully");
}
});
});
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. Tuto orchestraci zpracovává služba Azure Batch automaticky.
Portál obsahuje podrobná zobrazení úkolů a stavů úloh. Také můžete použít funkce 'list' a 'get' v sadě Azure JavaScript SDK. Podrobnosti najdete na odkazu na dokumentaci.
Další kroky
- Seznamte se s pracovním postupem služby Batch a hlavními prostředky, jako jsou fondy, uzly, úlohy a úkoly.
- Podívejte se na referenční informace k rozhraní Batch JavaScript a prozkoumejte rozhraní API služby Batch.