مشاركة عبر


استمر في الاحتفاظ ببيانات المهام والمهام في Azure Storage باستخدام مكتبة Batch File Conventions لـ .NET

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

للحصول على خيارات حساب التخزين في Batch، تأكد من مراجعة حسابات Batch وحسابات تخزين Azure.

يمكنك الاحتفاظ ببيانات المهمة من Azure Batch باستخدام مكتبة اصطلاحات الملفات لـ .NET. تعمل مكتبة اصطلاحات الملفات على تبسيط عملية تخزين بيانات إخراج المهام في Azure Storage واستردادها. يمكنك استخدام مكتبة اصطلاحات الملفات في كل من التعليمة البرمجية للمهمة والعميل. في وضع المهمة، استخدم المكتبة لاستمرار الملفات. في وضع العميل، استخدم المكتبة لسرد الملفات واستردادها. يمكن للتعليمة البرمجية للمهمة أيضاً استرداد مخرجات مهام المصدر باستخدام المكتبة، كما هو الحال في سيناريو تبعيات المهام.

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

بدءاً من الإصدار 2017-05-01، تدعم واجهة برمجة تطبيقات خدمة الدُفعات بيانات الإخراج المستمرة إلى Azure Storage للمهام ومهام إدارة الوظائف التي تعمل على التجمعات التي تم إنشاؤها باستخدام تكوين الجهاز الظاهري. يمكنك الاستمرار في الإخراج من داخل التعليمات البرمجية التي تنشئ مهمة. هذا الأسلوب هو بديل لمكتبة اصطلاحات الملفات. يمكنك تعديل تطبيقات العميل Batch للاستمرار في الإخراج دون الحاجة إلى تحديث التطبيق الذي تعمل مهمتك عليه. لمزيد من المعلومات، راجع الاحتفاظ ببيانات المهمة في Azure Storage باستخدام Batch service API.

حالات استخدام المكتبة

يوفر Azure Batch طرقاً متعددة لاستمرار إخراج المهمة. استخدم مكتبة اصطلاحات الملفات عندما تريد:

  • يمكنك تعديل التعليمات البرمجية للتطبيق الذي تقوم مهمتك بتشغيله لاستمرار الملفات باستخدام مكتبة اصطلاحات الملفات.
  • تريد دفق البيانات إلى Azure Storage أثناء استمرار تشغيل المهمة.
  • استمرار البيانات من التجمعات.
  • يحتاج تطبيق العميل الخاص بك أو المهام الأخرى في الوظيفة إلى تحديد موقع ملفات إخراج المهام وتنزيلها حسب المعرف أو حسب الغرض.
  • عرض إخراج المهمة في مدخل Microsoft Azure.

بالنسبة للسيناريوهات الأخرى، قد تحتاج إلى التفكير في نهج مختلف. لمزيد من المعلومات حول الخيارات الأخرى، راجع الاحتفاظ بإخراج الوظائف والمهام في Azure Storage.

ما هو معيار اصطلاحات الملفات الدفعية؟

يوفر معيار اصطلاحات الملفات الدفعية مخطط تسمية للحاويات الوجهة ومسارات البيانات الثنائية الكبيرة التي تتم كتابة ملفات الإخراج الخاصة بك عليها. يمكن عرض الملفات التي استمرت في تخزين Azure وتتبع المعيار القياسي تلقائيًا في مدخل Azure.

تقوم مكتبة اصطلاحات الملفات لـ .NET تلقائياً بتسمية حاويات التخزين وملفات إخراج المهام وفقاً لمعيار اصطلاحات الملفات. وتوفر المكتبة أيضا طرقا لاستعلام ملفات الإخراج في تخزين Azure. يمكنك الاستعلام عن طريق معرف الوظيفة أو معرف المهمة أو الغرض.

إذا كنت تقوم بالتطوير باستخدام لغة أخرى غير .NET، فيمكنك تنفيذ معيار اصطلاحات الملفات بنفسك في تطبيقك. لمزيد من المعلومات، راجع تطبيق معيار اصطلاحات الملفات الدفعية.

لاستمرار بيانات الإخراج في Azure Storage باستخدام مكتبة اصطلاحات الملفات، يجب عليك أولاً ربط حساب Azure Storage بحساب Batch الخاص بك.

  1. تسجيل الدخول إلى ⁧⁩مدخل Microsoft Azure⁧⁩.
  2. ابحث عن دفعة وحددها في شريط البحث.
  3. حدد حساب دُفعة للارتباط مع Azure Storage.
  4. في صفحة حساب Batch، ضمن إعدادات، حدد حساب تخزين.
  5. إذا لم يكن لديك بالفعل حساب تخزين مرتبط بحساب دُفعة الخاص بك، فانقر فوق حساب تخزين (بلا).
  6. حدد حساب تخزين Azure. للحصول على أفضل أداء، استخدم حساب في نفس منطقة حساب Batch.

استمرار بيانات الإخراج

يمكنك الاحتفاظ ببيانات إخراج المهمة والمهمة باستخدام مكتبة اصطلاحات الملفات. إنشاء حاوية في تخزين Azure. ثم احفظ الإخراج إلى الحاوية. استخدم مكتبة عميل Azure Storage لـ .NET في رمز المهمة لتحميل إخراج المهمة إلى الحاوية.

لمزيد من المعلومات حول العمل مع الحاويات والنقاط الكبيرة في تخزين Azure، راجع بدء استخدام تخزين Azure Blob باستخدام .NET.

استمرت جميع مخرجات المهام والمهام في مكتبة اصطلاحات الملفات مخزنة في نفس الحاوية. في حالة محاولة عدد كبير من المهام الاحتفاظ بالملفات في نفس الوقت، قد تُفرض قيود تقييد التخزين في Azure. لمزيد من المعلومات حول قيود التقييد، راجع قائمة التحقق من الأداء وقابلية التوسع لتخزينكائن ثنائي كبير الحجم.

إنشاء حاوية تخزين

لاستمرار إخراج المهام في Azure Storage، أنشئ أولاً حاوية عن طريق استدعاء CloudJob.PrepareOutputStorageAsync. تأخذ طريقة الامتداد هذه كائن CloudStorageAccount كمعامل. ينشئ الأسلوب حاوية باسم وفقا لمعيار اصطلاحات الملفات. يمكن اكتشاف محتويات الحاوية بواسطة مدخل Microsoft Azure وطرق الاسترداد الموضحة في هذه المقالة.

عادةً يقوم بإنشاء حاوية في تطبيق العميل الخاص بك الذي ينشئ مجموعاتك ووظائفك ومهامك. على سبيل المثال:

CloudJob job = batchClient.JobOperations.CreateJob(
    "myJob",
    new PoolInformation { PoolId = "myPool" });

// Create reference to the linked Azure Storage account
CloudStorageAccount linkedStorageAccount =
    new CloudStorageAccount(myCredentials, true);

// Create the blob storage container for the outputs
await job.PrepareOutputStorageAsync(linkedStorageAccount);

تخزين مخرجات المهام

بعد إنشاء حاوية التخزين الخاصة بك، يمكن للمهام حفظ الإخراج إلى الحاوية باستخدام TaskOutputStorage. تتوفر هذه الفئة في مكتبة اصطلاحات الملفات.

في التعليمات البرمجية للمهمة، قم بإنشاء كائن TaskOutputStorage. عندما تكمل المهمة عملها، استدع طريقة TaskOutputStorage. SaveAsync. تحفظ هذه الخطوة الإخراج إلى تخزين Azure.

CloudStorageAccount linkedStorageAccount = new CloudStorageAccount(myCredentials);
string jobId = Environment.GetEnvironmentVariable("AZ_BATCH_JOB_ID");
string taskId = Environment.GetEnvironmentVariable("AZ_BATCH_TASK_ID");

TaskOutputStorage taskOutputStorage = new TaskOutputStorage(
    linkedStorageAccount, jobId, taskId);

/* Code to process data and produce output file(s) */

await taskOutputStorage.SaveAsync(TaskOutputKind.TaskOutput, "frame_full_res.jpg");
await taskOutputStorage.SaveAsync(TaskOutputKind.TaskPreview, "frame_low_res.jpg");

تصنف المعلمة kind للأسلوب TaskOutputStorage.SaveAsync الملفات الدائمة. هناك أربعة أنواع محددة مسبقاً من TaskOutputKind : TaskOutputو TaskPreviewو TaskLogو TaskIntermediate. يمكنك أيضاً تحديد فئات مخصصة للمخرجات.

حدد نوع المخرجات المراد سردها عند الاستعلام عن Batch لاحقاً. بعدها، عندما تقوم بإدراج مخرجات مهمة ما، يمكنك تصفية القائمة على أحد أنواع المخرجات. على سبيل المثال، قم بالتصفية إلى "أعطني إخراج إصدار أولي للمهمة 109." لمزيد من المعلومات، راجع استرداد بيانات الإخراج.

يحدد نوع الإخراج أيضا مكان ظهور ملف إخراج في مدخل Microsoft Azure. الملفات في الفئة TaskOutput ضمن ملفات إخراج المهمة. توجد الملفات الموجودة في الفئة TaskLog ضمن سجلات المهام.

تخزين مخرجات العمل

يمكنك أيضا تخزين المخرجات المقترنة بمهمة بأكملها. على سبيل المثال، في مهمة دمج وظيفة عرض فيلم، يمكنك الاستمرار في عرض الفيلم بالكامل كإخراج وظيفة. عند اكتمال مهمتك، يستطيع تطبيق العميل الخاص بك سرد مخرجات المهمة واستردادها. لا يتعين على تطبيق العميل الاستعلام عن المهام الفردية.

قم بتخزين مخرجات المهمة عن طريق استدعاء JobOutputStorage. أسلوبSaveAsync. حدد JobOutputKind واسم الملف. على سبيل المثال:

CloudJob job = new JobOutputStorage(acct, jobId);
JobOutputStorage jobOutputStorage = job.OutputStorage(linkedStorageAccount);

await jobOutputStorage.SaveAsync(JobOutputKind.JobOutput, "mymovie.mp4");
await jobOutputStorage.SaveAsync(JobOutputKind.JobPreview, "mymovie_preview.mp4");

كما هو الحال مع النوع TaskOutputKind لمخرجات المهمة، يمكنك استخدام النوع JobOutputKind لتصنيف الملفات المستمرة للمهمة. في وقت لاحق، يمكنك سرد نوع معين من الإخراج. يشتمل النوع JobOutputKind على فئتي الإخراج والمعاينة. ويدعم النوع أيضا إنشاء فئات مخصصة.

تخزين سجلات المهام

قد تحتاج أيضا إلى الاحتفاظ بالملفات التي تم تحديثها أثناء تنفيذ مهمة. على سبيل المثال، قد تحتاج إلى الاحتفاظ بملفات السجل، أو stdout.txt و stderr.txt. توفر مكتبة اصطلاحات الملفات TaskOutputStorage. طريقة SaveTrackedAsync لاستمرار هذه الأنواع من الملفات. تعقب التحديثات لملف على العقدة في فاصل زمني محدد باستخدام SaveTrackedAsync. بعد ذلك، استمر في هذه التحديثات إلى تخزين Azure.

يستخدم المثال التالي SaveTrackedAsync للتحديث stdout.txt في تخزين Azure كل 15 ثانية أثناء تنفيذ المهمة:

TimeSpan stdoutFlushDelay = TimeSpan.FromSeconds(3);
string logFilePath = Path.Combine(
    Environment.GetEnvironmentVariable("AZ_BATCH_TASK_DIR"), "stdout.txt");

// The primary task logic is wrapped in a using statement that sends updates to
// the stdout.txt blob in Storage every 15 seconds while the task code runs.
using (ITrackedSaveOperation stdout =
        await taskStorage.SaveTrackedAsync(
        TaskOutputKind.TaskLog,
        logFilePath,
        "stdout.txt",
        TimeSpan.FromSeconds(15)))
{
    /* Code to process data and produce output file(s) */

    // We are tracking the disk file to save our standard output, but the
    // node agent may take up to 3 seconds to flush the stdout stream to
    // disk. So give the file a moment to catch up.
     await Task.Delay(stdoutFlushDelay);
}

استبدل المقطع Code to process data and produce output file(s) الذي تم التعليق عليه بأي تعليمة برمجية تقوم بها مهمتك عادة. على سبيل المثال، قد يكون لديك رمز يقوم بتنزيل البيانات من مساحة تخزين Azure ويقوم بإجراء التحويل أو الحساب عليها. يمكنك تضمين هذه التعليمة البرمجية في كتلة using لتحديث الملف بشكل دوري باستخدام SaveTrackedAsync.

عامل العقدة هو برنامج يُشغّل على كل عقدة موجودة في التجمع. يوفر هذا البرنامج واجهة الأوامر والتحكم بين العقدة وخدمة دُفعة. الاستدعاء Task.Delay مطلوب في نهاية هذه الكتلة using. يتأكد الاستدعاء أن عامل العقدة لدية الوقت الكافي لدفق محتويات القواعد إلى ملف stdout.txt الموجود على العقدة. دون هذا التأخير، من الممكن فوات الثواني القليلة الأخيرة من الإخراج. قد لا تحتاج إلى هذا التأخير لجميع الملفات.

عند تمكين تتبع الملف باستخدام SaveTrackedAsync، يتم الاحتفاظ فقط بإلحاق بالملف المتتبع في Azure Storage. استخدم هذه الطريقة فقط لتعقب ملفات السجل غير الدورية أو الملفات الأخرى التي تمت كتابتها مع عمليات الإلحاق بنهاية الملف.

استرجع بيانات الإخراج

لاسترداد ملفات الإخراج لمهمة أو وظيفة معينة، لا تحتاج إلى معرفة المسار في تخزين Azure أو أسماء الملفات. بدلاً من ذلك، يمكنك طلب ملفات الإخراج حسب معرف المهمة أو الوظيفة.

يكرر المثال التالي التعليمات البرمجية من خلال مهام الوظيفة. بعد ذلك، تطبع التعليمات البرمجية بعض المعلومات حول ملفات الإخراج للمهمة. ثم تقوم التعليمات البرمجية بتنزيل الملفات من AzureStorage.

foreach (CloudTask task in myJob.ListTasks())
{
    foreach (OutputFileReference output in
        task.OutputStorage(storageAccount).ListOutputs(
            TaskOutputKind.TaskOutput))
    {
        Console.WriteLine($"output file: {output.FilePath}");

        output.DownloadToFileAsync(
            $"{jobId}-{output.FilePath}",
            System.IO.FileMode.Create).Wait();
    }
}

اعرض ملفات الإخراج في مدخل Microsoft Azure

إذا كانت ملفات إخراج المهمة تستخدم معيار اصطلاحات ملفات الدفعات، يمكنك عرض الملفات في مدخل Microsoft Azure.

لتمكين عرض ملفات الإخراج الخاصة بك في البوابة الإلكترونية، يجب أن تفي بالمتطلبات التالية:

لعرض ملفات الإخراج تلقائيا في مدخل Microsoft Azure، يجب عليك:

  1. ربط حساب تخزين Azure بحساب دُفعة الخاص بك.
  2. التزم بقواعد التسمية المحددة مسبقاً لحاويات وملفات التخزين عند استمرار المخرجات. راجع الملف التمهيدي لجميع التعريفات. إذا كنت تستخدم مكتبة اصطلاحات الملفات لاستمرار إخراجك، فستستمر ملفاتك وفقاً لمعيار اصطلاحات الملف.

لعرض ملفات إخراج المهام والسجلات في مدخل Microsoft Azure:

  1. تسجيل الدخول إلى ⁧⁩مدخل Microsoft Azure⁧⁩.
  2. انتقل إلى المهمة التي تريد عرض الإخراج لها.
  3. حدد إما ملفات الإخراج المحفوظة أو السجلات المحفوظة.

نموذج التعليمة البرمجية

يعد مشروع نموذج PersistOutputs أحد نماذج رموز Azure Batch على GitHub. يوضح حل Visual Studio كيفية استخدام مكتبة اصطلاحات الملفات الدفعية Azure لاستمرار إخراج المهام إلى التخزين الدائم. لتشغيل النموذج، اتبع الخطوات التالية:

  1. افتح المشروع في Visual Studio 2019.
  2. أضف بيانات اعتماد حساب تخزين Azure والدفعة إلىAccountSettings.settings في مشروع Microsoft.Azure.Batch.Samples.Common.
  3. قم بإنشاء الحل. لا تقم بتشغيل الملف الآن.
  4. قم باستعادة أي حزم NuGet إذا طُلب منك ذلك.
  5. قم بتحميل حزمة تطبيق لـ PersistOutputsTask من مدخل Microsoft Azure.
    1. قم بتضمين PersistOutputsTask.exe القابل للتنفيذ والتجميعات التابعة له في حزمة .zip.
    2. تعيين معرف التطبيق إلى PersistOutputsTask.
    3. قم بتعيين إصدار حزمة التطبيق إلى 1.0.
  6. حدد بدء لتشغيل المشروع.
  7. عند مطالبتك بتحديد تقنية الثبات لاستخدامها، أدخل 1. يقوم هذا الخيار بتشغيل النموذج باستخدام مكتبة اصطلاحات الملفات لاستمرار إخراج المهمة.

احصل على مكتبة اصطلاحات الملفات الدفعية لبرنامج .NET

مكتبة اصطلاحات الملفات الدفعية لـ .NET متاحة على NuGet. توسع المكتبة فئتي CloudJob وCloudTask بأساليب جديدة. لمزيد من المعلومات، راجع الوثائق المرجعية لمكتبة اصطلاحات الملفات.

تتوفر التعليمات البرمجية المصدر لمكتبة اصطلاحات الملفات على GitHub.

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