Aracılığıyla paylaş


Azure Data Factory veya Azure Synapse Analytics işlem hattında özel etkinlikler kullanma

APPLIES TO: Azure Data Factory Azure Synapse Analytics

İpucu

Microsoft Fabric'daki Data Factory, daha basit bir mimariye, yerleşik yapay zekaya ve yeni özelliklere sahip yeni nesil Azure Data Factory. Veri tümleştirmeyi yeni kullanmaya başladıysanız Fabric Data Factory ile başlayın. Mevcut ADF iş yükleri veri bilimi, gerçek zamanlı analiz ve raporlama genelinde yeni özelliklere erişmek için Fabric yükseltebilir.

bir Azure Data Factory veya Synapse işlem hattında kullanabileceğiniz iki tür etkinlik vardır.

Hizmetin desteklemediği bir veri deposuna/deposundan veri taşımak veya verileri hizmet tarafından desteklenmeyen bir şekilde dönüştürmek/işlemek için kendi veri taşıma veya dönüştürme mantığınızla Özel etkinlik oluşturabilir ve etkinliği işlem hattında kullanabilirsiniz. Özel etkinlik, özelleştirilmiş kod mantığınızı Azure Batch sanal makine havuzunda çalıştırır.

Not

Azure ile etkileşime geçmek için Azure Az PowerShell modülünü kullanmanızı öneririz. Başlamak için bkz. Azure PowerShell yükleme. Az PowerShell modülüne nasıl geçiş yapılacağını öğrenmek için bkz. AzureRM'den Az Azure PowerShell dağıtma.

Azure Batch hizmetini yeni kullanıyorsanız aşağıdaki makalelere bakın:

Önemli

Yeni bir Azure Batch havuzu oluştururken 'VirtualMachineConfiguration' kullanılmalıdır ve 'CloudServiceConfiguration' kullanılmamalıdır.

Kullanıcı arabirimiyle işlem hattına özel etkinlikler ekleme

İşlem hattında Özel etkinlik kullanmak için aşağıdaki adımları tamamlayın:

  1. İşlem hattı Etkinlikleri bölmesinde Özel'i arayın ve, Özel Etkinliği işlem hattı tuvaline sürükleyin.

  2. Henüz seçili değilse tuvaldeki yeni Özel etkinliği seçin.

  3. Özel etkinliği yürütecek yeni bir Azure Batch bağlı hizmeti seçmek veya oluşturmak için Azure Batch sekmesini seçin.

    Özel etkinliğin kullanıcı arabirimini gösterir.

  4. Settings sekmesini seçin ve Azure Batch yürütülecek bir komut ve isteğe bağlı gelişmiş ayrıntılar belirtin.

    Özel etkinliğin Ayarlar sekmesinin kullanıcı arabirimini gösterir.

Azure Batch bağlı hizmeti

Aşağıdaki JSON bir örnek Azure Batch bağlı hizmeti tanımlar. Ayrıntılar için bkz . Desteklenen işlem ortamları

{
    "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"
            }
        }
    }
}

Azure Batch bağlı hizmeti hakkında daha fazla bilgi edinmek için Bağlantılı hizmetler makalesine bakın.

Özel etkinlik

Aşağıdaki JSON kod parçacığı, basit bir Özel Etkinlik ile bir işlem hattı tanımlar. Etkinlik tanımının bağlı Azure Batch hizmetine bir başvurusu vardır.

{
  "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"
        }
      }
    }]
  }
}

Bu örnekte, helloworld.exe resourceLinkedService içinde kullanılan Azure Depolama hesabının customactv2/helloworld klasöründe depolanan özel bir uygulamadır. Özel etkinlik, bu özel uygulamayı yürütülmek üzere Azure Batch'e gönderir. komutunu, Azure Batch Havuzu düğümlerinin hedef İşletim Sisteminde yürütülebilecek tercih edilen herhangi bir uygulamayla değiştirebilirsiniz.

Aşağıdaki tabloda, bu etkinliğe özgü özelliklerin adları ve açıklamaları açıklanmaktadır.

Özellik Açıklama Gerekli
Adı İşlem hattındaki etkinliğin adı Yes
açıklama Etkinliğin ne yaptığını açıklayan metin. Hayır
Tip Özel etkinlik için etkinlik türü Özel'dir. Yes
bağlıHizmetAdı Azure Batch'e Bağlı Hizmet. Bu bağlı hizmet hakkında bilgi edinmek için Hizmetleri Bağlama Hesaplama makalesine bakın. Yes
komut Yürütülecek özel uygulamanın komutu. Uygulama Azure Batch Pool Node üzerinde zaten mevcutsa, resourceLinkedService ve folderPath belirtilmeyebilir. Örneğin, komutu, Windows Batch Pool düğümü tarafından yerel olarak desteklenen cmd /c dir olarak belirtebilirsiniz. Yes
resourceLinkedService Özel uygulamanın depolandığı Depolama hesabına bağlı Azure Depolama Hizmeti Hayır*
klasör yolu Özel uygulamanın klasörünün yolu ve tüm bağımlılıkları

Alt klasörlerde ( yani folderPath altında hiyerarşik bir klasör yapısında depolanan bağımlılıklarınız varsa, dosyalar Azure Batch kopyalandığında klasör yapısı şu anda düzleştirilmiştir. Diğer bir ifadeyle, tüm dosyalar alt klasörü olmayan tek bir klasöre kopyalanır. Bu davranışa geçici bir çözüm olarak, dosyaları sıkıştırmayı, sıkıştırılmış dosyayı kopyalamayı ve ardından özel kodla istenen konumda sıkıştırılmış dosyayı açmayı göz önünde bulundurun.
Hayır*
referansObjeleri Mevcut Bağlı Hizmetler ve Veri Kümeleri dizisi. Başvuruda bulunan Bağlı Hizmetler ve Veri Kümeleri JSON biçiminde özel uygulamaya geçirilir, böylece özel kodunuz hizmetin kaynaklarına başvurabilir Hayır
genişletilmişÖzellikler Özel kodunuzun ek özelliklere başvurabilmesi için özel uygulamaya JSON biçiminde geçirilebilen kullanıcı tanımlı özellikler Hayır
retentionTimeInDays (Bekleme Süresi Gün Olarak) Özel etkinlik için gönderilen dosyaların bekletme süresi. Varsayılan değer 30 gündür. Hayır

* Özellikler resourceLinkedService ve folderPath ya belirtilmeli ya da her ikisi de dışlanmalıdır.

Not

Custom Activity'de bağlantılı hizmetleri referenceObjects olarak geçiriyorsanız, güvenli dize içermediği için Azure Key Vault etkin bir bağlantılı hizmet geçirmek ve kimlik bilgilerini koddan doğrudan Key Vault üzerinden gizli adı kullanarak almak iyi bir güvenlik uygulamasıdır. AKV özellikli bağlı hizmete başvuran, kimlik bilgilerini Key Vault alan ve ardından koddaki depolama alanına erişen bir örnek bulabilirsiniz.

Not

Şu anda özel etkinlikte resourceLinkedService için yalnızca Azure Blob depolama desteklenir ve varsayılan olarak oluşturulan tek bağlı hizmettir ve ADLS 2. Nesil gibi diğer bağlayıcıları seçme seçeneği yoktur.

Özel etkinlik izinleri

Özel etkinlik, Azure Batch otomatik kullanıcı hesabını görev kapsamına sahip Yönetici olmayan erişim olarak ayarlar (varsayılan otomatik kullanıcı belirtimi). Otomatik kullanıcı hesabının izin düzeyini değiştiremezsiniz. Daha fazla bilgi için bkz . Batch'te kullanıcı hesapları altında görevleri çalıştırma | Otomatik kullanıcı hesapları.

Komutları yürütme

Özel Etkinlik'i kullanarak doğrudan bir komut yürütebilirsiniz. Aşağıdaki örnek, hedef Azure Batch Havuz düğümlerinde "echo hello world" komutunu çalıştırır ve çıkışı stdout'a yazdırır.

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

Nesneleri ve özellikleri geçirme

Bu örnek, hizmetten özel uygulamanıza nesneleri ve kullanıcı tanımlı özellikleri geçirmek için referenceObjects ve extendedProperties özelliklerini nasıl kullanabileceğinizi gösterir.

{
  "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"
        }
      }
    }]
  }
}

Etkinlik yürütüldüğünde, referenceObjects ve extendedProperties, SampleApp.exe'nin yürütme klasörüne kaydedilen aşağıdaki dosyalarda saklanır.

  • activity.json

    Özel etkinliğin extendedProperties ve diğer özelliklerini depolar.

  • linkedServices.json

    referenceObjects özelliğinde tanımlanan Bağlı Hizmetler dizisini depolar.

  • datasets.json

    referenceObjects özelliğinde tanımlanan veri kümeleri dizisini depolar.

Aşağıdaki örnek kodda SampleApp.exe JSON dosyalarından gerekli bilgilere nasıl erişebileceği gösterilmektedir:

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);
        }
    }
}

Yürütme çıkışlarını alma

Aşağıdaki PowerShell komutunu kullanarak bir işlem hattı çalıştırması başlatabilirsiniz:

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

İşlem hattı çalışırken, aşağıdaki komutları kullanarak yürütme çıkışını de kontrol edebilirsiniz:

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"

Özel uygulamanızın stdout ve stderr, görevin GUID'si ile Azure Batch Bağlı Hizmet'i oluştururken tanımladığınız Azure Depolama Bağlı Hizmeti içindeki adfjobs kapsayıcısına kaydedilir. Aşağıdaki kod parçacığında gösterildiği gibi Etkinlik Çalıştırması çıkışından ayrıntılı yolu alabilirsiniz:

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"

aşağı akış etkinliklerinde stdout.txt içeriğini kullanmak isterseniz, "@activity('MyCustomActivity').output.outputs[0]" ifadesinde stdout.txt dosyasının yolunu alabilirsiniz.

Önemli

  • activity.json, linkedServices.json ve datasets.json Batch görevinin çalışma zamanı klasöründe depolanır. Bu örnekte activity.json, linkedServices.json ve datasets.json yolunda depolanır https://adfv2storage.blob.core.windows.net/adfjobs/<GUID>/runtime/ . Gerekirse, bunları ayrı ayrı temizlemeniz gerekir.
  • Self-Hosted Integration Runtime kullanan Bağlı Hizmetler için anahtarlar veya parolalar gibi hassas bilgiler, kimlik bilgilerinin müşteri tarafından tanımlanan özel ağ ortamında kaldığından emin olmak için Self-Hosted Integration Runtime tarafından şifrelenir. Özel uygulama kodunuzda bu şekilde referans verildiğinde bazı hassas alanlar eksik olabilir. Gerekirse Bağlantılı Hizmet referansı kullanmak yerine extendedProperties içinde SecureString kullanın.

Çıkışları başka bir etkinliğe aktarma

Özel Etkinlikteki kodunuzdaki özel değerleri hizmete geri gönderebilirsiniz. Bunu, uygulamanızdan outputs.json içine yazarak yapabilirsiniz. Hizmet, outputs.json içeriğini kopyalar ve bunu customOutput özelliğinin değeri olarak Etkinlik Çıkışına ekler. (Boyut sınırı 2 MB'tır.) outputs.json içeriğini alt akış etkinliklerinde kullanmak istiyorsanız, @activity('<MyCustomActivity>').output.customOutput ifadesini kullanarak değerini alabilirsiniz.

SecureString çıkışlarını alma

Bu makaledeki örneklerden bazılarında gösterildiği gibi SecureString türü olarak belirlenen hassas özellik değerleri, kullanıcı arabirimindeki İzleme sekmesinde maskelenir. Gerçek bir ardışık düzen yürütmesinde, ancak, SecureString özelliği, activity.json dosya içinde JSON formatında düz metin olarak serileştirilir. Örneğin:

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

Bu serileştirme gerçekten güvenli değildir ve güvenli olması amaçlanmamıştır. Amaç, hizmetin İzleme sekmesindeki değeri maskelemeye yönelik bir ipucudur.

Özel bir etkinlikten SecureString türündeki özelliklere erişmek için, .EXE ile aynı klasöre yerleştirilen dosyasını okuyun, JSON'u ayrıştırın ve ardından JSON özelliğine (extendedProperties [propertyName] =activity.json değeri) erişin.

Azure Batch'in Otomatik Ölçeklendirmesi

ayrıca autoscale özelliğine sahip bir Azure Batch havuzu da oluşturabilirsiniz. Örneğin, 0 ayrılmış VM ile bir Azure toplu iş havuzu ve bekleyen görevlerin sayısına göre otomatik ölçeklendirme formülü oluşturabilirsiniz.

Buradaki örnek formül şu davranışa ulaşır: Havuz ilk oluşturulduğunda 1 VM ile başlar. $PendingTasks ölçüm, çalışma + etkin (kuyruğa alınmış) durumdaki görev sayısını tanımlar. Formül, son 180 saniye içinde bekleyen görevlerin ortalama sayısını bulur ve TargetDedicated'ı buna göre ayarlar. TargetDedicated'ın hiçbir zaman 25 VM'nin ötesine geçmemesini sağlar. Bu nedenle, yeni görevler gönderildikçe havuz otomatik olarak büyür ve görevler tamamlandıkça VM'ler birer birer serbest hale gelir ve otomatik ölçeklendirme bu VM'leri küçültür. startingNumberOfVMs ve maxNumberofVMs gereksinimlerinize göre ayarlanabilir.

Otomatik ölçeklendirme formülü:

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

Ayrıntılar için bkz. Otomatik olarak Azure Batch havuzundaki işlem düğümlerini ölçeklendirme.

Havuz varsayılan autoScaleEvaluationInterval kullanıyorsa, Batch hizmetinin özel etkinliği çalıştırmadan önce VM'yi hazırlaması 15-30 dakika sürebilir. Eğer havuz farklı bir autoScaleEvaluationInterval kullanıyorsa, Batch hizmeti autoScaleEvaluationInterval + 10 dakika sürecektir.

Verileri başka şekillerde dönüştürmeyi açıklayan aşağıdaki makalelere bakın: