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'te ç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 havuzdan ayrıldığında, düğümdeki tüm veriler kaybolur. Görevlerin dosya saklama süresi de olabilir ve bu süre sonunda görev tarafından oluşturulan dosyalar silinir. Bu nedenlerden dolayı, daha sonra Azure Depolama gibi bir veri deposunda ihtiyaç duyacağınız görev çıktısını kalıcı hale getirmek önemlidir.
Batch'teki depolama hesabı seçenekleri için bkz. Batch hesapları ve Azure Depolama hesapları.
Azure Batch görev verilerini .NET için Dosya Kuralları kitaplığını kullanarak kalıcı olarak saklayabilirsiniz. Dosya Kuralları kitaplığı, görev çıktı verilerini Azure Depolama 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ığı kullanın. Görev kodunuz, görev bağımlılıkları senaryosunda olduğu gibi kitaplığı kullanarak yukarı akış görevlerinin çıkışını da alabilir.
Dosya Kuralları kitaplığıyla çıktı dosyalarına erişmek 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örev için tüm ara dosyaları 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ışan görevler ve iş yöneticisi görevleri için çıktı verilerinin Azure Depolama kalıcı olmasını destekler. Bir görev oluşturan kodun içinden çıktıyı kalıcı hale ekleyebilirsiniz. Bu yöntem, Dosya Kuralları kitaplığına bir alternatiftir. Batch istemci uygulamalarınızı, görevinizin çalıştırılan uygulamasını güncelleştirmeye gerek kalmadan çıktıyı kalıcı hale getirmek için değiştirebilirsiniz. Daha fazla bilgi için "Batch hizmeti API ile Azure Depolama'a Görev Verilerini Kaydetme" konusuna bakın.
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'a akıtın.
- Havuz verilerini kalıcı olarak saklayın.
- İstemci uygulamanızda veya diğer görevlerde görev çıktı dosyalarını kimliğe veya amaca göre bulun ve indirin.
- Azure portalında görev çıktısını görüntüle.
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. Persist işi ve Azure Depolama görev çıktısı.
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. Standart Azure depolama alanında kalıcı olan dosyalar Azure portalında 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'da çıkış dosyalarını sorgulamak için yöntemler 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.
Azure Depolama hesabı bağlama
Dosya Kuralları kitaplığını kullanarak çıktı verilerini Azure Depolama kalıcı hale getirmek için önce bir Azure Depolama hesabını Batch hesabınıza bağlayın.
- Azure portalında oturum açın.
- Arama çubuğunda Batch'i arayın ve seçin.
- Azure Depolama bağlamak için Batch hesabını seçin.
- Batch hesabı sayfasındaki Ayarlar'ın altında Depolama Hesabı'nı seçin.
- Batch hesabınızla ilişkilendirilmiş bir Azure Depolama hesabınız yoksa Depolama Hesabı (Yok) öğesini seçin.
- Kullanılacak Azure Depolama hesabını seçin. En iyi performans için Batch hesabıyla aynı bölgede bir hesap kullanın.
Çıktı verilerini kalıcı hale getirin
dosya kuralları kitaplığı ile 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'da kapsayıcılar ve bloblarla çalışma hakkında daha fazla bilgi için bkz. .NET kullanarak Azure Blob depolama ile çalışmaya başlama.
Dosya Düzenlemeleri kütüphanesi ile kalıcı hale getirilen tüm iş ve görev çıkışları aynı kapsayıcıda depolanır. Birçok görev aynı anda dosyaları kalıcı olarak depolamaya çalışırsa, Azure Depolama kısıtlama sınırları uygulanabilir. 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 kalıcı hale getirmek için önce CloudJob.PrepareOutputStorageAsync çağrısı yaparak bir kapsayıcı oluşturun. Bu uzantı yöntemi bir CloudStorageAccount nesnesini parametre olarak alır. Metod, Dosya Kuralları anlaşmasına uygun olarak adlandırılan bir kapsayıcı oluşturur. Kapsayıcının içeriği, Azure portalı ve bu makalede açıklanan 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. Örneğin:
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, çıktıyı Azure Depolama'a 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. Ayrıca özel çıkış kategorileri 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, "önizleme çıktısını 109 görevi için ver" şeklinde filtrele. Daha fazla bilgi için bkz. Çıkış verilerini alma.
Çıkış türü, output dosyasının Azure portalında 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.
İş sonuçlarını depolama
Ayrıca işin tamamıyla ilişkili çıktıları da depolayabilirsiniz. Örneğin, bir film işleme işinin birleştirme görevinde, tam olarak işlenen 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ğırarak iş çıktısını depolayın. SaveAsync yöntemi. JobOutputKind ve dosya adını belirtin. Örneğin:
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 çıktı 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.txtdosyalarını kalı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 belirtilen aralıkta düğümdeki bir dosyaya yapılan güncelleştirmeleri izleyin. Ardından bu güncelleştirmeleri Azure Depolama'a kaydedin.
Aşağıdaki örnekte SaveTrackedAsync kullanarak görevin yürütülmesi sırasında her 15 saniyede bir Azure Depolama stdout.txt güncelleştirilmektedir:
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 yapılmış Code to process data and produce output file(s) bölümünü, görevinizin normalde yaptığı kodla değiştirin. Örneğin, Azure Depolama'dan veri indiren ve ardından dönüştürmeleri veya hesaplamaları gerçekleştiren kodunuz olabilir.
using ile bir dosyayı düzenli aralıklarla güncelleştirmek için bu kodu bir 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ındaki komut ve denetim arabirimini sağlar. Bu Task.Delay bloğun sonunda using çağrısı gereklidir. Düğüm aracısının standart çıktının içeriğini düğümdeki stdout.txt dosyasına boşaltmak için zamanının olduğundan emin olmak için çağrı yapılır. 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, izlenen dosyaya yalnızca eklemeler Azure Depolama'da kalıcı hale getirilir. Bu yöntemi yalnızca rotasyona uğramayan (döndürülmeyen) günlük dosyalarını izlemek için veya dosyanın sonuna ekleme işlemleriyle yazılan diğer dosyalar için kullanın.
Çıkış verilerini alma
Belirli bir görev veya işin çıkış dosyalarını almak için, Azure Depolama veya dosya adlarındaki yolu 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 arasında dolaşır. Ardından kod, görevin çıktı dosyalarıyla ilgili bazı bilgileri yazdırır. Ardından kod, AzureStorage'dan dosyaları 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ında çıkış dosyalarını görüntüleme
Görev çıktı dosyalarınız Batch Dosya Kuralları standart kullanıyorsa, dosyaları Azure portalında 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ında otomatik olarak görüntülenmesi için şunları yapın:
- Batch hesabınıza bir Azure Depolama hesabı bağlama.
- Azure Depolama kapsayıcıları ve dosyaları için önceden tanımlanmış adlandırma kurallarını izleyin. Çıktınızı kalıcı hale getirmek için File Conventions kitaplığını kullanırsanız dosyalarınız Dosya Kuralları standardına göre kalıcı olur.
Azure portalında görev çıktı dosyalarını ve günlüklerini görüntülemek için:
- Azure portalında oturum açın.
- Çıktısını görüntülemek istediğiniz göreve gidin.
- Kaydedilen çıkış dosyaları veya Kayıtlı günlükler'i seçin.
Kod örneği
PersistOutputs örnek projesi, GitHub 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:
- Projeyi Visual Studio 2019'da açın.
- Hesabınızın Batch ve Azure Depolama kimlik bilgilerini AccountSettings.settings dosyasına Microsoft.Azure.Batch.Samples.Common projesi içinde ekleyin.
- Çözümü oluşturun. Çözümü henüz çalıştırmayın.
- İstenirse, tüm NuGet paketlerini geri yükleyin.
- Azure portalı aracılığıyla PersistOutputsTask için bir uygulama paketi yükleyin.
- Yürütülebilir
PersistOutputsTask.exedosyasını ve bağımlı derlemelerini .zip paketine ekleyin. - Uygulama kimliğini olarak
PersistOutputsTaskayarlayın. - Uygulama paketi sürümünü olarak
1.0ayarlayın.
- Yürütülebilir
- Projeyi çalıştırmak için Başlat'ı seçin.
- Kullanılacak kalıcılık teknolojisini seçmeniz istendiğinde 1 girin. Bu seçenek, görev çıktısı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 üzerinde 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 bakabilirsiniz.
File Conventions kitaplığı kaynak kodu GitHub üzerinde kullanılabilir.