Egyéni tevékenységek használata Azure Data Factory vagy Azure Synapse Analytics folyamatban

Vonatkozik: Azure Data Factory Azure Synapse Analytics

Tipp

Data Factory a Microsoft Fabric a Azure Data Factory következő generációja, egyszerűbb architektúrával, beépített AI-vel és új funkciókkal. Ha még nem ismerkedik az adatintegrációval, kezdje a Fabric Data Factoryvel. A meglévő ADF-számítási feladatok frissíthetők Fabric használatával, hogy elérjék az adatkutatás, a valós idejű elemzés és a jelentéskészítés új képességeit.

Egy Azure Data Factory vagy Synapse-folyamatban kétféle tevékenység használható.

Ha olyan adattárba vagy adattárba szeretne adatokat áthelyezni, amelyet a szolgáltatás nem támogat, vagy a szolgáltatás által nem támogatott módon szeretné átalakítani/feldolgozni az adatokat, létrehozhat egy egyéni tevékenységet saját adatáthelyezési vagy átalakítási logikájával, és használhatja a tevékenységet egy folyamatban. Az egyéni tevékenység a testreszabott kódlogikát egy Azure Batch virtuális gépek készletén futtatja.

Megjegyzés

Javasoljuk, hogy az Azure Az PowerShell-modult használja a Azure használatához. Első lépésként lásd: Install Azure PowerShell. Az Az PowerShell-modulra való migrálásról az Migrate Azure PowerShell az AzureRM-ből az Az című témakörben olvashat.

Ha még nem ismerkedik Azure Batch szolgáltatással, tekintse meg a következő cikkeket:

Fontos

Új Azure Batch-készlet létrehozásakor a "VirtualMachineConfiguration" kifejezést kell használni, és NEM a CloudServiceConfigurationt.

Egyéni tevékenységek hozzáadása a csővezetékhez a felhasználói felületen keresztül.

Ha egyéni tevékenységet szeretne használni egy folyamatban, hajtsa végre a következő lépéseket:

  1. Keresse meg az Egyéni elemet a folyamattevékenységek panelen, és húzzon egy egyéni tevékenységet a folyamatvászonra.

  2. Jelölje ki az új egyéni tevékenységet a vásznon, ha még nincs kijelölve.

  3. Válassza a Azure Batch lapot egy új Azure Batch társított szolgáltatás kiválasztásához vagy létrehozásához, amely végrehajtja az egyéni tevékenységet.

    Egy egyéni tevékenység felhasználói felületét jeleníti meg.

  4. Válassza a Settings lapot, és adja meg a Azure Batch végrehajtandó parancsot, valamint az opcionális speciális részleteket.

    Egy egyéni tevékenység Beállítások lapjának felhasználói felületét jeleníti meg.

Azure Batch társított szolgáltatás

Az alábbi JSON egy Azure Batch társított szolgáltatásmintát határoz meg. További információ: Támogatott számítási környezetek

{
    "name": "AzureBatchLinkedService",
    "properties": {
        "type": "AzureBatch",
        "typeProperties": {
            "accountName": "batchaccount",
            "accessKey": {
                "type": "SecureString",
                "value": "access key"
            },
            "batchUri": "https://batchaccount.region.batch.azure.com",
            "poolName": "poolname",
            "linkedServiceName": {
                "referenceName": "StorageLinkedService",
                "type": "LinkedServiceReference"
            }
        }
    }
}

További információkért az Azure Batch társított szolgáltatásról lásd a Társított szolgáltatások cikket.

Egyéni tevékenység

Az alábbi JSON-kódrészlet egy egyszerű egyéni tevékenységgel rendelkező folyamatot határoz meg. A tevékenységdefiníció hivatkozik a Azure Batch társított szolgáltatásra.

{
  "name": "MyCustomActivityPipeline",
  "properties": {
    "description": "Custom activity sample",
    "activities": [{
      "type": "Custom",
      "name": "MyCustomActivity",
      "linkedServiceName": {
        "referenceName": "AzureBatchLinkedService",
        "type": "LinkedServiceReference"
      },
      "typeProperties": {
        "command": "helloworld.exe",
        "folderPath": "customactv2/helloworld",
        "resourceLinkedService": {
          "referenceName": "StorageLinkedService",
          "type": "LinkedServiceReference"
        }
      }
    }]
  }
}

Ebben a mintában a helloworld.exe a resourceLinkedService-ben használt Azure Storage fiók customactv2/helloworld mappájában tárolt egyéni alkalmazás. Az egyéni folyamat továbbítja ezt az egyéni alkalmazást végrehajtásra az Azure Batch-re. A parancsot bármely olyan előnyben részesített alkalmazásra lecserélheti, amely végrehajtható a Azure Batch készletcsomópontok cél operációs rendszerén.

Az alábbi táblázat a tevékenységre jellemző tulajdonságok nevét és leírását ismerteti.

Tulajdonság Leírás Kötelező
név A csővezeték tevékenységének neve Yes
leírás A tevékenységet leíró szöveg. Nem
típus Egyéni tevékenység esetén a tevékenység típusa Egyéni. Yes
kapcsoltSzolgáltatásNeve Az Azure Batch társított szolgáltatása. A társított szolgáltatással kapcsolatos további információkért tekintse meg a társított számítási szolgáltatásokról szóló cikket. Yes
parancs A végrehajtandó egyéni alkalmazás parancsa. Ha az alkalmazás már elérhető a Azure Batch készletcsomóponton, a resourceLinkedService és a folderPath kihagyható. Megadhatja például a cmd /c dir parancsot, amelyet a Windows Batch-készlet csomópont natív módon támogat. Yes
erőforráshoz kapcsolódó szolgáltatás Azure Storage összekapcsolt szolgáltatás a tároló fiókhoz, ahol az egyéni alkalmazást tárolják Nem*
folderPath Az egyéni alkalmazás mappájának és minden függőségének elérési útja

Ha a függőségek almappákban vannak tárolva – vagyis a folderPath alatti hierarchikus mappastruktúrában –, akkor a mappaszerkezet sík lesz, amikor a fájlokat átmásolják az Azure Batch-be. Vagyis az összes fájl egyetlen mappába lesz másolva, almappák nélkül. A viselkedés megkerüléséhez fontolja meg a fájlok tömörítését, a tömörített fájl másolását, majd a kívánt helyen lévő egyéni kóddal való kibontását.
Nem*
referenciaobjektumok Meglévő társított szolgáltatások és adathalmazok tömbje. A hivatkozott társított szolgáltatások és adatkészletek JSON formátumban kerülnek át az egyéni alkalmazásnak, hogy az egyéni kód hivatkozni tudja a szolgáltatás erőforrásaira Nem
kiterjesztettTulajdonságok Felhasználó által definiált tulajdonságok, amelyek JSON formátumban továbbíthatók az egyéni alkalmazásnak, hogy az egyéni kód további tulajdonságokra hivatkozzon Nem
megőrzésiIdőNapokban Az egyéni tevékenységhez küldött fájlok megőrzési ideje. Az alapértelmezett érték 30 nap. Nem

* A tulajdonságok resourceLinkedService és folderPath esetén vagy mindkettőt meg kell adni, vagy mindkettőt ki kell hagyni.

Megjegyzés

Ha a Custom Activity során hivatkozási objektumként ad át csatolt szolgáltatásokat, ajánlott biztonsági eljárásként egy Azure Key Vault által engedélyezett csatolt szolgáltatást használni (mivel nem tartalmaz biztonságos karakterláncokat), és a titkos nevén keresztül közvetlenül a kódból a Key Vault-ból lekérni a hitelesítő adatokat. Talál egy példát itt, amely az AKV-kompatibilis társított szolgáltatásra hivatkozik, lekéri a hitelesítő adatokat a kulcstartóból, majd hozzáfér a kódban lévő tárhoz.

Megjegyzés

Az egyéni tevékenységekben jelenleg csak Azure Blob Storage támogatott a resourceLinkedService szolgáltatásban, és ez az egyetlen társított szolgáltatás, amely alapértelmezés szerint létrejön, és nem választhat más összekötőket, például az ADLS Gen2-t.

Egyéni tevékenységengedélyek

Az egyéni tevékenység a Azure Batch automatikus felhasználói fiókot Non-admin hozzáférésre állítja a tevékenység hatókörével (az alapértelmezett automatikus felhasználói specifikáció). Az automatikus felhasználói fiók engedélyszintje nem módosítható. További információ: Feladatok futtatása felhasználói fiókok alatt a Batchben | Automatikus felhasználói fiókok.

Parancsok végrehajtása

Közvetlenül végrehajthat egy parancsot egyéni tevékenység használatával. Az alábbi példa az "echo hello world" parancsot futtatja a cél Azure Batch készletcsomópontokon, és a kimenetet stdout értékre nyomtatja.

{
  "name": "MyCustomActivity",
  "properties": {
    "description": "Custom activity sample",
    "activities": [{
      "type": "Custom",
      "name": "MyCustomActivity",
      "linkedServiceName": {
        "referenceName": "AzureBatchLinkedService",
        "type": "LinkedServiceReference"
      },
      "typeProperties": {
        "command": "cmd /c echo hello world"
      }
    }]
  }
}

Objektumok és tulajdonságok átadása

Ez a minta bemutatja, hogyan adhat át objektumokat és felhasználó által definiált tulajdonságokat a szolgáltatásból az egyéni alkalmazásnak a referenceObjects és a extendedProperties használatával.

{
  "name": "MyCustomActivityPipeline",
  "properties": {
    "description": "Custom activity sample",
    "activities": [{
      "type": "Custom",
      "name": "MyCustomActivity",
      "linkedServiceName": {
        "referenceName": "AzureBatchLinkedService",
        "type": "LinkedServiceReference"
      },
      "typeProperties": {
        "command": "SampleApp.exe",
        "folderPath": "customactv2/SampleApp",
        "resourceLinkedService": {
          "referenceName": "StorageLinkedService",
          "type": "LinkedServiceReference"
        },
        "referenceObjects": {
          "linkedServices": [{
            "referenceName": "AzureBatchLinkedService",
            "type": "LinkedServiceReference"
          }]
        },
        "extendedProperties": {          
          "connectionString": {
            "type": "SecureString",
            "value": "aSampleSecureString"
          },
          "PropertyBagPropertyName1": "PropertyBagValue1",
          "propertyBagPropertyName2": "PropertyBagValue2",
          "dateTime1": "2015-04-12T12:13:14Z"
        }
      }
    }]
  }
}

A tevékenység végrehajtásakor a referenceObjects és a extendedProperties a következő fájlokban lesz tárolva, amelyek a SampleApp.exeugyanazon végrehajtási mappájába vannak üzembe helyezve:

  • activity.json

    Az egyéni tevékenység attribútumait és kiterjesztett tulajdonságait tárolja.

  • linkedServices.json

    A referenceObjects tulajdonság tárol egy tömböt a társított szolgáltatásokból.

  • datasets.json

    A referenceObjects tulajdonságban definiált adathalmazok tömbjét tárolja.

Az alábbi mintakód bemutatja, hogyan férhet hozzá a SampleApp.exe a szükséges információkhoz JSON-fájlokból:

using Newtonsoft.Json;
using System;
using System.IO;

namespace SampleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //From Extend Properties
            dynamic activity = JsonConvert.DeserializeObject(File.ReadAllText("activity.json"));
            Console.WriteLine(activity.typeProperties.extendedProperties.connectionString.value);

            // From LinkedServices
            dynamic linkedServices = JsonConvert.DeserializeObject(File.ReadAllText("linkedServices.json"));
            Console.WriteLine(linkedServices[0].properties.typeProperties.accountName);
        }
    }
}

Végrehajtási kimenetek lekérése

A folyamatfuttatást a következő PowerShell-paranccsal indíthatja el:

$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName $pipelineName

A folyamat futtatásakor az alábbi parancsokkal ellenőrizheti a végrehajtási kimenetet:

while ($True) {
    $result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30)

    if(!$result) {
        Write-Host "Waiting for pipeline to start..." -foregroundcolor "Yellow"
    }
    elseif (($result | Where-Object { $_.Status -eq "InProgress" } | Measure-Object).count -ne 0) {
        Write-Host "Pipeline run status: In Progress" -foregroundcolor "Yellow"
    }
    else {
        Write-Host "Pipeline '"$pipelineName"' run finished. Result:" -foregroundcolor "Yellow"
        $result
        break
    }
    ($result | Format-List | Out-String)
    Start-Sleep -Seconds 15
}

Write-Host "Activity `Output` section:" -foregroundcolor "Yellow"
$result.Output -join "`r`n"

Write-Host "Activity `Error` section:" -foregroundcolor "Yellow"
$result.Error -join "`r`n"

Az stdout és stderr egyéni alkalmazásod az adfjobs tárolóba kerül, amely az Azure Batch társított szolgáltatással van társítva az általad megadott Azure Storage Linked Service-ben, a feladat GUID-ja alapján. A részletes elérési utat a Tevékenységfuttatás kimenetből szerezheti be, ahogyan az a következő kódrészletben látható:

Pipeline ' MyCustomActivity' run finished. Result:

ResourceGroupName : resourcegroupname
DataFactoryName   : datafactoryname
ActivityName      : MyCustomActivity
PipelineRunId     : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
PipelineName      : MyCustomActivity
Input             : {command}
Output            : {exitcode, outputs, effectiveIntegrationRuntime}
LinkedServiceName :
ActivityRunStart  : 10/5/2017 3:33:06 PM
ActivityRunEnd    : 10/5/2017 3:33:28 PM
DurationInMs      : 21203
Status            : Succeeded
Error             : {errorCode, message, failureType, target}

Activity Output section:
"exitcode": 0
"outputs": [
  "https://<container>.blob.core.windows.net/adfjobs/<GUID>/output/stdout.txt",
  "https://<container>.blob.core.windows.net/adfjobs/<GUID>/output/stderr.txt"
]
"effectiveIntegrationRuntime": "DefaultIntegrationRuntime (East US)"
Activity Error section:
"errorCode": ""
"message": ""
"failureType": ""
"target": "MyCustomActivity"

Ha az alsóbb rétegbeli tevékenységekben szeretné felhasználni a stdout.txt tartalmát, a stdout.txt fájl elérési útját a "@activity('MyCustomActivity').output.outputs[0]" kifejezésben találja.

Fontos

  • A activity.json, linkedServices.jsonés datasets.json a Batch-feladat futtatókörnyezeti mappájában vannak tárolva. Ebben a példában az activity.json, a linkedServices.json és a datasets.json fájlok a https://adfv2storage.blob.core.windows.net/adfjobs/<GUID>/runtime/ elérési úton vannak tárolva. Szükség esetén külön kell megtisztítania őket.
  • A Self-Hosted Integration Runtime használó társított szolgáltatások esetében az Self-Hosted Integration Runtime titkosítja a bizalmas információkat, például a kulcsokat vagy jelszavakat, így biztosítva, hogy a hitelesítő adatok az ügyfél által meghatározott privát hálózati környezetben maradnak. Lehetséges, hogy az egyéni alkalmazáskód ilyen módon történő hivatkozása során néhány bizalmas mező hiányzik. Ha szükséges, használja a SecureStringet a extendedProperties szolgáltatásban a társított szolgáltatás referenciájának használata helyett.

Kimenetek átadása másik tevékenységnek

Az egyéni tevékenységben szereplő kódból egyéni értékeket küldhet vissza a szolgáltatásnak. Ezt úgy teheti meg, hogy az alkalmazásából beírja őket a outputs.json elembe. A szolgáltatás átmásolja a outputs.json tartalmát, és az customOutput tulajdonság értékeként hozzáfűzi a Tevékenység kimenetéhez. (A méretkorlát 2 MB.) Ha az alsóbb rétegbeli tevékenységek tartalmát outputs.json szeretné felhasználni, a kifejezéssel @activity('<MyCustomActivity>').output.customOutputlekérheti az értéket.

SecureString-kimenetek lekérése

A SecureString típusként megjelölt bizalmas tulajdonságértékek, amint az a cikkben bemutatott néhány példában is látható, a felhasználói felület Figyelés lapján lesznek maszkolva. A folyamat tényleges végrehajtásakor azonban a SecureString tulajdonság JSON-ként van szerializálva a activity.json fájlban egyszerű szövegként. Például:

"extendedProperties": {
  "connectionString": {
    "type": "SecureString",
    "value": "aSampleSecureString"
  }
}

Ez a szerializálás nem igazán biztonságos, és nem célja, hogy biztonságos legyen. A késztetés egy javaslat a szolgáltatás számára, amely elrejti az értéket a Monitorozás fülön.

Ha egy egyéni tevékenységből szeretné elérni a SecureString típusú tulajdonságokat, olvassa el a activity.json fájlt, amely ugyanabban a mappában van, mint a .EXE, deszerializálja a JSON-t, majd nyissa meg a JSON tulajdonságot (extendedProperties => [propertyName] => value).

A Azure Batch automatikus méretezése

Azure Batch készletet is létrehozhat autoscale funkcióval. Létrehozhat például egy Azure kötegkészletet 0 dedikált virtuális géppel és egy automatikus skálázási képlettel a függőben lévő tevékenységek száma alapján.

Az itt található mintaképlet a következő viselkedést éri el: A készlet kezdeti létrehozásakor 1 virtuális géppel kezdődik. $PendingTasks metrika a futó + aktív (várólistán lévő) állapotban lévő tevékenységek számát határozza meg. A képlet megkeresi a függőben lévő tevékenységek átlagos számát az elmúlt 180 másodpercben, és ennek megfelelően állítja be a TargetDedicated értéket. Biztosítja, hogy a TargetDedicated soha ne lépje túl a 25 virtuális gépet. Így ahogy az új feladatokat elküldik, a készlet automatikusan növekszik, és amint a feladatok befejeződnek, a virtuális gépek egyenként felszabadulnak, és az automatikus skálázás csökkenti a virtuális gépek számát. A startingNumberOfVMs és a maxNumberofVMs igény szerint módosítható.

Automatikus méretezési képlet:

startingNumberOfVMs = 1;
maxNumberofVMs = 25;
pendingTaskSamplePercent = $PendingTasks.GetSamplePercent(180 * TimeInterval_Second);
pendingTaskSamples = pendingTaskSamplePercent < 70 ? startingNumberOfVMs : avg($PendingTasks.GetSample(180 * TimeInterval_Second));
$TargetDedicated=min(maxNumberofVMs,pendingTaskSamples);

Részletekért tekintse meg a a számítási csomópontok automatikus méretezését egy Azure Batch-készletben.

Ha a kapacitáskészlet az alapértelmezett autoScaleEvaluationInterval értéket használja, a Batch szolgáltatás 15–30 percet vehet igénybe a virtuális gép előkészítéséhez a testreszabott művelet futtatása előtt. Ha a készlet egy másik autoScaleEvaluationInterval értéket használ, a Batch szolgáltatás az autoScaleEvaluationInterval + 10 percet is igénybe vehet.

Tekintse meg az alábbi cikkeket, amelyekből megtudhatja, hogyan alakíthat át adatokat más módokon: