Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Batch JavaScript SDK kullanarak JavaScript'te Batch istemcisi oluşturmanın temellerini öğrenin. Uygulama toplu bir senaryoyu anlamak ve ardından JavaScript kullanarak kurulumunu yapmak için adım adım bir yaklaşım benimseriz.
Önkoşullar
Bu makalede JavaScript ve Linux hakkında bilgi sahibi olduğunuz varsayılmaktadır. Ayrıca Batch ve Depolama hizmetleri oluşturmak için erişim haklarına sahip bir Azure hesabı kurulumunuz olduğu varsayılır.
Bu makalede açıklanan adımlara geçmeden önce Azure Batch Teknik Genel Bakış okumanızı öneririz.
Senaryoyu anlama
tr-TR: Burada, bir Azure Blob depolama kapsayıcısından tüm CSV dosyalarını indirip bunları JSON'a dönüştüren Python ile yazılmış basit bir betik bulunuyor. Birden çok depolama hesabı konteynerini paralel olarak işlemek için betiği bir Azure Batch işi olarak dağıtabiliriz.
Azure Batch mimarisi
Aşağıdaki diyagramda, Azure Batch ve istemci kullanarak Python betiğini nasıl ölçeklendirebileceğimiz gösterilmiştir.
JavaScript örneği, bir hazırlık göreviyle (detaylar daha sonra açıklanacaktır) ve depolama hesabındaki konteyner sayısına bağlı olan bir dizi görevle bir toplu iş görevi dağıtır. Betikleri GitHub deposundan indirebilirsiniz.
Tavsiye
Belirtilen bağlantıdaki JavaScript örneği, Azure işlev uygulaması olarak dağıtılacak belirli bir kod içermiyor. Aşağıdaki bağlantılara başvurarak bir tane oluşturma talimatlarına ulaşabilirsiniz.
Uygulamayı oluştur
Şimdi, JavaScript istemcisini oluşturma sürecini adım adım takip edelim:
1. Adım: Azure Batch SDK'sı yükleme
npm install komutunu kullanarak JavaScript için Azure Batch SDK'sını yükleyebilirsiniz.
npm install @azure/batch
Bu komut, azure-batch JavaScript SDK'sının en son sürümünü yükler.
Tavsiye
bir Azure İşlev uygulamasında, npm yükleme komutlarını çalıştırmak için Azure işlevinin Ayarlar sekmesindeki "Kudu Konsolu"na gidebilirsiniz. JavaScript için Azure Batch SDK'sını yüklemek gerektiğinde.
2. Adım: Azure Batch hesabı oluşturma
Azure portalından veya komut satırından (PowerShell /Azure CLI) oluşturabilirsiniz.
Aşağıda, Azure CLI aracılığıyla bir tane oluşturmaya ilişkin komutlar yer alır.
Kaynak Grubu oluşturun, eğer Batch Hesabı oluşturmak istediğiniz bir Kaynak Grubu zaten varsa bu adımı atlayın.
az group create -n "<resource-group-name>" -l "<location>"
Ardından bir Azure Batch hesabı oluşturun.
az batch account create -l "<location>" -g "<resource-group-name>" -n "<batch-account-name>"
Her Batch hesabının ilgili erişim anahtarları vardır. Bu anahtarlar, Azure batch hesabında daha fazla kaynak oluşturmak için gereklidir. Üretim ortamı için iyi bir uygulama, bu anahtarları depolamak için Azure Key Vault kullanmaktır. Ardından uygulama için bir Hizmet sorumlusu oluşturabilirsiniz. Uygulama bu hizmet işletme hesabı kullanarak anahtar kasasından anahtarlara erişmek için bir OAuth belirteci oluşturabilir.
az batch account keys list -g "<resource-group-name>" -n "<batch-account-name>"
Anahtarı kopyalayın ve sonraki adımlarda kullanılmak üzere saklayın.
3. Adım: Azure Batch hizmet istemcisi oluşturma
Aşağıdaki kod parçacığı önce azure-batch JavaScript modülünü içeri aktarır ve ardından bir Batch Hizmeti istemcisi oluşturur. Önce, bir SharedKeyCredentials nesnesi oluşturmak için önceki adımdan kopyalanmış olan Batch hesap anahtarını kullanmanız gerekir.
// 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);
Azure Batch URI'sini Azure portalın Genel Bakış sekmesinde bulabilirsiniz. Şu biçimde:
https://accountname.location.batch.azure.com
Ekran görüntüsüne bakın:
4. Adım: Azure Batch havuzu oluşturma
Azure Batch havuzu birden çok VM'yi (Batch Düğümleri olarak da bilinir) içerir. Azure Batch hizmeti, görevleri bu düğümlere dağıtır ve yönetir. Size ait havuz için aşağıdaki yapılandırma parametrelerini tanımlayabilirsiniz.
- Sanal Makine görüntüsü türü
- Sanal Makine Düğümlerinin Boyutu
- Sanal Makine düğümlerinin sayısı
Tavsiye
Sanal Makine düğümlerinin boyutu ve sayısı büyük ölçüde paralel olarak çalıştırmak istediğiniz görev sayısına ve görevin kendisine bağlıdır. İdeal sayıyı ve boyutu belirlemek için test yapmanızı öneririz.
Aşağıdaki kod kesiti, yapılandırma parametresi nesnelerini oluşturur.
// 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";
Tavsiye
Azure Batch ve SKU kimlikleri için kullanılabilen Linux VM görüntülerinin listesi için bkz. Sanal makine görüntülerini listeleme.
Havuz yapılandırması tanımlandıktan sonra Azure Batch havuzunu oluşturabilirsiniz. Batch havuzu komutu Azure Sanal Makine düğümleri oluşturur ve bunları yürütülecek görevleri almaya hazır olacak şekilde hazırlar. Her havuzun sonraki adımlarda başvuru için benzersiz bir kimliği olmalıdır.
Aşağıdaki kod parçacığı bir Azure Batch havuzu oluşturur.
// 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)};
});
Havuzun oluşturulan durumunu kontrol edebilir ve bir işi o havuza göndermeden önce durumun "aktif" olduğundan emin olabilirsiniz.
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");
}
}
});
Aşağıda, pool.get işlevi tarafından döndürülen bir örnek sonuç nesnesi bulunmaktadır.
{
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' }}
4. Adım: Azure Batch işini gönderme
Azure Batch işi, benzer görevlerin mantıksal bir grubudur. Senaryomuzda , "Csv'yi JSON'a işle" şeklindedir. Buradaki her görev, her Azure Storage kapsayıcısında bulunan csv dosyalarını işliyor olabilir.
Bu görevler paralel olarak çalışır ve Azure Batch hizmeti tarafından düzenlenerek birden çok düğüme dağıtılır.
Tavsiye
taskSlotsPerNode özelliğini kullanarak tek bir düğümde eşzamanlı olarak çalışabilecek en fazla görev sayısını belirtebilirsiniz.
Hazırlık görevi
Oluşturulan VM düğümleri boş Ubuntu düğümleridir. Genellikle, ön koşul olarak bir dizi program kurmanız gerekir. Genellikle, Linux düğümleri için, asıl görevler çalışmadan önce ön koşulları yükleyecek bir kabuk betiğine sahip olabilirsiniz. Ancak, herhangi bir programlanabilir çalıştırılabilir dosya olabilir.
Bu örnekteki shell betiği Python-pip'i ve Python için Azure Storage Blob SDK'sını yükler.
Betiği bir Azure Storage Hesabına yükleyebilir ve betike erişmek için bir SAS URI'sini oluşturabilirsiniz. Bu işlem Azure Storage JavaScript SDK'sı kullanılarak da otomatikleştirilebilir.
Tavsiye
Bir iş için hazırlık görevi yalnızca belirli görevin çalıştırılması gereken VM düğümlerinde çalışır. Üzerinde çalışan görevlerden bağımsız olarak tüm düğümlere önkoşulların yüklenmesini istiyorsanız havuz eklerken startTask özelliğini kullanabilirsiniz. Referans için aşağıdaki hazırlık görevi tanımını kullanabilirsiniz.
Azure Batch işin gönderilmesi sırasında bir hazırlık görevi belirtilir. İşte yapılandırılabilir bazı hazırlık görevi parametreleri:
- Kimlik: Hazırlık görevi için benzersiz bir tanımlayıcı
- commandLine: Görevi çalıştırmak için komut satırı
-
resourceFiles: Bu görevin çalışması için indirilmesi gereken dosyaların ayrıntılarını sağlayan nesne dizisi. İşte seçenekleri
- httpUrl: İndirilecek dosyanın URL'si
- filePath: Dosyayı indirmek ve kaydetmek için yerel yol
- fileModu: Yalnızca Linux düğümleri için geçerlidir, fileModu oktal formatta olup varsayılan değer olarak 0770 kullanılır.
- waitForSuccess: True olarak ayarlanırsa, hazırlık görevleri başarısız olduğunda görev çalışmaz
- runElevated: Görevi çalıştırmak için yükseltilmiş ayrıcalıklar gerekiyorsa true olarak ayarlayın.
Aşağıdaki kod parçacığı, hazırlık görevi betiği yapılandırma örneğini gösterir:
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"}}}
Eğer görevlerinizin çalışması için kurulum gerektiren ön koşullar yoksa, hazırlık görevlerini atlayabilirsiniz. Aşağıdaki kod, "process csv files" olarak görüntülenen bir iş oluşturur.
// 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);
}
}
);
5. Adım: İş için Azure Batch görevleri gönderme
Şimdi süreç csv işimiz oluşturulduğuna göre, o iş için görevler oluşturalım. Dört konteynerimiz olduğunu varsayarak, her biri için bir tane olmak üzere dört görev oluşturmamız gerekiyor.
Python betiğine bakarsak iki parametre kabul eder:
- container name: Dosyaların indirileceği Depolama konteyneri
- desen: Dosya adı deseninin isteğe bağlı parametresi
Dört "con1", "con2", "con3","con4" kapsayıcımız olduğunu varsayarsak, daha önce oluşturduğumuz Azure toplu işi "process csv" işlemine dört görev gönderildiğini gösteren kod aşağıdadır.
// 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");
}
});
});
Kod havuza birden fazla görev ekler. Her bir görev, oluşturulan VM havuzundaki bir düğümde yürütülür. Bir havuzdaki VM sayısını veya taskSlotsPerNode özelliğini aşan görevler, bir düğüm kullanılabilir hale gelene kadar bekler. Bu düzenleme otomatik olarak Azure Batch tarafından işlenir.
Portal, görevler ve iş durumları hakkında detaylı görüntüler sunmaktadır. Ayrıca listeyi kullanabilir ve Azure JavaScript SDK'sında işlevleri alabilirsiniz. Ayrıntılar belge bağlantısında verilmiştir.
Sonraki adımlar
- Batch hizmetinin iş akışı ve havuzlar, düğümler, işler ve görevler gibi birincil kaynakları hakkında bilgi edinin.
- Batch API'sini keşfetmek için Bkz. Batch JavaScript başvurusu .