Aracılığıyla paylaş


.NET için Batch Dosya Kuralları kitaplığıyla işi ve görev verilerini Azure Depolama'da kalıcı hale getirmek

Azure Batch'de çalışan bir görev çalıştırıldığında çıkış verileri üretebilir. Görev çıktı verilerinin genellikle işteki diğer görevler, işi yürüten istemci uygulaması veya her ikisi tarafından alınması için depolanması gerekir. Görevler çıktı verilerini batch işlem düğümünün dosya sistemine yazar, ancak düğüm yeniden oluşturulduğunda veya düğüm havuzdan ayrıldığında düğümdeki tüm veriler kaybolur. Görevlerin dosya saklama süresi de olabilir ve bundan sonra görev tarafından oluşturulan dosyalar silinir. Bu nedenlerden dolayı, daha sonra ihtiyacınız olacak görev çıktısını Azure Depolama gibi bir veri deposunda kalıcı hale getirmek önemlidir.

Batch'teki depolama hesabı seçenekleri için bkz. Batch hesapları ve Azure Depolama hesapları.

.NET için Dosya Kuralları kitaplığını kullanarak görev verilerini Azure Batch kalıcı hale gelebilirsiniz. Dosya Kuralları kitaplığı, görev çıktı verilerini Azure Depolama'da depolama ve alma işlemini basitleştirir. Dosya Kuralları kitaplığını hem görev hem de istemci kodunda kullanabilirsiniz. Görev modunda, dosyaları kalıcı hale getirmek için kitaplığını kullanın. İstemci modunda, dosyaları listelemek ve almak için kitaplığını kullanın. Görev kodunuz, görev bağımlılıkları senaryosunda olduğu gibi kitaplığını kullanarak yukarı akış görevlerinin çıkışını da alabilir.

Dosya Kuralları kitaplığıyla çıkış dosyalarını almak için bir iş veya görevin dosyalarını bulun. Dosyaların adlarını veya konumlarını bilmeniz gerekmez. Bunun yerine, dosyaları kimliğe ve amaca göre listeleyebilirsiniz. Örneğin, belirli bir görevin tüm ara dosyalarını listeleyin. Veya belirli bir iş için bir önizleme dosyası alın.

2017-05-01 sürümünden itibaren Batch hizmeti API'si, sanal makine (VM) yapılandırmasıyla oluşturulan havuzlarda çalıştırılan görevler ve iş yöneticisi görevleri için çıktı verilerinin Azure Depolama'da kalıcı olmasını destekler. Çıktıyı, görev oluşturan kodun içinden kalıcı hale gelebilirsiniz. Bu yöntem, Dosya Kuralları kitaplığına bir alternatiftir. Batch istemci uygulamalarınızı, görevinizin çalıştığı uygulamayı güncelleştirmeye gerek kalmadan çıktıyı kalıcı hale getirmek için değiştirebilirsiniz. Daha fazla bilgi için bkz . Batch hizmeti API'siyle görev verilerini Azure Depolama'da kalıcı hale getirmek.

Kitaplık kullanım örnekleri

Azure Batch, görev çıktısını kalıcı hale getirmek için birden çok yol sağlar. Aşağıdakileri yapmak istediğinizde Dosya Kuralları kitaplığını kullanın:

  • Dosyaları kalıcı hale getirmek için, göreviniz tarafından çalıştırılan uygulamanın kodunu değiştirin.
  • Görev çalışmaya devam ederken verileri Azure Depolama'ya akışla aktarın.
  • Havuzlardan gelen verileri kalıcı hale taşıma.
  • İstemci uygulamanızda veya diğer görevlerde görev çıktı dosyalarını kimliğe veya amaca göre bulun ve indirin.
  • görev çıktısını Azure portal görüntüleyin.

Diğer senaryolar için farklı bir yaklaşımı göz önünde bulundurmak isteyebilirsiniz. Diğer seçenekler hakkında daha fazla bilgi için bkz . İş ve görev çıktısını Azure Depolama'da kalıcı hale getirmek.

Batch Dosya Kuralları standardı nedir?

Batch Dosya Kuralları standardı, çıkış dosyalarınızın yazıldığı hedef kapsayıcılar ve blob yolları için bir adlandırma düzeni sağlar. Azure depolamada standart olan dosyalar Azure portal otomatik olarak görüntülenebilir.

.NET için Dosya Kuralları kitaplığı, depolama kapsayıcılarınızı ve görev çıktı dosyalarınızı otomatik olarak standarda göre adlandırır. Kitaplık ayrıca Azure Depolama'daki çıkış dosyalarını sorgulamaya yönelik yöntemler de sağlar. İş kimliğine, görev kimliğine veya amaca göre sorgulayabilirsiniz.

.NET dışında bir dille geliştiriyorsanız, uygulamanızda Dosya Kuralları standardını kendiniz uygulayabilirsiniz. Daha fazla bilgi için bkz . Batch Dosya Kuralları standardını uygulama.

Dosya Kuralları kitaplığını kullanarak çıktı verilerini Azure Depolama'da kalıcı hale getirmek için önce Bir Azure Depolama hesabını Batch hesabınıza bağlayın.

  1. Azure Portal’ında oturum açın.
  2. Arama çubuğunda Batch'i arayın ve seçin.
  3. Azure Depolama'ya bağlamak için Batch hesabını seçin.
  4. Batch hesabı sayfasındaki Ayarlar'ın altında Depolama Hesabı'nı seçin.
  5. Batch hesabınızla ilişkilendirilmiş bir Azure Depolama hesabınız yoksa Depolama Hesabı (Yok) seçeneğini belirleyin.
  6. Kullanılacak Azure Depolama hesabını seçin. En iyi performans için Batch hesabıyla aynı bölgedeki bir hesabı kullanın.

Çıktı verilerini kalıcı hale

Dosya Kuralları kitaplığıyla iş ve görev çıktı verilerini kalıcı hale gelebilirsiniz. İlk olarak Azure Depolama'da bir kapsayıcı oluşturun. Ardından, çıkışı kapsayıcıya kaydedin. Görev çıktısını kapsayıcıya yüklemek için görev kodunuzda .NET için Azure Depolama istemci kitaplığını kullanın.

Azure Depolama'da kapsayıcılar ve bloblarla çalışma hakkında daha fazla bilgi için bkz. .NET kullanarak Azure Blob depolamayı kullanmaya başlama.

Dosya Kuralları kitaplığında kalıcı olan tüm iş ve görev çıkışları aynı kapsayıcıda depolanır. Çok sayıda görev dosyaları aynı anda kalıcı hale getirmeye çalışırsa, Azure Depolama azaltma sınırları zorunlu kılınabilir. Daha fazla bilgi için bkz. Blob depolama için performans ve ölçeklenebilirlik denetim listesi.

Depolama kapsayıcısı oluşturma

Görev çıktısını Azure Depolama'da kalıcı hale getirmek için önce CloudJob'u çağırarak bir kapsayıcı oluşturun. PrepareOutputStorageAsync. Bu uzantı yöntemi bir CloudStorageAccount nesnesini parametre olarak alır. yöntemi, Dosya Kuralları standardına göre adlı bir kapsayıcı oluşturur. Kapsayıcının içeriği, bu makalede açıklanan Azure portal ve alma yöntemleri tarafından bulunabilir.

Genellikle, istemci uygulamanızda havuzlarınızı, işlerinizi ve görevlerinizi oluşturan bir kapsayıcı oluşturun. Örnek:

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

Görev çıkışlarını depolama

Depolama kapsayıcınızı oluşturduktan sonra görevler TaskOutputStorage kullanarak çıkışı kapsayıcıya kaydedebilir. Bu sınıf Dosya Kuralları kitaplığında kullanılabilir.

Görev kodunuzda bir TaskOutputStorage nesnesi oluşturun. Görev çalışmasını tamamladığında TaskOutputStorage'ı çağırın. SaveAsync yöntemi. Bu adım, çıkışı Azure Depolama'ya kaydeder.

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 parametresi. SaveAsync yöntemi kalıcı dosyaları kategorilere ayırır. Önceden tanımlanmış dört TaskOutputKind türü vardır: TaskOutput, TaskPreview, TaskLogve TaskIntermediate. Çıktının özel kategorilerini de tanımlayabilirsiniz.

Batch'i daha sonra sorgularken ne tür çıkışların listeleneceğini belirtin. Ardından, bir görevin çıkışlarını listelediğinizde, çıkış türlerinden birine göre filtreleyebilirsiniz. Örneğin, "109. görevin önizleme çıkışını ver" olarak filtreleyin. Daha fazla bilgi için bkz. Çıkış verilerini alma.

Çıkış türü, çıkış dosyasının Azure portal nerede görüneceğini de belirler. TaskOutput kategorisindeki dosyalar Görev çıktı dosyaları altındadır. TaskLog kategorisindeki dosyalar Görev günlükleri altındadır.

İş çıkışlarını depolama

Ayrıca işin tamamıyla ilişkili çıkışları da depolayabilirsiniz. Örneğin, bir film işleme işinin birleştirme görevinde, tam olarak işlenmiş filmi iş çıktısı olarak kalıcı hale getirebilirsiniz. İşiniz tamamlandığında, istemci uygulamanız işin çıkışlarını listeleyebilir ve alabilir. İstemci uygulamanızın tek tek görevleri sorgulaması gerekmez.

JobOutputStorage çağrısı yaparak iş çıktısını depolayın. SaveAsync yöntemi. JobOutputKind ve dosya adını belirtin. Örnek:

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

Görev çıktıları için TaskOutputKind türünde olduğu gibi, işin kalıcı dosyalarını kategorilere ayırmak için JobOutputKind türünü kullanın. Daha sonra belirli bir çıkış türünü listeleyebilirsiniz. JobOutputKind türü hem çıkış hem de önizleme kategorilerini içerir. Türü ayrıca özel kategoriler oluşturmayı da destekler.

Görev günlüklerini depolama

Bir görevin yürütülmesi sırasında güncelleştirilen dosyaları kalıcı hale getirmek de gerekebilir. Örneğin, günlük dosyalarını veya stdout.txt ve stderr.txtkalıcı hale getirmek gerekebilir. Dosya Kuralları kitaplığı TaskOutputStorage'i sağlar. Bu tür dosyaları kalıcı hale getirmek için SaveTrackedAsync yöntemi. SaveTrackedAsync ile düğümdeki bir dosyaya yönelik güncelleştirmeleri belirli bir aralıkta izleyin. Ardından bu güncelleştirmeleri Azure Depolama'da kalıcı hale getirmek.

Aşağıdaki örnekte, görevin yürütülmesi sırasında Azure Depolama'da her 15 saniyede bir güncelleştirmek stdout.txt için SaveTrackedAsync kullanılır:

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

Açıklama satırı yapılan bölümü Code to process data and produce output file(s) , görevinizin normalde yaptığı kodla değiştirin. Örneğin, Azure Depolama'dan veri indiren ve ardından dönüştürmeler veya hesaplamalar gerçekleştiren bir kodunuz olabilir. SaveTrackedAsync ile bir dosyayı düzenli aralıklarla güncelleştirmek için bu kodu bir using bloğun içinde sarmalayabilirsiniz.

Düğüm aracısı, havuzdaki her düğümde çalışan bir programdır. Bu program düğüm ile Batch hizmeti arasında komut ve denetim arabirimi sağlar. Çağrı Task.Delay bu using bloğun sonunda gereklidir. Çağrısı, düğüm aracısının standart içeriğini düğümdeki dosyaya boşaltmak için stdout.txt zamanı olduğundan emin olur. Bu gecikme olmadan, çıkışın son birkaç saniyesini kaçırmak mümkündür. Tüm dosyalar için bu gecikmeye ihtiyacınız olmayabilir.

SaveTrackedAsync ile dosya izlemeyi etkinleştirdiğinizde, Azure Depolama'da yalnızca izlenen dosyaya eklemeler kalıcı olur. Bu yöntemi yalnızca döndürülmeyen günlük dosyalarını veya dosyanın sonuna ekleme işlemleriyle yazılan diğer dosyaları izlemek için kullanın.

Çıkış verilerini alma

Belirli bir görev veya işin çıkış dosyalarını almak için Azure Depolama'daki yolu veya dosya adlarını bilmeniz gerekmez. Bunun yerine, görev veya iş kimliğine göre çıkış dosyaları isteyebilirsiniz.

Aşağıdaki örnek kod, bir işin görevleri aracılığıyla yinelenir. Ardından kod, görevin çıktı dosyaları hakkında bazı bilgileri yazdırır. Ardından kod, dosyaları AzureStorage'dan indirir.

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

Azure portal çıkış dosyalarını görüntüleme

Görev çıktı dosyalarınız Batch Dosya Kuralları standardını kullanıyorsa, dosyaları Azure portal görüntüleyebilirsiniz.

Çıkış dosyalarınızın portalda görüntülenmesini etkinleştirmek için aşağıdaki gereksinimleri karşılamanız gerekir:

Çıktı dosyalarının Azure portal otomatik olarak görüntülenmesi için şunları kullanmanız gerekir:

  1. Bir Azure Depolama hesabını Batch hesabınıza bağlayın.
  2. Azure Depolama kapsayıcıları ve dosyaları için önceden tanımlanmış adlandırma kurallarını izleyin. Tüm tanımlar için BENİOKU bölümünü gözden geçirin. Çıktınızı kalıcı hale getirmek için Dosya Kuralları kitaplığını kullanırsanız, dosyalarınız Dosya Kuralları standardına göre kalıcı olur.

görev çıktı dosyalarını ve günlüklerini Azure portal görüntülemek için:

  1. Azure Portal’ında oturum açın.
  2. Çıktısını görüntülemek istediğiniz göreve gidin.
  3. Kaydedilmiş çıkış dosyaları veya Kayıtlı günlükler'i seçin.

Kod örneği

PersistOutputs örnek projesi, GitHub'da Azure Batch kod örneklerinden biridir. Bu Visual Studio çözümü, görev çıktısını dayanıklı depolamada kalıcı hale getirmek için Azure Batch Dosya Kuralları kitaplığının nasıl kullanılacağını gösterir. Örneği çalıştırmak için şu adımları izleyin:

  1. Visual Studio 2019'da projeyi açın.
  2. Batch ve Azure Depolama hesabı kimlik bilgilerinizi Microsoft.Azure.Batch.Samples.Common projesindeki AccountSettings.settings'e ekleyin.
  3. Çözümü derleyin. Çözümü henüz çalıştırmayın.
  4. İstenirse, tüm NuGet paketlerini geri yükleyin.
  5. Azure portal aracılığıyla PersistOutputsTask için bir uygulama paketi yükleyin.
    1. Yürütülebilir dosyayı PersistOutputsTask.exe ve bağımlı derlemelerini .zip paketine ekleyin.
    2. Uygulama kimliğini olarak PersistOutputsTaskayarlayın.
    3. Uygulama paketi sürümünü olarak 1.0ayarlayın.
  6. Projeyi çalıştırmak için Başlat'ı seçin.
  7. Kullanılacak kalıcılık teknolojisini seçmeniz istendiğinde 1 girin. Bu seçenek, görev çıkışını kalıcı hale getirmek için Dosya Kuralları kitaplığını kullanarak örneği çalıştırır.

.NET için Batch Dosya Kuralları kitaplığını alma

.NET için Batch Dosya Kuralları kitaplığı NuGet'te kullanılabilir. Kitaplık, CloudJob ve CloudTask sınıflarını yeni yöntemlerle genişletir. Daha fazla bilgi için Dosya Kuralları kitaplığı başvuru belgelerine bakın.

Dosya Kuralları kitaplığı kaynak kodu GitHub'da kullanılabilir.

Sonraki adımlar