Distribuera program till beräkningsnoder med Batch-programpaket

Programpaket kan förenkla koden i din Azure Batch lösning och göra det enklare att hantera de program som dina aktiviteter kör. Med programpaket kan du ladda upp och hantera flera versioner av de program som dina aktiviteter kör, inklusive deras stödfiler. Du kan sedan automatiskt distribuera ett eller flera av dessa program till beräkningsnoderna i poolen.

API:erna för att skapa och hantera programpaket är en del av Batch Management .NET-biblioteket . API:erna för att installera programpaket på en beräkningsnod ingår i Batch .NET-biblioteket . Jämförbara funktioner finns i tillgängliga Batch-API:er för andra programmeringsspråk.

Den här artikeln beskriver hur du laddar upp och hanterar programpaket i Azure Portal. Den visar också hur du installerar dem på en pools beräkningsnoder med Batch .NET-biblioteket .

Krav för programpaket

Om du vill använda programpaket måste du länka ett Azure Storage-konto till ditt Batch-konto.

Det finns begränsningar för antalet program och programpaket i ett Batch-konto och på den maximala programpaketstorleken. Mer information finns i Batch-tjänstkvoter och -gränser.

Anteckning

Batch-pooler som skapats före den 5 juli 2017 stöder inte programpaket (såvida de inte har skapats efter den 10 mars 2016 med hjälp av Cloud Services Configuration). Funktionen programpaket som beskrivs här ersätter funktionen Batch-appar som är tillgänglig i tidigare versioner av tjänsten.

Förstå program och programpaket

Inom Azure Batch refererar ett program till en uppsättning versionsbaserade binärfiler som automatiskt kan laddas ned till beräkningsnoderna i poolen. Ett program innehåller ett eller flera programpaket som representerar olika versioner av programmet.

Varje programpaket är en .zip fil som innehåller programmets binärfiler och eventuella stödfiler. Endast formatet .zip stöds.

Diagram som visar en övergripande vy över program och programpaket.

Du kan ange programpaket på pool- eller aktivitetsnivå.

  • Poolprogrampaket distribueras till varje nod i poolen. Program distribueras när en nod ansluter till en pool och när den startas om eller omskapas.

    Poolprogrampaket är lämpliga när alla noder i en pool kör ett jobbs uppgifter. Du kan ange ett eller flera programpaket som ska distribueras när du skapar en pool. Du kan också lägga till eller uppdatera en befintlig pools paket. Om du vill installera ett nytt paket i en befintlig pool måste du starta om dess noder.

  • Programpaket för aktiviteter distribueras endast till en beräkningsnod som är schemalagd att köra en aktivitet, precis innan du kör aktivitetens kommandorad. Om det angivna programpaketet och versionen redan finns på noden distribueras det inte om och det befintliga paketet används.

    Aktivitetsprogrampaket är användbara i miljöer med delad pool, där olika jobb körs på en pool och poolen inte tas bort när ett jobb har slutförts. Om jobbet har färre aktiviteter än noder i poolen kan aktivitetsprogrampaket minimera dataöverföringen, eftersom ditt program endast distribueras till de noder som kör aktiviteter.

    Andra scenarier som kan dra nytta av aktivitetsprogrampaket är jobb som kör ett stort program men bara för några få aktiviteter. Aktivitetsprogram kan till exempel vara användbara för en tung förbearbetningsfas eller en sammanslagningsaktivitet.

Med programpaket behöver inte poolens startaktivitet ange en lång lista över enskilda resursfiler som ska installeras på noderna. Du behöver inte hantera flera versioner av dina programfiler manuellt i Azure Storage eller på noderna. Och du behöver inte bekymra dig om att generera SAS-URL:er för att ge åtkomst till filerna i ditt Azure Storage-konto. Batch fungerar i bakgrunden med Azure Storage för att lagra programpaket och distribuera dem till beräkningsnoder.

Anteckning

Den totala storleken på en startaktivitet måste vara mindre än eller lika med 32 768 tecken, inklusive resursfiler och miljövariabler. Om startaktiviteten överskrider den här gränsen är användning av programpaket ett annat alternativ. Du kan också skapa en .zip fil som innehåller dina resursfiler, ladda upp filen som en blob till Azure Storage och sedan packa upp den från kommandoraden för startaktiviteten.

Ladda upp och hantera program

Du kan använda Azure Portal- eller Batch Management-API:erna för att hantera programpaketen i batchkontot. I följande avsnitt beskrivs hur du länkar ett lagringskonto. Du lär dig hur du lägger till och hanterar program och programpaket i Azure Portal.

Anteckning

Du kan definiera programvärden i resursen Microsoft.Batch/batchAccounts för en ARM-mall, men det går för närvarande inte att använda en ARM-mall för att ladda upp programpaket som ska användas i batchkontot. Du måste ladda upp dem till ditt länkade lagringskonto enligt beskrivningen i Lägg till ett nytt program.

Om du vill använda programpaket måste du länka ett Azure Storage-konto till ditt Batch-konto. Batch-tjänsten använder det associerade lagringskontot för att lagra dina programpaket. Vi rekommenderar att du skapar ett lagringskonto som är specifikt för användning med ditt Batch-konto.

Om du ännu inte har konfigurerat ett lagringskonto visar Azure Portal en varning första gången du väljer Program på den vänstra navigeringsmenyn i Batch-kontot. Så här måste du länka ett lagringskonto till batchkontot:

  1. Välj fönstret Varning där det står "Inget lagringskonto har konfigurerats för det här batchkontot".
  2. Välj sedan Lagringskonto... på nästa sida.
  3. Välj länken Välj ett lagringskonto i avsnittet Lagringskontoinformation .
  4. Välj det lagringskonto som du vill använda med det här batchkontot i listan i fönstret Välj lagringskonto .
  5. Välj sedan Spara i det övre vänstra hörnet på sidan.

När du har länkat de två kontona kan Batch automatiskt distribuera paketen som lagras i det länkade Lagringskontot till dina beräkningsnoder.

Viktigt

Du kan inte använda programpaket med Azure Storage-konton som konfigurerats med brandväggsregler eller med hierarkiskt namnområde inställt på Aktiverad.

Batch-tjänsten använder Azure Storage för att lagra dina programpaket som blockblobar. Du debiteras som vanligt för blockblobdata och storleken på varje paket får inte överskrida den maximala blockblobstorleken. Mer information finns i Skalbarhets- och prestandamål för Blob Storage. För att minimera kostnaderna bör du tänka på storleken och antalet programpaket och regelbundet ta bort inaktuella paket.

Lägga till ett nytt program

Om du vill skapa ett nytt program lägger du till ett programpaket och anger ett unikt program-ID.

I batchkontot väljer du Program på den vänstra navigeringsmenyn och väljer sedan Lägg till.

Skärmbild av processen för att skapa nya program i Azure Portal.

Ange följande information:

  • Program-ID: ID:t för det nya programmet.
  • Version": Versionen för det programpaket som du laddar upp.
  • Programpaket: Den .zip fil som innehåller programmets binärfiler och stödfiler som krävs för att köra programmet.

Det program-ID och den version som du anger måste följa dessa krav:

  • På Windows-noder kan ID:t innehålla valfri kombination av alfanumeriska tecken, bindestreck och understreck. På Linux-noder tillåts endast alfanumeriska tecken och understreck.
  • Får inte innehålla fler än 64 tecken.
  • Måste vara unikt i Batch-kontot.
  • ID:t är skiftlägesbevarande och skiftlägesokänsliga.

När du är klar väljer du Skicka. När .zip filen har laddats upp till ditt Azure Storage-konto visar portalen ett meddelande. Beroende på storleken på filen som du laddar upp och hastigheten på nätverksanslutningen kan den här processen ta lite tid.

Visa aktuella program

Om du vill visa programmen i batchkontot väljer du Program i den vänstra navigeringsmenyn.

Skärmbild av menyalternativet Program i Azure Portal.

Om du väljer det här menyalternativet öppnas fönstret Program . I det här fönstret visas ID:t för varje program i ditt konto och följande egenskaper:

  • Paket: Antalet versioner som är associerade med det här programmet.
  • Standardversion: Om tillämpligt, den programversion som installeras om ingen version anges när programmet distribueras.
  • Tillåt uppdateringar: Anger om paketuppdateringar och borttagningar tillåts.

Om du vill se programpaketets filstruktur på en beräkningsnod går du till batchkontot i Azure Portal. Välj Pooler. Välj sedan den pool som innehåller beräkningsnoden. Välj den beräkningsnod där programpaketet är installerat och öppna programmappen .

Visa programinformation

Om du vill se information om ett program väljer du det i fönstret Program . Du kan konfigurera ditt program genom att välja Inställningar i den vänstra navigeringsmenyn.

  • Tillåt uppdateringar: Anger om programpaket kan uppdateras eller tas bort. Standardvärdet är Ja. Om värdet är Nej kan befintliga programpaket inte uppdateras eller tas bort, men nya programpaketversioner kan fortfarande läggas till.
  • Standardversion: Standardprogrampaketet som ska användas när programmet distribueras om ingen version har angetts.
  • Visningsnamn: Ett eget namn som batchlösningen kan använda när den visar information om programmet. Det här namnet kan till exempel användas i användargränssnittet för en tjänst som du tillhandahåller dina kunder via Batch.

Lägga till ett nytt programpaket

Om du vill lägga till en programpaketversion för ett befintligt program väljer du programmet på sidan Program för batchkontot. Välj Lägg till.

Precis som för det nya programmet anger du Version för det nya paketet, laddar upp .zip filen i fältet Programpaket och väljer sedan Skicka.

Uppdatera eller ta bort ett programpaket

Om du vill uppdatera eller ta bort ett befintligt programpaket väljer du programmet på sidan Program för batchkontot. Välj ellipsen på raden i det programpaket som du vill ändra. Välj sedan den åtgärd som du vill utföra.

Skärmbild som visar uppdaterings- och borttagningsalternativen för programpaket i Azure Portal.

Om du väljer Uppdatera kan du ladda upp en ny .zip fil. Den här filen ersätter den tidigare .zip fil som du laddade upp för den versionen.

Om du väljer Ta bort uppmanas du att bekräfta borttagningen av den versionen. När du har valt OK tar Batch bort .zip-filen från ditt Azure Storage-konto. Om du tar bort standardversionen av ett program tas standardversionsinställningen bort för programmet.

Installera program på beräkningsnoder

Du har lärt dig hur du hanterar programpaket i Azure Portal. Nu kan du lära dig hur du distribuerar dem till beräkningsnoder och kör dem med Batch-uppgifter.

Installera poolprogrampaket

Om du vill installera ett programpaket på alla beräkningsnoder i en pool anger du en eller flera programpaketreferenser för poolen. De programpaket som du anger för en pool installeras på varje beräkningsnod som ansluter till poolen och på alla noder som startas om eller omskapas.

I Batch .NET anger du en eller flera CloudPool.ApplicationPackageReferences när du skapar en ny pool eller när du använder en befintlig pool. Klassen ApplicationPackageReference anger ett program-ID och en version som ska installeras på en pools beräkningsnoder.

// Create the unbound CloudPool
CloudPool myCloudPool =
    batchClient.PoolOperations.CreatePool(
        poolId: "myPool",
        targetDedicatedComputeNodes: 1,
        virtualMachineSize: "standard_d1_v2",
        VirtualMachineConfiguration: new VirtualMachineConfiguration(
            imageReference: new ImageReference(
                                publisher: "MicrosoftWindowsServer",
                                offer: "WindowsServer",
                                sku: "2019-datacenter-core",
                                version: "latest"),
            nodeAgentSkuId: "batch.node.windows amd64");

// Specify the application and version to install on the compute nodes
myCloudPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "litware",
        Version = "1.1001.2b" }
};

// Commit the pool so that it's created in the Batch service. As the nodes join
// the pool, the specified application package is installed on each.
await myCloudPool.CommitAsync();

Viktigt

Om distributionen av ett programpaket misslyckas markerar Batch-tjänsten noden som oanvändbar och inga aktiviteter schemaläggs för körning på den noden. Om detta inträffar startar du om noden för att initiera paketdistributionen igen. Om du startar om noden aktiveras även aktivitetsschemaläggning igen på noden.

Installera aktivitetsprogrampaket

På liknande sätt som i en pool anger du programpaketreferenser för en aktivitet. När en aktivitet är schemalagd att köras på en nod laddas paketet ned och extraheras precis innan aktivitetens kommandorad körs. Om ett angivet paket och en version redan är installerad på noden laddas inte paketet ned och det befintliga paketet används.

Om du vill installera ett aktivitetsprogrampaket konfigurerar du uppgiftens CloudTask.ApplicationPackageReferences-egenskap :

CloudTask task =
    new CloudTask(
        "litwaretask001",
        "cmd /c %AZ_BATCH_APP_PACKAGE_LITWARE%\\litware.exe -args -here");

task.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference
    {
        ApplicationId = "litware",
        Version = "1.1001.2b"
    }
};

Kör de installerade programmen

De paket som du anger för en pool eller uppgift laddas ned och extraheras till en namngiven AZ_BATCH_ROOT_DIR katalog i noden. Batch skapar också en miljövariabel som innehåller sökvägen till den namngivna katalogen. Dina aktivitetskommandorader använder den här miljövariabeln när du refererar till programmet på noden.

På Windows-noder har variabeln följande format:

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

På Linux-noder är formatet något annorlunda. Punkter (.), bindestreck (-) och nummertecken (#) plattas ut till understreck i miljövariabeln. Dessutom bevaras fallet med program-ID:t. Ett exempel:

Linux:
AZ_BATCH_APP_PACKAGE_applicationid_version

APPLICATIONID och version är värden som motsvarar den program- och paketversion som du har angett för distributionen. Om du till exempel anger att version 2.7 av programblandaren ska installeras på Windows-noder använder dina aktivitetskommandorader den här miljövariabeln för att komma åt dess filer:

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

På Linux-noder anger du miljövariabeln i det här formatet. Platta ut perioderna (.), bindestrecken (-) och nummertecken (#) till understreck och behåll skiftläget för program-ID:t:

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

När du laddar upp ett programpaket kan du ange en standardversion som ska distribueras till dina beräkningsnoder. Om du har angett en standardversion för ett program kan du utelämna versionssuffixet när du refererar till programmet. Du kan ange standardprogramversionen i Azure Portal, i fönstret Program, som du ser i Ladda upp och hantera program.

Om du till exempel anger "2.7" som standardversion för programblandare och dina aktiviteter refererar till följande miljövariabel använder dina Windows-noder version 2.7:

AZ_BATCH_APP_PACKAGE_BLENDER

Följande kodfragment visar ett exempel på en aktivitetskommandorad som startar standardversionen av blender-programmet :

string taskId = "blendertask01";
string commandLine =
    @"cmd /c %AZ_BATCH_APP_PACKAGE_BLENDER%\blender.exe -args -here";
CloudTask blenderTask = new CloudTask(taskId, commandLine);

Tips

Mer information om miljöinställningar för beräkningsnoder finns i Miljöinställningar för aktiviteter.

Uppdatera programpaket för en pool

Om en befintlig pool redan har konfigurerats med ett programpaket kan du ange ett nytt paket för poolen. Det innebär att du måste:

  • Batch-tjänsten installerar det nyligen angivna paketet på alla nya noder som ansluter till poolen och på alla befintliga noder som startas om eller återskapas.
  • Beräkningsnoder som redan finns i poolen när du uppdaterar paketreferenserna installerar inte automatiskt det nya programpaketet. Dessa beräkningsnoder måste startas om eller återskapas för att ta emot det nya paketet.
  • När ett nytt paket distribueras återspeglar de skapade miljövariablerna de nya programpaketreferenserna.

I det här exemplet har den befintliga poolen version 2.7 av mixerprogrammet konfigurerat som en av dess CloudPool.ApplicationPackageReferences. Om du vill uppdatera poolens noder med version 2.76b anger du en ny ApplicationPackageReference med den nya versionen och checkar in ändringen.

string newVersion = "2.76b";
CloudPool boundPool = await batchClient.PoolOperations.GetPoolAsync("myPool");
boundPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "blender",
        Version = newVersion }
};
await boundPool.CommitAsync();

Nu när den nya versionen har konfigurerats installerar Batch-tjänsten version 2.76b på alla nya noder som ansluter till poolen. Om du vill installera 2.76b på noderna som redan finns i poolen startar du om eller avbildningar av dem. Omstartade noder behåller filer från tidigare paketdistributioner.

Visa en lista över programmen i ett Batch-konto

Du kan lista programmen och deras paket i ett Batch-konto med hjälp av metoden ApplicationOperations.ListApplicationSummaries .

// List the applications and their application packages in the Batch account.
List<ApplicationSummary> applications = await batchClient.ApplicationOperations.ListApplicationSummaries().ToListAsync();
foreach (ApplicationSummary app in applications)
{
    Console.WriteLine("ID: {0} | Display Name: {1}", app.Id, app.DisplayName);

    foreach (string version in app.Versions)
    {
        Console.WriteLine("  {0}", version);
    }
}

Nästa steg