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

A következőkre vonatkozik: Azure Data Factory Azure Synapse Analytics

Tipp.

Próbálja ki a Data Factoryt a Microsoft Fabricben, amely egy teljes körű elemzési megoldás a nagyvállalatok számára. A Microsoft Fabric az adattovábbítástól az adatelemzésig, a valós idejű elemzésig, az üzleti intelligenciáig és a jelentéskészítésig mindent lefed. Ismerje meg, hogyan indíthat új próbaverziót ingyenesen!

Az Azure Data Factoryben vagy a 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 testre szabott kódlogikát egy virtuális gépek Azure Batch-készletén futtatja.

Megjegyzés:

We recommend that you use the Azure Az PowerShell module to interact with Azure. See Install Azure PowerShell to get started. To learn how to migrate to the Az PowerShell module, see Migrate Azure PowerShell from AzureRM to Az.

Ha még nem ismerkedik az Azure Batch szolgáltatással, tekintse meg az alábbi cikkeket:

Fontos

Új Azure Batch-készlet létrehozásakor a "VirtualMachineConfiguration" kifejezést kell használni, és NEM a CloudServiceConfigurationt. További részletekért tekintse meg az Azure Batch Pool migrálási útmutatóját.

Egyéni tevékenységek hozzáadása folyamathoz felhasználói felülettel

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. Az Azure Batch lapon válassza ki vagy hozzon létre egy új Azure Batch társított szolgáltatást, amely végrehajtja az egyéni tevékenységet.

    Shows the UI for a Custom activity.

  4. Válassza a Gépház lapot, és adjon meg egy, az Azure Batchben végrehajtandó parancsot, valamint az opcionális speciális részleteket.

    Shows the UI for the Settings tab for a Custom activity.

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

Az alábbi JSON egy Azure Batch-alapú társított szolgáltatást definiál. 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"
            }
        }
    }
}

Az Azure Batch társított szolgáltatásával kapcsolatos további információkért tekintse meg a számítási társított szolgáltatásokról szóló 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 az Azure Batch társított szolgáltatására.

{
  "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 példában a helloworld.exe egy egyéni alkalmazás, amely a resourceLinkedService-ben használt Azure Storage-fiók customactv2/helloworld mappájában van tárolva. Az egyéni tevékenység elküldi ezt az egyéni alkalmazást az Azure Batch-en való végrehajtáshoz. A parancsot bármely olyan előnyben részesített alkalmazásra lecserélheti, amely végrehajtható az Azure Batch-készlet csomópontjainak célműveleti rendszerében.

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

Property Leírás Required
név A folyamat tevékenységének neve Igen
leírás A tevékenység tevékenységeit leíró szöveg. Nem
típus Egyéni tevékenység esetén a tevékenység típusa Egyéni. Igen
linkedServiceName Társított szolgáltatás az Azure Batch-hez. 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. Igen
command A végrehajtandó egyéni alkalmazás parancsa. Ha az alkalmazás már elérhető az Azure Batch-készlet csomópontján, a resourceLinkedService és a folderPath kihagyható. Megadhatja például a kívánt cmd /c dirparancsot, amelyet a Windows Batch Pool csomópont natív módon támogat. Igen
resourceLinkedService Azure Storage társított szolgáltatás ahhoz a Tárfió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 almappákban , azaz hierarchikus mappastruktúrában, a FolderPath mappában tárolt függőségek vannak tárolva, a mappaszerkezet jelenleg simul, amikor a fájlok át lesznek másolva az Azure Batchbe. 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*
referenceObjects 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
extendedProperties 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
retentionTimeInDays 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ágokat resourceLinkedService meg folderPath kell adni, vagy mindkettőt ki kell hagyni.

Megjegyzés:

Ha referenciaként továbbítja a csatolt szolgáltatásokat az egyéni tevékenységben, akkor ajánlott biztonsági gyakorlat egy Azure Key Vault-kompatibilis társított szolgáltatás átadása (mivel nem tartalmaz biztonságos sztringeket), és a hitelesítő adatokat titkos névvel lekérni közvetlenül a Key Vaultból a kódból. Itt talál egy példát, amely az AKV-kompatibilis társított szolgáltatásra hivatkozik, lekéri a hitelesítő adatokat a Key Vaultból, majd hozzáfér a kód tárterületéhez.

Megjegyzés:

Az egyéni tevékenységekben jelenleg csak az Azure Blob Storage támogatott a resourceLinkedService szolgáltatáshoz, é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 az Azure Batch automatikus felhasználói fiókját nem rendszergazdai hozzáférésre állítja a tevékenység hatókörével (az alapértelmezett automatikus felhasználói specifikációval). 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 Pool-csomópontokon, és a kimenetet stdout-ra 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 SampleApp.exe ugyanazon végrehajtási mappájába telepített következő fájlokban lesz tárolva:

  • activity.json

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

  • linkedServices.json

    A referenceObjects tulajdonságban definiált társított szolgáltatások tömbje.

  • datasets.json

    A referenceObjects tulajdonságban definiált adathalmazok tömbje.

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 egyéni alkalmazás stdoutját és stderr-ét a rendszer a feladat GUID azonosítójával rendelkező Azure Batch Linked Service létrehozásakor megadott Azure Storage társított szolgáltatás adfjobs-tárolóba menti. 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 stdout.txt tartalmát szeretné felhasználni az alsóbb rétegbeli tevékenységekben, a stdout.txt fájl elérési útját a "@activity('MyCustomActivity').output.outputs[0]" kifejezésben találja.

Fontos

  • Az activity.json, a linkedServices.json és az datasets.json a Batch-feladat futtatókörnyezeti mappájában van tárolva. Ebben a példában az activity.json, a linkedServices.json és az datasets.json tárolódik az https://adfv2storage.blob.core.windows.net/adfjobs/<GUID>/runtime/ elérési úton. Szükség esetén külön kell megtisztítania őket.
  • A saját üzemeltetésű integrációs modult használó társított szolgáltatások esetében a bizalmas információkat, például a kulcsokat vagy jelszavakat a saját üzemeltetésű integrációs modul titkosítja, hogy a hitelesítő adatok megmaradjanak az ügyfél által meghatározott privát hálózati környezetben. Előfordulhat, hogy az egyéni alkalmazáskód ilyen módon hivatkozik néhány bizalmas mezőre. 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 beírja őket outputs.json az alkalmazásból. A szolgáltatás a tulajdonság értékeként átmásolja annak tartalmát outputs.json , és hozzáfűzi a Tevékenység kimenetéhez customOutput . (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 szándék a szolgáltatásra vonatkozó tipp, amely elfedi az értéket a Figyelés lapon.

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 az .EXE, deszerializálja a JSON-t, majd nyissa meg a JSON tulajdonságot (extendedProperties => [propertyName] => value).

Az Azure Batch automatikus skálázása

Automatikus skálázási funkcióval rendelkező Azure Batch-készletet is létrehozhat. 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 az új tevékenységek elküldésekor a készlet automatikusan nő, és a feladatok befejeződése után a virtuális gépek egyenként ingyenessé válnak, és az automatikus skálázás zsugorítja ezeket a virtuális gépeket. 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 lásd : Számítási csomópontok automatikus méretezése egy Azure Batch-készletben .

Ha a készlet az alapértelmezett automatikusScaleEvaluationInterval é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 az egyéni tevékenység futtatása előtt. Ha a készlet egy másik automatikusScaleEvaluationInterval értéket használ, a Batch szolgáltatás az automatikusScaleEvaluationInterval + 10 percet is igénybe vehet.

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