Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az Azure Batchben futó feladatok kimeneti adatokat hozhatnak létre a futtatáskor. A feladat kimeneti adatait gyakran kell tárolni a feladat más tevékenységei, a feladatot végrehajtó ügyfélalkalmazás vagy mindkettő lekéréséhez. A feladatok kimeneti adatokat írnak egy Batch számítási csomópont fájlrendszerére, de a csomópont összes adata elveszik, amikor újraimageelődik, vagy amikor a csomópont elhagyja a medencét. A tevékenységeknek fájlmegőrzési időszakuk is lehet, amely után a feladat által létrehozott fájlok törlődnek. Ezért fontos, hogy a feladat kimenete megmaradjon, amelyet később egy adattárban, például az Azure Storage-ban kell tárolnia.
A Batch tárfiók-beállításairól a Batch-fiókok és az Azure Storage-fiókok című témakörben olvashat.
A Batch szolgáltatás API támogatja a kimeneti adatok Azure Storage-ba való megőrzését a virtuálisgép-konfigurációval rendelkező készleteken futó feladatokhoz és feladatkezelői feladatokhoz. Feladat hozzáadásakor megadhat egy tárolót az Azure Storage-ban a tevékenység kimenetének célhelyeként. A Batch szolgáltatás ezután a feladat befejezésekor az adott tárolóba írja a kimeneti adatokat.
Ha a Batch szolgáltatás API-ját használja a feladat kimenetének megőrzéséhez, nem kell módosítania azt az alkalmazást, amelyet a feladat futtat. Ehelyett az ügyfélalkalmazás néhány módosításával megőrizheti a tevékenység kimenetét ugyanazon a kódon belül, amely létrehozza a feladatot.
Fontos
A feladatadatok Azure Storage-ba történő megőrzése a Batch szolgáltatás API-val nem működik a 2018. február 1. előtt létrehozott készletekkel.
Mikor használhatom a Batch szolgáltatás API-t a feladat kimenetének megőrzéséhez?
Az Azure Batch több módot is kínál a feladat kimenetének megőrzésére. A Batch szolgáltatás API-jának használata az alábbi helyzetekhez leginkább megfelelő módszer:
- Olyan kódot szeretne írni, amely megőrzi a feladat kimenetét az ügyfélalkalmazásban anélkül, hogy módosítaná a feladat által futtatott alkalmazást.
- Meg szeretné őrizni a Batch-tevékenységek és a feladatkezelői feladatok kimenetét a virtuális gép konfigurációjával létrehozott készletekben.
- A kimenetet tetszőleges nevű Azure Storage-tárolóban szeretné tárolni.
- A kimenetet a Batch-fájlkonvenciók szabványa szerint elnevezett Azure Storage-tárolóban szeretné tárolni.
Ha a forgatókönyv eltér a fent felsoroltaktól, előfordulhat, hogy más megközelítést kell figyelembe vennie. A Batch szolgáltatás API-ja például jelenleg nem támogatja az Azure Storage-ba irányuló streamelési kimenetet, miközben a feladat fut. A kimenet streameléséhez fontolja meg a .NET-hez elérhető Batch File Conventions kódtár használatát. Más nyelvek esetén saját megoldást kell implementálnia. További információ az egyéb lehetőségekről: Feladat- és feladatkimenet megőrzése az Azure Storage-ban.
Tároló létrehozása az Azure Storage-ban
Ahhoz, hogy a feladat kimenete megmaradjon az Azure Storage-ban, létre kell hoznia egy tárolót, amely a kimeneti fájlok célhelyeként szolgál. A feladat futtatása előtt, lehetőleg a feladat elküldése előtt hozza létre a tárolót a megfelelő Azure Storage-ügyfélkódtár vagy SDK használatával. Az Azure Storage API-kkal kapcsolatos további információkért tekintse meg az Azure Storage dokumentációját.
Ha például az alkalmazást C#-ban írja, használja az Azure Storage .NET-hez készült ügyfélkódtárát. Az alábbi példa bemutatja, hogyan hozhat létre tárolót:
BlobContainerClient container = storageAccount.GetBlobContainerClient(containerName);
await container.CreateIfNotExistsAsync();
Kimeneti fájlok megadása a feladat kimenetéhez
Egy tevékenység kimeneti fájljainak megadásához hozzon létre egy OutputFile-objektumgyűjteményt , és rendelje hozzá a BatchTaskCreateOptions.OutputFiles tulajdonsághoz a feladat létrehozásakor. A tárolóhoz való hozzáférés hitelesítéséhez használhat közös hozzáférésű jogosultságkódot (SAS) vagy felügyelt identitást.
Közös hozzáférésű jogosultságkód használata
A tároló létrehozása után szerezze be a tárolóhoz írási hozzáféréssel rendelkező közös hozzáférési aláírást (SAS). Az SAS delegált hozzáférést biztosít a tárolóhoz. Az SAS megadott engedélykészlettel és meghatározott időintervallumon keresztül biztosít hozzáférést. A Batch szolgáltatásnak írási engedélyekkel rendelkező SAS-ra van szüksége a feladat kimenetének a tárolóba való írásához. További információ az SAS-ről: Közös hozzáférésű jogosultságkódok (SAS) használata az Azure Storage-ban.
Amikor az Azure Storage API-k használatával kap SAS-t, az API egy SAS-jogkivonat-sztringet ad vissza. Ez a jogkivonat-sztring az SAS összes paraméterét tartalmazza, beleértve az engedélyeket és az SAS érvényességi időtartamát. Ha az SAS használatával szeretne hozzáférni egy tárolóhoz az Azure Storage-ban, hozzá kell fűznie az SAS-jogkivonat sztringet az erőforrás URI-jához. Az erőforrás URI-ja és a hozzáfűzött SAS-jogkivonat hitelesített hozzáférést biztosít az Azure Storage-hoz.
Az alábbi példa bemutatja, hogyan kérhet le írásvédett SAS-jogkivonat-sztringet a tárolóhoz, majd fűzi hozzá az SAS-t a tároló URI-hoz:
BlobSasBuilder sasBuilder = new BlobSasBuilder(BlobContainerSasPermissions.Write, DateTimeOffset.UtcNow.AddDays(1))
{
BlobContainerName = container.Name,
Resource = "c"
};
Uri containerSasUrl = container.GenerateSasUri(sasBuilder);
A következő C#-kód példa egy olyan feladatot hoz létre, amely véletlenszerű számokat ír egy nevű output.txtfájlba. A példa létrehoz egy kimeneti fájlt, amelyet output.txt a tárolóba kell írni. A példa kimeneti fájlokat is létrehoz minden olyan naplófájlhoz, std*.txt amely megfelel a fájlmintának (stdout.txt ésstderr.txt). A tároló URL-címéhez a tárolóhoz korábban létrehozott SAS szükséges. A Batch szolgáltatás az SAS használatával hitelesíti a tárolóhoz való hozzáférést.
BatchTaskCreateOptions task = new BatchTaskCreateOptions(taskId,
"cmd /v:ON /c \"echo off && set && (FOR /L %i IN (1,1,100000) DO (ECHO !RANDOM!)) > output.txt\"")
{
OutputFiles =
{
new OutputFile(
filePattern: @"..\std*.txt",
destination: new OutputFileDestination()
{
Container = new OutputFileBlobContainerDestination(containerSasUri) { Path = taskId }
},
uploadOptions: new OutputFileUploadConfig(OutputFileUploadCondition.TaskCompletion)),
new OutputFile(
filePattern: @"output.txt",
destination: new OutputFileDestination()
{
Container = new OutputFileBlobContainerDestination(containerSasUri) { Path = taskId + @"\output.txt" }
},
uploadOptions: new OutputFileUploadConfig(OutputFileUploadCondition.TaskCompletion)),
}
};
Megjegyzés
Ha ezt a példát Linuxon használja, mindenképpen cserélje le a fordított perjeleket előre perjelekre.
Felügyelt identitás használata
A tárolóhoz írási hozzáféréssel rendelkező SAS létrehozása és átadása a Batch számára helyett egy felügyelt identitással hitelesíthető az Azure Storage-ral. Az identitást hozzá kell rendelni a Batch Poolhoz, és a Storage Blob Data Contributor tárolóhoz való írási jog szerepkör-hozzárendelésével is rendelkeznie kell. A Batch szolgáltatás ezután utasítható arra, hogy sas helyett használja a felügyelt identitást a tárolóhoz való hozzáférés hitelesítéséhez.
BatchTaskCreateOptions task = new BatchTaskCreateOptions(taskId,
"cmd /v:ON /c \"echo off && set && (FOR /L %i IN (1,1,100000) DO (ECHO !RANDOM!)) > output.txt\"")
{
OutputFiles =
{
new OutputFile(
filePattern: @"..\std*.txt",
destination: new OutputFileDestination()
{
Container = new OutputFileBlobContainerDestination(containerUri)
{
Path = taskId,
IdentityReference = new BatchNodeIdentityReference()
{
ResourceId = new ResourceIdentifier(identityResourceId)
}
}
},
uploadOptions: new OutputFileUploadConfig(OutputFileUploadCondition.TaskCompletion)),
}
};
Fájlminta megadása az egyeztetéshez
Kimeneti fájl megadásakor a OutputFile.FilePattern tulajdonság használatával megadhatja a fájlmintát az egyeztetéshez. A fájlminta megegyezhet nulla fájllal, egyetlen fájllal vagy a feladat által létrehozott fájlkészlettel.
A FilePattern tulajdonság támogatja a standard fájlrendszerbeli helyettesítő karaktereket, például * (nem rekurzív egyezések esetén) és ** (rekurzív egyezések esetén). A fenti kódminta például a nem rekurzívnak megfelelő std*.txt fájlmintát adja meg:
filePattern: @"..\std*.txt"
Egyetlen fájl feltöltéséhez adjon meg egy helyettesítő karakterek nélküli fájlmintát. A fenti kódminta például megadja az egyező output.txtfájlmintát:
filePattern: @"output.txt"
Feltöltési feltétel megadása
A OutputFileUploadConfig.UploadCondition tulajdonság lehetővé teszi a kimeneti fájlok feltételes feltöltését. Gyakori forgatókönyv egy fájlkészlet feltöltése, ha a feladat sikeres, és ha nem sikerül, másik fájlkészletet kell feltölteni. Előfordulhat például, hogy csak akkor szeretne részletes naplófájlokat feltölteni, ha a feladat meghiúsul, és egy nem nulla kilépési kóddal zárul. Hasonlóképpen, előfordulhat, hogy csak akkor szeretne eredményfájlokat feltölteni, ha a feladat sikeres, mivel előfordulhat, hogy ezek a fájlok hiányoznak vagy hiányosak, ha a feladat meghiúsul.
A fenti kódminta az UploadCondition tulajdonságot TaskCompletion értékre állítja. Ez a beállítás azt határozza meg, hogy a fájlt a feladatok befejezése után kell feltölteni, függetlenül a kilépési kód értékétől.
uploadCondition: OutputFileUploadCondition.TaskCompletion
További beállításokért lásd az OutputFileUploadCondition enumerációt.
Azonos nevű fájlok egyértelműsítése
A feladat tevékenységei azonos nevű fájlokat hozhatnak létre. Például minden stdout.txtstderr.txt feladatban futó feladathoz létrejönnek. Mivel minden feladat a saját környezetében fut, ezek a fájlok nem ütköznek a csomópont fájlrendszerében. Ha azonban több feladatból tölt fel fájlokat egy megosztott tárolóba, egyértelműsítenie kell az azonos nevű fájlokat.
Az OutputFileBlobContainerDestination.Path tulajdonság megadja a kimeneti fájlok célblobát vagy virtuális könyvtárát. Az Elérési út tulajdonsággal úgy nevezheti el a blobot vagy a virtuális könyvtárat, hogy az azonos nevű kimeneti fájlok egyedi névvel legyenek elnevezve az Azure Storage-ban. A feladatazonosító az elérési úton való használatával biztosíthatja az egyedi neveket és a fájlok egyszerű azonosítását.
Ha a FilePattern tulajdonság helyettesítő kifejezésre van állítva, akkor a rendszer a mintának megfelelő összes fájlt feltölti az Elérési út tulajdonság által megadott virtuális könyvtárba. Ha például a tároló mycontainer, a feladat azonosítója mytaskés a fájlminta ..\std*.txt, akkor az Azure Storage kimeneti fájljainak abszolút URI-jai a következőhöz hasonlóak lesznek:
https://myaccount.blob.core.windows.net/mycontainer/mytask/stderr.txt
https://myaccount.blob.core.windows.net/mycontainer/mytask/stdout.txt
Ha a FilePattern tulajdonság egyetlen fájlnévnek felel meg, vagyis nem tartalmaz helyettesítő karaktereket, akkor az Elérési út tulajdonság értéke a teljes blobnevet adja meg. Ha előre látja, hogy névütközések merülhetnek fel egyetlen fájllal több feladat során, akkor a fájlnévben szerepeltesse a virtuális könyvtár nevét, hogy egyértelműbbé tegye ezeket a fájlokat. Állítsa be például az Elérési út tulajdonságot úgy, hogy tartalmazza a tevékenységazonosítót, az elválasztó karaktert (általában perjelet) és a fájlnevet:
path: taskId + @"/output.txt"
A feladathalmaz kimeneti fájljainak abszolút URI-jai a következőhöz hasonlóak lesznek:
https://myaccount.blob.core.windows.net/mycontainer/task1/output.txt
https://myaccount.blob.core.windows.net/mycontainer/task2/output.txt
Az Azure Storage-beli virtuális könyvtárakról további információt a tárolóban lévő blobok listázása című témakörben talál.
Számos kimeneti fájl
Ha egy feladat számos kimeneti fájlt határoz meg, előfordulhat, hogy az Azure Batch API által előírt korlátokba ütközik. Célszerű a feladatokat kicsiben tartani, és a kimeneti fájlok számát alacsonyan tartani.
Ha korlátokba ütközik, fontolja meg a kimeneti fájlok számának csökkentését fájlminták alkalmazásával, vagy a kimeneti fájlok összevonásához használjon fájltárolókat, például a tar vagy zip formátumot. Másik lehetőségként csatlakoztatási vagy egyéb módszereket is használhat a kimeneti adatok megőrzéséhez (lásd : Feladat- és tevékenységkimenet megőrzése).
Fájlfeltöltési hibák diagnosztizálása
Ha a kimeneti fájlok Azure Storage való feltöltése sikertelen, akkor a feladat a Completed állapotba kerül, és be van állítva a BatchTaskExecutionInfo.FailureInfo tulajdonság. Vizsgálja meg a FailureInformation tulajdonságot, és állapítsa meg, hogy mi történt. Itt látható például egy hiba a fájlfeltöltéskor, ha a tároló nem található:
Category: UserError
Code: FileUploadContainerNotFound
Message: One of the specified Azure container(s) was not found while attempting to upload an output file
Minden fájlfeltöltéskor a Batch két naplófájlt ír a számítási csomópontra: fileuploadout.txt és fileuploaderr.txt. Ezeket a naplófájlokat megvizsgálva többet is megtudhat egy adott hibáról. Azokban az esetekben, amikor a fájlfeltöltést soha nem kísérelték meg, például mert maga a feladat nem futtatható, ezek a naplófájlok nem fognak létezni.
A fájlfeltöltés teljesítményének diagnosztizálása
A fileuploadout.txt fájl a feltöltési állapotot naplózza. Ezt a fájlt megvizsgálva megtudhatja, hogy mennyi ideig tart a fájlfeltöltés. Ne feledje, hogy a feltöltési teljesítményhez számos tényező járul hozzá, például a csomópont mérete, a csomóponton a feltöltéskor végzett egyéb tevékenység, a céltároló ugyanabban a régióban található-e, mint a Batch-készlet, hány csomópont tölt fel egyszerre a tárfiókba, és így tovább.
A Batch szolgáltatás API használata a Batch-fájlkonvenciók szabványával
Ha a Batch szolgáltatás API-val megőrzi a feladat kimenetét, tetszés szerint nevezheti el a céltárolót és a blobokat. A Batch File Conventions szabványnak megfelelően is elnevezheti őket. A Fájlkonvenciók standardja egy adott kimeneti fájl céltárolójának és blobjának nevét határozza meg az Azure Storage-ban a feladat és a feladat neve alapján. Ha a kimeneti fájlok elnevezéséhez a Fájlkonvenciók szabványt használja, akkor a kimeneti fájlok megtekinthetők az Azure Portalon.
Ha C#-ban fejleszt, a .NET-hez készült Batch File Conventions kódtárba beépített metódusokat használhatja. Ez a kódtár létrehozza önnek a megfelelően elnevezett tárolókat és blobútvonalakat. Meghívhatja például az API-t a tároló megfelelő nevének lekéréséhez a feladat neve alapján:
// Convention used by Azure.Batch.Conventions.Files: "job-{jobId}".
string containerName = $"job-{jobId.ToLowerInvariant()}";
A CloudJobExtensions.GetOutputStorageContainerUrl metódussal visszaadhat egy közös hozzáférésű jogosultságkód (SAS) URL-címet, amelyet a tárolóba való íráshoz használnak. Ezt az SAS-t ezután átadhatja az OutputFileBlobContainerDestination konstruktornak.
Ha a C#-tól eltérő nyelven fejleszt, a fájlkonvenciók szabványát saját maga kell implementálnia.
Kódminta
A PersistOutputs mintaprojekt a GitHub egyik Azure Batch-kódmintája . Ez a Visual Studio-megoldás bemutatja, hogyan használható a Batch ügyfélkódtár a .NET-hez a feladat kimenetének tartós tárolóba való megőrzéséhez. A minta futtatásához kövesse az alábbi lépéseket:
- Nyissa meg a projektet a Visual Studio 2019-ben.
- Adja hozzá a Batch- és Storage-fiók hitelesítő adatait az AccountSettings.settingshez a Microsoft.Azure.Batch.Samples.Common projektben.
- Hozza létre (de ne futtassa) a megoldást. Ha a rendszer kéri, állítsa vissza a NuGet-csomagokat.
- Az Azure Portal használatával töltsön fel egy alkalmazáscsomagot a PersistOutputsTaskhoz. Foglalja bele a
PersistOutputsTask.exeés a hozzá tartozó összetevőket a .zip csomagba, állítsa az alkalmazásazonosítót "PersistOutputsTask" értékre, az alkalmazáscsomag verzióján pedig "1.0"-ra. - Indítsa el a PersistOutputs projektet.
- Amikor a rendszer arra kéri, hogy válassza ki a minta futtatásához használandó adatmegőrzési technológiát, a 2 . lépéssel futtassa a mintát a Batch szolgáltatás API-val a feladat kimenetének megőrzéséhez.
- Ha kívánja, futtassa újra a mintát, és adja meg a 3 értéket, hogy a kimenetet megőrizze a Batch szolgáltatás API-jával, valamint nevezze el a céltárolót és a blob elérési útját a Fájlkonvenciók szabványával összhangban.
Következő lépések
- Ha többet szeretne tudni a feladat kimenetének a .NET fájlkonvenciók tárával való megőrzéséről, olvassa el a feladat- és feladatadatok Azure Storage-ba való megőrzését a .NET-hez készült Batch File Conventions könyvtárral.
- A kimeneti adatok Azure Batchben való megőrzésének egyéb megközelítéseiről a feladat- és feladatkimenet megőrzése az Azure Storage-ban című témakörben olvashat.