مشاركة عبر


بدء استخدام Batch SDK ل JavaScript

تعرف على أساسيات إنشاء عميل Batch في JavaScript باستخدام #B0 Azure Batch JavaScript SDK #A1 . نتخذ نهجا خطوة بخطوة لفهم سيناريو لتطبيق دفعي ثم إعداده باستخدام JavaScript.

المتطلبات الأساسية

تفترض هذه المقالة أن لديك معرفة عملية بلغة JavaScript والإلمام ب Linux. كما يفترض أن لديك إعداد حساب Azure مع حقوق الوصول لإنشاء خدمات الدفعة والتخزين.

نوصي بقراءة #B0 نظرة عامة تقنية على Azure Batch #C1 قبل استعراض الخطوات الموضحة في هذه المقالة.

فَهم السيناريو

هنا، لدينا برنامج نصي بسيط مكتوب بلغة Python يقوم بتنزيل جميع ملفات csv من حاوية تخزين Azure Blob وتحويلها إلى JSON. لمعالجة حاويات حساب تخزين متعددة بالتوازي، يمكننا نشر البرنامج النصي كوظيفة Azure Batch.

بنية Azure Batch

يوضح الرسم التخطيطي التالي كيف يمكننا قياس البرنامج النصي Python باستخدام Azure Batch والعميل.

رسم تخطيطي #B0 #A1 يوضح بنية السيناريو. #A2 #C3

تنشر عينة JavaScript مهمة دفعية مع مهمة إعداد (موضحة بالتفصيل لاحقا) ومجموعة من المهام اعتمادا على عدد الحاويات في حساب التخزين. يمكنك تنزيل البرامج النصية من مستودع GitHub.

  • #C1 نموذج التعليمات البرمجية #B0
  • #C1 البرامج النصية #B0 إعداد shell للمهمة
  • #B0 #C1 معالج Python csv إلى JSON

تلميح

لا يحتوي نموذج JavaScript في الارتباط المحدد على تعليمات برمجية محددة ليتم نشرها كتطبيق دالة Azure. يمكنك الرجوع إلى الارتباطات التالية للحصول على إرشادات لإنشاء ارتباط.

  • #B0 إنشاء #C1 تطبيق الوظائف
  • #B0 إنشاء وظيفة مشغل المؤقت #C1

إنشاء التطبيق

الآن، دعونا نتبع العملية خطوة بخطوة في بناء عميل JavaScript:

الخطوة 1: تثبيت Azure Batch SDK

يمكنك تثبيت Azure Batch SDK ل JavaScript باستخدام أمر تثبيت npm.

npm install @azure/batch

يقوم هذا الأمر بتثبيت أحدث إصدار من Azure-batch JavaScript SDK.

تلميح

في تطبيق Azure Function، يمكنك الانتقال إلى "Kudu Console" في علامة التبويب إعدادات وظيفة Azure لتشغيل أوامر تثبيت npm. في هذه الحالة لتثبيت Azure Batch SDK ل JavaScript.

الخطوة 2: إنشاء حساب Azure Batch

يمكنك إنشاؤه من #B0 مدخل Azure #C1 أو من سطر الأوامر ( #A2 PowerShell #A3 #A4 #A5 Azure CLI #A6 ).

فيما يلي الأوامر لإنشاء واحد من خلال Azure CLI.

إنشاء مجموعة موارد، قم بتخطي هذه الخطوة إذا كان لديك بالفعل واحدة تريد إنشاء حساب Batch فيها:

az group create -n "<resource-group-name>" -l "<location>"

بعد ذلك، قم بإنشاء حساب Azure Batch.

az batch account create -l "<location>" -g "<resource-group-name>" -n "<batch-account-name>"

يحتوي كل حساب Batch على مفاتيح الوصول المقابلة له. هذه المفاتيح مطلوبة لإنشاء المزيد من الموارد في حساب دفعة Azure. من الممارسات الجيدة لبيئة الإنتاج استخدام Azure Key Vault لتخزين هذه المفاتيح. يمكنك بعد ذلك إنشاء كيان خدمة للتطبيق. باستخدام كيان الخدمة هذا، يمكن للتطبيق إنشاء رمز OAuth المميز للوصول إلى المفاتيح من مخزن المفاتيح.

az batch account keys list -g "<resource-group-name>" -n "<batch-account-name>"

انسخ المفتاح واخزنه لاستخدامه في الخطوات التالية.

الخطوة 3: إنشاء عميل خدمة Azure Batch

يقوم مقتطف التعليمات البرمجية التالي أولا باستيراد الوحدة النمطية Azure-batch JavaScript ثم إنشاء عميل خدمة الدفعات. تحتاج أولا إلى إنشاء كائن SharedKeyCredentials باستخدام مفتاح حساب Batch المنسخ من الخطوة السابقة.

// 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 في علامة التبويب Overview في مدخل Microsoft Azure. وهو من تنسيق:

https://accountname.location.batch.azure.com

راجع لقطة الشاشة:

#B0 #A1 azure batch uri #A2 #C3

الخطوة 4: إنشاء تجمع Azure Batch

يتكون تجمع Azure Batch من أجهزة ظاهرية متعددة (تعرف أيضا باسم Batch Nodes). تنشر خدمة Azure Batch المهام على هذه العقد وتديرها. يمكنك تحديد معلمات التكوين التالية للتجمع الخاص بك.

  • نوع صورة الجهاز الظاهري
  • حجم عقد الجهاز الظاهري
  • عدد عقد الجهاز الظاهري

تلميح

يعتمد حجم وعدد عقد الجهاز الظاهري إلى حد كبير على عدد المهام التي تريد تشغيلها بالتوازي وكذلك المهمة نفسها. نوصي بالاختبار لتحديد العدد والحجم المثاليين.

تنشئ القصاصة البرمجية التالية كائنات معلمة التكوين.

// 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";

تلميح

للحصول على قائمة بصور Linux VM المتوفرة ل Azure Batch ومعرفات SKU الخاصة بها، راجع #B0 قائمة بصور الجهاز الظاهري #A1 .

بمجرد تحديد تكوين التجمع، يمكنك إنشاء تجمع Azure Batch. يقوم أمر تجمع الدفعات بإنشاء عقد Azure Virtual Machine وإعدادها لتكون جاهزة لتلقي المهام لتنفيذها. يجب أن يكون لكل تجمع معرف فريد للرجوع إليه في الخطوات اللاحقة.

ينشئ مقتطف التعليمات البرمجية التالي تجمع 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)};
});

يمكنك التحقق من حالة التجمع الذي تم إنشاؤه والتأكد من أن الحالة "نشطة" قبل المضي قدما في إرسال مهمة إلى ذلك التجمع.

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");
            }
        }
        });

فيما يلي نموذج كائن نتيجة تم إرجاعه بواسطة الدالة 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' }}

الخطوة 4: إرسال وظيفة Azure Batch

وظيفة Azure Batch هي مجموعة منطقية من المهام المماثلة. في السيناريو لدينا، هو "معالجة csv إلى JSON." يمكن أن تعالج كل مهمة هنا ملفات csv الموجودة في كل حاوية تخزين Azure.

سيتم تشغيل هذه المهام بالتوازي ونشرها عبر عقد متعددة، منسقة بواسطة خدمة Azure Batch.

تلميح

يمكنك استخدام الخاصية #C1 taskSlotsPerNode #B0 لتحديد الحد الأقصى لعدد المهام التي يمكن تشغيلها بشكل متزامن على عقدة واحدة.

مهمة التحضير

عقد الجهاز الظاهري التي تم إنشاؤها هي عقد Ubuntu فارغة. غالبا ما تحتاج إلى تثبيت مجموعة من البرامج كمتطلبات أساسية. عادة، بالنسبة لعقد Linux، يمكنك الحصول على برنامج نصي shell يقوم بتثبيت المتطلبات الأساسية قبل تشغيل المهام الفعلية. ومع ذلك يمكن أن يكون أي قابل للتنفيذ قابل للبرمجة.

يقوم البرنامج النصي #B0 shell #C1 في هذا المثال بتثبيت Python-pip وAzure Storage Blob SDK ل Python.

يمكنك تحميل البرنامج النصي على حساب تخزين Azure وإنشاء SAS URI للوصول إلى البرنامج النصي. يمكن أيضا أتمتة هذه العملية باستخدام Azure Storage JavaScript SDK.

تلميح

يتم تشغيل مهمة إعداد لوظيفة فقط على عقد الجهاز الظاهري حيث تحتاج المهمة المحددة إلى التشغيل. إذا كنت تريد تثبيت المتطلبات الأساسية على جميع العقد بغض النظر عن المهام التي تعمل عليها، يمكنك استخدام خاصية #B0 startTask #C1 أثناء إضافة تجمع. يمكنك استخدام تعريف مهمة التحضير التالي للرجوع إليه.

يتم تحديد مهمة إعداد أثناء إرسال مهمة Azure Batch. فيما يلي بعض معلمات مهمة الإعداد القابلة للتكوين:

  • #A1 معرف #B0 : معرف فريد لمهمة الإعداد
  • #B0 commandLine #A1 : سطر الأوامر لتنفيذ المهمة القابلة للتنفيذ
  • #B0 resourceFiles #A1 : صفيف من الكائنات التي توفر تفاصيل الملفات اللازمة لتنزيل هذه المهمة لتشغيلها. فيما يلي خياراته
    • httpUrl: عنوان URL للملف المراد تنزيله
    • filePath: المسار المحلي لتنزيل الملف وحفظه
    • fileMode: ينطبق فقط على عقد Linux، fileMode بتنسيق ثماني بقيمة افتراضية 0770
  • #B0 waitForSuccess #A1 : إذا تم تعيينها إلى true، فلن يتم تشغيل المهمة عند فشل مهمة التحضير
  • #B0 runElevated #A1 : قم بتعيينه إلى true إذا كانت هناك حاجة إلى امتيازات مرتفعة لتشغيل المهمة.

يظهر مقتطف التعليمات البرمجية التالي نموذج تكوين البرنامج النصي لمهمة الإعداد:

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"}}}

إذا لم تكن هناك متطلبات أساسية ليتم تثبيتها لتشغيل مهامك، يمكنك تخطي مهام الإعداد. تنشئ التعليمات البرمجية التالية مهمة باسم العرض "معالجة ملفات 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);
        }
    }
);

الخطوة 5: إرسال مهام Azure Batch لوظيفة

الآن بعد أن تم إنشاء مهمة csv للعملية الخاصة بنا، دعنا ننشئ مهاما لتلك الوظيفة. بافتراض أن لدينا أربع حاويات، علينا إنشاء أربع مهام، واحدة لكل حاوية.

إذا نظرنا إلى البرنامج النصي #B0 Python #A1 ، فإنه يقبل معلمتين:

  • اسم الحاوية: حاوية التخزين لتنزيل الملفات من
  • النمط: معلمة اختيارية لنمط اسم الملف

بافتراض أن لدينا أربع حاويات "con1" و"con2" و"con3" و"con4" التالية تظهر التعليمات البرمجية إرسال أربع مهام إلى مهمة دفعة Azure "معالجة csv" التي أنشأناها سابقا.

// 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");
        }
    });
});

تضيف التعليمات البرمجية مهاما متعددة إلى التجمع. ويتم تنفيذ كل مهمة على عقدة في تجمع الأجهزة الظاهرية التي تم إنشاؤها. إذا تجاوز عدد المهام عدد الأجهزة الظاهرية في تجمع أو خاصية taskSlotsPerNode، تنتظر المهام حتى يتم توفير عقدة. تتم معالجة هذا التنسيق بواسطة Azure Batch تلقائيا.

يحتوي المدخل على طرق عرض مفصلة حول المهام وحالات الوظيفة. يمكنك أيضا استخدام القائمة والحصول على الوظائف في Azure JavaScript SDK. يتم توفير التفاصيل في ارتباط الوثائق #B0 #A1 .

الخطوات التالية