Menggunakan aktivitas kustom dalam alur Azure Data Factory versi 1
Catatan
Artikel ini berlaku untuk versi 1 dari Azure Data Factory. Jika Anda menggunakan versi layanan Azure Data Factory saat ini, lihat Aktivitas kustom di V2.
Ada dua jenis aktivitas yang bisa Anda gunakan dalam alur Azure Data Factory.
- Aktivitas Pergerakan Data untuk memindahkan data antara penyimpanan data sumber dan sink yang didukung.
- Aktivitas transformasi data untuk mengubah data menggunakan layanan komputasi seperti Azure HDInsight, Azure Batch.
Untuk memindahkan data ke/dari penyimpanan data yang tidak didukung oleh Azure Data Factory, buat aktivitas kustom dengan logika pergerakan data Anda sendiri dan gunakan aktivitas dalam alur. Demikian pula, untuk mengubah/memproses data dengan cara yang tidak didukung oleh Data Factory, buat aktivitas kustom dengan logika transformasi data Anda sendiri dan gunakan aktivitas dalam alur.
Anda dapat mengonfigurasi aktivitas khusus untuk dijalankan pada kumpulan mesin virtual Azure Batch. Saat menggunakan Azure Batch, Anda hanya dapat menggunakan kumpulan Azure Batch yang ada.
Panduan berikut ini menyediakan instruksi langkah demi langkah untuk membuat aktivitas .NET kustom dan menggunakan aktivitas kustom dalam alur. Penelusuran menggunakan layanan tertaut Azure Batch.
Penting
- Tidak dimungkinkan untuk menggunakan Data Management Gateway dari aktivitas kustom untuk mengakses sumber data lokal. Saat ini, Data Management Gateway hanya mendukung aktivitas salin dan aktivitas prosedur yang disimpan di Azure Data Factory.
Penelusuran: membuat aktivitas kustom
Prasyarat
- Visual Studio 2012/2013/2015/2017
- Unduh dan instal Azure .NET SDK
Prasyarat Azure Batch
Pada penelusuran, Anda menjalankan aktivitas .NET kustom menggunakan Azure Batch sebagai sumber daya komputasi. Azure Batch adalah layanan platform untuk menjalankan aplikasi komputasi paralel dan berkinerja tinggi (HPC) skala besar secara efisien di cloud. Azure Batch menjadwalkan pekerjaan intensif komputasi untuk dijalankan pada kumpulan mesin virtual terkelola, dan dapat secara otomatis menskalakan sumber daya komputasi untuk memenuhi kebutuhan pekerjaan Anda. Lihat artikel dasar-dasar Azure Batch untuk gambaran umum terperinci tentang layanan Azure Batch.
Untuk tutorial, buat akun Azure Batch dengan kumpulan VM. Berikut langkah-langkahnya:
Buat akun Azure Batch menggunakan portal Microsoft Azure. Lihat Membuat dan mengelola artikel akun Azure Batch untuk mendapatkan instruksi.
Catat nama akun Azure Batch, kunci akun, URI, dan nama kumpulan. Anda memerlukannya untuk membuat layanan tertaut Azure Batch.
- Pada halaman beranda untuk akun Azure Batch, Anda akan melihat URL dalam format berikut:
https://myaccount.westus.batch.azure.com. Dalam contoh ini, myaccount adalah nama akun Azure Batch. URI yang Anda gunakan dalam definisi layanan tertaut adalah URL tanpa nama akun. Contoh:https://<region>.batch.azure.com. - Klik Tombol di menu sebelah kiri, dan salin KUNCI AKSES UTAMA.
- Untuk menggunakan kumpulan yang ada, klik Kumpulan pada menu, dan catat ID kolam renang. Jika Anda tidak memiliki kumpulan yang ada, pindah ke langkah berikutnya.
- Pada halaman beranda untuk akun Azure Batch, Anda akan melihat URL dalam format berikut:
Membuat kumpulan Microsoft Azure Batch.
- Di portal Microsoft Azure, pilih Browse pada menu kiri, dan pilih Batch Account.
- Pilih akun Microsoft Azure Batch Anda untuk membuka bilah Akun Batch.
- Klik Petak Kumpulan.
- Di bilah Pools, klik Tombol Tambahkan pada toolbar untuk menambahkan kumpulan.
- Masukkan ID untuk Kumpulan (Pool ID). Perhatikan Kumpulan ID; Anda membutuhkannya saat membuat solusi Azure Data Factory.
- Tentukan Windows Server 2012 R2 untuk pengaturan Keluarga Sistem Operasi.
- Pilih node pricing tier.
- Masukkan 2 sebagai nilai untuk pengaturan Target Dedicated.
- Masukkan 2 sebagai nilai untuk pengaturan Max. tasks per node.
- Klik OK untuk membuat rencana.
- Catat ID kumpulan.
Langkah-langkah tingkat tinggi
Berikut adalah langkah-langkah yang Anda lakukan sebagai bagian dari panduan ini:
- Buat aktivitas kustom yang berisi logika transformasi/pemrosesan data sederhana.
- Membuat data factory dengan alur yang menggunakan aktivitas kustom.
Membuat aktivitas kustom
Untuk membuat aktivitas kustom .NET, buat proyek .NET Class Library dengan class yang mengimplementasikan antarmuka IDotNetActivity tersebut. Antarmuka ini hanya memiliki satu metode: Eksekusi dan tanda tangannya adalah:
public IDictionary<string, string> Execute(
IEnumerable<LinkedService> linkedServices,
IEnumerable<Dataset> datasets,
Activity activity,
IActivityLogger logger)
Metode ini membutuhkan dua parameter:
- linkedServices. Properti ini adalah daftar layanan tertaut Penyimpanan Data yang dapat dijumlahkan oleh himpunan data input/output untuk aktivitas tersebut.
- himpunandata. Properti ini adalah daftar himpunan data input/output yang dapat dijumlahkan untuk aktivitas tersebut. Anda dapat menggunakan parameter ini untuk mendapatkan lokasi dan skema yang ditentukan oleh himpunan data input dan output.
- aktivitas. Properti ini mewakili aktivitas saat ini. Ini dapat digunakan untuk mengakses properti yang diperluas yang terkait dengan aktivitas kustom. Lihat Mengakses properti yang diperluas untuk detailnya.
- Pencatat. Objek ini memungkinkan Anda menulis komentar debug yang muncul di log pengguna untuk alur.
Metode ini menghasilkan kamus yang dapat digunakan untuk merantai aktivitas kustom bersama di masa mendatang. Fitur ini belum diimplementasikan, jadi hanya akan menghasilkan kamus yang kosong dari metode tersebut.
Prosedur
Membuat proyek Perpustakaan Kelas .NET.
- Luncurkan Visual Studio.
- Klik File, arahkan ke Baru, dan klik Proyek.
- Perluas Template, dan pilih Visual C#. Dalam penelusuran ini, Anda menggunakan C#, tetapi Anda dapat menggunakan bahasa .NET apa pun untuk mengembangkan aktivitas kustom.
- Pilih Class Library dari daftar jenis proyek di sebelah kanan. Di Visual Studio, pilih Perpustakaan Kelas (.NET Framework)
- Masukkan MyDotNetActivity untuk Name.
- Pilih C:\ADFGetStarted untuk Lokasi.
- Pilih OK untuk membuat proyek.
Klik Alat, arahkan ke Manajer Paket NuGet, dan klik Konsol Manajer Paket.
Di Konsol Manajer Paket, jalankan perintah berikut untuk mengimpor Microsoft.Azure.Management.DataFactories.
Install-Package Microsoft.Azure.Management.DataFactoriesImpor paket Azure Storage paket NuGet ke dalam proyek.
Install-Package WindowsAzure.Storage -Version 4.3.0Penting
Peluncur layanan Data Factory memerlukan WindowsAzure.Storage versi 4.3. Jika Anda menambahkan referensi ke versi perakitan Azure Storage yang lebih baru dalam proyek aktivitas kustom Anda, Anda akan melihat kesalahan saat aktivitas dijalankan. Untuk mengatasi kesalahan, lihat Bagian isolasi appdomain.
Tambahkan pernyataan penggunaan berikut ke file sumber dalam proyek.
// Comment these lines if using VS 2017 using System.IO; using System.Globalization; using System.Diagnostics; using System.Linq; // -------------------- // Comment these lines if using <= VS 2015 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; // --------------------- using Microsoft.Azure.Management.DataFactories.Models; using Microsoft.Azure.Management.DataFactories.Runtime; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob;Ubah nama ruang nama menjadi MyDotNetActivityNS.
namespace MyDotNetActivityNSUbah nama kelas menjadi MyDotNetActivity dan dapatkan dari antarmuka IDotNetActivity seperti yang ditunjukkan dalam cuplikan kode berikut:
public class MyDotNetActivity : IDotNetActivityTerapkan (Tambahkan) metode Eksekusi antarmuka IDotNetActivity ke kelas MyDotNetActivity dan salin kode sampel berikut ke metode tersebut.
Contoh berikut menghitung jumlah kemunculan istilah pencarian ("Microsoft") di setiap blob yang terkait dengan irisan data.
/// <summary> /// Execute method is the only method of IDotNetActivity interface you must implement. /// In this sample, the method invokes the Calculate method to perform the core logic. /// </summary> public IDictionary<string, string> Execute( IEnumerable<LinkedService> linkedServices, IEnumerable<Dataset> datasets, Activity activity, IActivityLogger logger) { // get extended properties defined in activity JSON definition // (for example: SliceStart) DotNetActivity dotNetActivity = (DotNetActivity)activity.TypeProperties; string sliceStartString = dotNetActivity.ExtendedProperties["SliceStart"]; // to log information, use the logger object // log all extended properties IDictionary<string, string> extendedProperties = dotNetActivity.ExtendedProperties; logger.Write("Logging extended properties if any..."); foreach (KeyValuePair<string, string> entry in extendedProperties) { logger.Write("<key:{0}> <value:{1}>", entry.Key, entry.Value); } // linked service for input and output data stores // in this example, same storage is used for both input/output AzureStorageLinkedService inputLinkedService; // get the input dataset Dataset inputDataset = datasets.Single(dataset => dataset.Name == activity.Inputs.Single().Name); // declare variables to hold type properties of input/output datasets AzureBlobDataset inputTypeProperties, outputTypeProperties; // get type properties from the dataset object inputTypeProperties = inputDataset.Properties.TypeProperties as AzureBlobDataset; // log linked services passed in linkedServices parameter // you will see two linked services of type: AzureStorage // one for input dataset and the other for output dataset foreach (LinkedService ls in linkedServices) logger.Write("linkedService.Name {0}", ls.Name); // get the first Azure Storage linked service from linkedServices object // using First method instead of Single since we are using the same // Azure Storage linked service for input and output. inputLinkedService = linkedServices.First( linkedService => linkedService.Name == inputDataset.Properties.LinkedServiceName).Properties.TypeProperties as AzureStorageLinkedService; // get the connection string in the linked service string connectionString = inputLinkedService.ConnectionString; // get the folder path from the input dataset definition string folderPath = GetFolderPath(inputDataset); string output = string.Empty; // for use later. // create storage client for input. Pass the connection string. CloudStorageAccount inputStorageAccount = CloudStorageAccount.Parse(connectionString); CloudBlobClient inputClient = inputStorageAccount.CreateCloudBlobClient(); // initialize the continuation token before using it in the do-while loop. BlobContinuationToken continuationToken = null; do { // get the list of input blobs from the input storage client object. BlobResultSegment blobList = inputClient.ListBlobsSegmented(folderPath, true, BlobListingDetails.Metadata, null, continuationToken, null, null); // Calculate method returns the number of occurrences of // the search term ("Microsoft") in each blob associated // with the data slice. definition of the method is shown in the next step. output = Calculate(blobList, logger, folderPath, ref continuationToken, "Microsoft"); } while (continuationToken != null); // get the output dataset using the name of the dataset matched to a name in the Activity output collection. Dataset outputDataset = datasets.Single(dataset => dataset.Name == activity.Outputs.Single().Name); // get type properties for the output dataset outputTypeProperties = outputDataset.Properties.TypeProperties as AzureBlobDataset; // get the folder path from the output dataset definition folderPath = GetFolderPath(outputDataset); // log the output folder path logger.Write("Writing blob to the folder: {0}", folderPath); // create a storage object for the output blob. CloudStorageAccount outputStorageAccount = CloudStorageAccount.Parse(connectionString); // write the name of the file. Uri outputBlobUri = new Uri(outputStorageAccount.BlobEndpoint, folderPath + "/" + GetFileName(outputDataset)); // log the output file name logger.Write("output blob URI: {0}", outputBlobUri.ToString()); // create a blob and upload the output text. CloudBlockBlob outputBlob = new CloudBlockBlob(outputBlobUri, outputStorageAccount.Credentials); logger.Write("Writing {0} to the output blob", output); outputBlob.UploadText(output); // The dictionary can be used to chain custom activities together in the future. // This feature is not implemented yet, so just return an empty dictionary. return new Dictionary<string, string>(); }Tambahkan metode pembantu berikut:
/// <summary> /// Gets the folderPath value from the input/output dataset. /// </summary> private static string GetFolderPath(Dataset dataArtifact) { if (dataArtifact == null || dataArtifact.Properties == null) { return null; } // get type properties of the dataset AzureBlobDataset blobDataset = dataArtifact.Properties.TypeProperties as AzureBlobDataset; if (blobDataset == null) { return null; } // return the folder path found in the type properties return blobDataset.FolderPath; } /// <summary> /// Gets the fileName value from the input/output dataset. /// </summary> private static string GetFileName(Dataset dataArtifact) { if (dataArtifact == null || dataArtifact.Properties == null) { return null; } // get type properties of the dataset AzureBlobDataset blobDataset = dataArtifact.Properties.TypeProperties as AzureBlobDataset; if (blobDataset == null) { return null; } // return the blob/file name in the type properties return blobDataset.FileName; } /// <summary> /// Iterates through each blob (file) in the folder, counts the number of instances of search term in the file, /// and prepares the output text that is written to the output blob. /// </summary> public static string Calculate(BlobResultSegment Bresult, IActivityLogger logger, string folderPath, ref BlobContinuationToken token, string searchTerm) { string output = string.Empty; logger.Write("number of blobs found: {0}", Bresult.Results.Count<IListBlobItem>()); foreach (IListBlobItem listBlobItem in Bresult.Results) { CloudBlockBlob inputBlob = listBlobItem as CloudBlockBlob; if ((inputBlob != null) && (inputBlob.Name.IndexOf("$$$.$$$") == -1)) { string blobText = inputBlob.DownloadText(Encoding.ASCII, null, null, null); logger.Write("input blob text: {0}", blobText); string[] source = blobText.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries); var matchQuery = from word in source where word.ToLowerInvariant() == searchTerm.ToLowerInvariant() select word; int wordCount = matchQuery.Count(); output += string.Format("{0} occurrences(s) of the search term \"{1}\" were found in the file {2}.\r\n", wordCount, searchTerm, inputBlob.Name); } } return output; }Metode GetFolderPath menghasilkan alur ke folder yang ditunjuk oleh himpunan data dan metode GetFileName menghasilkan nama blob/file yang ditunjuk oleh himpunan data. Jika Anda memiliki folderPath mendefinisikan menggunakan variabel seperti {Year}, {Month}, {Day} dll., metode mengembalikan string apa adanya tanpa menggantinya dengan nilai runtime. Lihat Bagian Properti perluasan Akses untuk detail tentang mengakses SliceStart, SliceEnd, dll.
"name": "InputDataset", "properties": { "type": "AzureBlob", "linkedServiceName": "AzureStorageLinkedService", "typeProperties": { "fileName": "file.txt", "folderPath": "adftutorial/inputfolder/",Metode Calculate menghitung jumlah instans kata kunci "Microsoft" dalam file input (blob di folder). Istilah pencarian ("Microsoft") dimasukkan ke dalam kode program.
Mengompilasi proyek. Klik Bangun pada menu dan klik Bangun Solusi.
Penting
Tetapkan versi 4.5.2 .NET Framework sebagai kerangka kerja target untuk proyek Anda: klik kanan proyek, dan klik Properti untuk mengatur kerangka kerja target. Data Factory tidak mendukung aktivitas kustom yang dikompilasi terhadap versi .NET Framework lebih baru dari 4.5.2.
Luncurkan Windows Explorer, dan navigasi ke folder bin\debug atau bin\release tergantung pada jenis build.
Buat file zip MyDotNetActivity.zip yang berisi semua biner di <folder proyek> folder f\bin\Debug. Sertakan file MyDotNetActivity.pdb sehingga Anda mendapatkan detail tambahan seperti nomor baris di kode sumber yang menyebabkan masalah jika terjadi kegagalan.
Penting
Semua file dalam file zip untuk aktivitas kustom harus berada di tingkat atas tanpa sub folder.
Buat kontainer blob bernama customactivitycontainer jika belum ada.
Unggah MyDotNetActivity.zip sebagai blob ke customactivitycontainer dalam penyimpanan blob Azure tujuan umum (bukan penyimpanan Blob panas/keren) yang dirujuk oleh AzureStorageLinkedService.
Penting
Jika Anda menambahkan proyek aktivitas .NET ini ke solusi di Visual Studio yang berisi proyek Data Factory, dan menambahkan referensi ke proyek aktivitas .NET dari proyek aplikasi Data Factory, Anda tidak perlu melakukan dua langkah terakhir untuk membuat file zip secara manual dan mengunggahnya ke penyimpanan blob Azure tujuan umum. Saat Anda memublikasikan entitas Data Factory menggunakan Visual Studio, langkah-langkah ini secara otomatis dilakukan oleh proses penerbitan. Untuk informasi selengkapnya, lihat proyek Azure Data Factory di bagian Visual Studio.
Membuat alur dengan aktivitas kustom
Anda telah membuat aktivitas khusus dan mengunggah file zip dengan biner ke kontainer blob di Akun Microsoft Azure Storage tujuan umum. Di bagian ini, Anda membuat Azure data factory dengan alur yang menggunakan aktivitas kustom.
Himpunan data input untuk aktivitas kustom mewakili blob (file) di folder customactivityinput dari kontainer adftutorial di penyimpanan blob. Himpunan data output untuk aktivitas kustom mewakili blob (file) di folder customactivityoutput dari kontainer adftutorial di penyimpanan blob.
Buat file.txt file dengan konten berikut dan unggah ke folder customactivityinput dari kontainer adftutorial. Buat kontainer adftutorial jika belum ada.
test custom activity Microsoft test custom activity Microsoft
Folder input sesuai dengan irisan di Azure Data Factory meskipun folder memiliki dua file atau lebih. Ketika setiap irisan diproses oleh alur, aktivitas kustom melakukan iterasi melalui semua blob di folder input untuk irisan itu.
Anda melihat satu file output dengan di folder adftutorial\customactivityoutput dengan satu atau beberapa baris (sama dengan jumlah blob di folder input):
2 occurrences(s) of the search term "Microsoft" were found in the file inputfolder/2016-11-16-00/file.txt.
Berikut adalah langkah-langkah yang Anda lakukan di bagian ini:
- Buat data factory.
- Buat layanan Tertaut untuk kumpulan Azure Batch VM tempat aktivitas kustom berjalan dan Microsoft Azure Storage yang menyimpan blob input/output.
- Buat himpunan data input dan output yang mewakili input dan output aktivitas kustom.
- Buat alur yang menggunakan aktivitas kustom.
Catatan
Buat file.txt dan unggah ke kontainer blob jika Anda belum melakukannya. Lihat instruksi di bagian sebelumnya.
Langkah 1: Membuat data factory
Setelah masuk ke portal Microsoft Azure, lakukan langkah-langkah berikut:
Klik Buat sumber daya di menu sebelah kiri.
Klik Data + Analitik di bilah Baru.
Pilih Data Factory pada blade Data analytic.
Pada blade New data factory, masukkan CustomActivityFactory untuk namanya. Nama Azure data factory harus bersifat unik secara global. Jika Anda menerima kesalahan: Nama Data Factory "CustomActivityFactory" tidak tersedia, ubah nama Data Factory (misalnya, yournameCustomActivityFactory) dan coba buat lagi.
Pilih RESOURCE GROUP NAME, dan pilih grup sumber yang sudah ada atau buat grup sumber.
Verifikasi bahwa Anda menggunakan langganan dan kawasan yang benar di mana Anda ingin Data Factory dibuat.
Klik Buat pada bilah Pabrik data baru.
Anda melihat Data Factory sedang dibuat di Dasbor portal Microsoft Azure.
Setelah Data Factory berhasil dibuat, Anda akan melihat bilah Azure Data Factory, yang memperlihatkan isi Data Factory kepada Anda.
Langkah 2: Membuat layanan tertaut
Layanan tertaut menautkan penyimpanan data atau layanan komputasi ke Data Factory. Pada langkah ini, Anda menautkan akun Microsoft Azure Storage dan akun Microsoft Azure Batch ke Data Factory Anda.
Membuat layanan tertaut Azure Storage
Klik petak Penulis dan sebarkan pada bilah DATA FACTORY untuk CustomActivityFactory. Editor Data Factory muncul.
Pilih New data store pada bilah perintah, dan pilih Azure storage. Anda akan melihat skrip JSON untuk membuat layanan tertaut Azure Storage di bagian editor.
Ganti
<accountname>dengan nama akun penyimpanan Azure Anda dan<accountkey>dengan kunci akses akun penyimpanan Azure. Untuk mempelajari cara mendapatkan kunci akses penyimpanan Anda, lihat Mengelola kunci akses akun penyimpanan.
Klik Terapkan pada bilah perintah untuk menggunakan layanan yang ditautkan.
Membuat layanan tertaut Azure Batch
Di Editor Data Factory, klik ... Selengkapnya tentang bilah perintah, klik Komputasi baru, lalu pilih Azure Batch dari menu.
Buat perubahan berikut pada skrip JSON:
Tentukan nama akun Azure Batch untuk properti accountName. URL dari bilah akun Azure Batch dalam format berikut:
http://accountname.region.batch.azure.com. Untuk properti batchUri di JSON, Anda perlu menghapusaccountname.dari URL dan menggunakanaccountnameproperti JSONaccountName.Tentukan kunci akun Azure Batch untuk properti accessKey.
Tentukan nama kumpulan yang Anda buat sebagai bagian dari prasyarat untuk properti poolName. Anda juga dapat menentukan ID kumpulan, bukan nama kumpulan.
Tentukan URI Azure Batch untuk properti batchUri. Contoh:
https://westus.batch.azure.com.Tentukan AzureStorageLinkedService untuk properti linkedServiceName.
{ "name": "AzureBatchLinkedService", "properties": { "type": "AzureBatch", "typeProperties": { "accountName": "myazurebatchaccount", "batchUri": "https://westus.batch.azure.com", "accessKey": "<yourbatchaccountkey>", "poolName": "myazurebatchpool", "linkedServiceName": "AzureStorageLinkedService" } } }Untuk properti poolName, Anda juga dapat menentukan ID kumpulan, bukan nama kumpulan.
Langkah 3: Membuat himpunan data
Dalam langkah ini, Anda membuat himpunan data untuk merepresentasikan data input dan output.
Membuat himpunan data input
Di Editor untuk Data Factory, klik ... Selengkapnya tentang bilah perintah, klik himpunan data baru, lalu pilih penyimpanan Azure Blob dari menu turun bawah.
Ganti JSON di panel kanan dengan cuplikan JSON berikut ini:
{ "name": "InputDataset", "properties": { "type": "AzureBlob", "linkedServiceName": "AzureStorageLinkedService", "typeProperties": { "folderPath": "adftutorial/customactivityinput/", "format": { "type": "TextFormat" } }, "availability": { "frequency": "Hour", "interval": 1 }, "external": true, "policy": {} } }Anda membuat alur kemudian pada panduan ini dengan waktu mulai 2016-11-16T00:00:00Z dan waktu akhir 2016-11-16T05:00:00Z. Dijadwalkan untuk menghasilkan data setiap jam, jadi ada lima irisan input/output (antara 00.00.00 ->05.00.00).
Nilai frequency dan interval untuk himpunan data input ditetapkan ke Hour dan 1, yang berarti bahwa irisan input tersedia setiap jam. Dalam sampel ini, ini adalah file yang sama (file.txt) dalam intputfolder.
Berikut adalah waktu mulai untuk setiap irisan, yang diwakili oleh variabel sistem SliceStart di cuplikan JSON di atas.
Pilih Deploy pada bilah alat untuk membuat dan menerapkan tabel InputDataset. Konfirmasikan bahwa Anda melihat TABEL YANG BERHASIL DIBUAT pesan pada bilah judul Editor.
Buat himpunan data output
Di editor Data Factory, klik ... Selengkapnya tentang bilah perintah, klik himpunan data baru, lalu pilih Penyimpanan Blob Azure.
Ganti skrip JSON di panel kanan dengan skrip JSON berikut ini:
{ "name": "OutputDataset", "properties": { "type": "AzureBlob", "linkedServiceName": "AzureStorageLinkedService", "typeProperties": { "fileName": "{slice}.txt", "folderPath": "adftutorial/customactivityoutput/", "partitionedBy": [ { "name": "slice", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyy-MM-dd-HH" } } ] }, "availability": { "frequency": "Hour", "interval": 1 } } }Lokasi keluaran adalah adftutorial/customactivityoutput/ dan nama file output adalah yyyy-MM-dd-HH.txt di mana yyyy-MM-dd-HH adalah tahun, bulan, tanggal, dan jam irisan yang diproduksi. Lihat Referensi Pengembang untuk detailnya.
Blob/file output dihasilkan untuk setiap irisan input. Berikut adalah bagaimana file output dinamai untuk setiap irisan. Semua file output dihasilkan dalam satu folder output: adftutorial\customactivityoutput.
Irisan Waktu mulai Berkas output 1 2016-11-16T00:00:00 2016-11-16-00.txt 2 2016-11-16T01:00:00 2016-11-16-01.txt 3 2016-11-16T02:00:00 2016-11-16-02.txt 4 2016-11-16T03:00:00 2016-11-16-03.txt 5 2016-11-16T04:00:00 2016-11-16-04.txt Ingat bahwa semua file dalam folder input adalah bagian dari irisan dengan waktu mulai yang disebutkan di atas. Ketika irisan ini diproses, aktivitas kustom memindai melalui setiap file dan menghasilkan garis dalam file output dengan jumlah kemunculan istilah pencarian ("Microsoft"). Jika ada tiga file di folder input, ada tiga baris dalam file output untuk setiap irisan per jam: 2016-11-16-00.txt, 2016-11-16:01:00:00.txt, dll.
Untuk menggunakan OutputDataset, klik Terapkan pada bilah perintah.
Membuat dan menjalankan saluran alur yang menggunakan aktivitas kustom
Di Editor Azure Data Factory, klik ... Lainnya, lalu pilih Alur baru pada bilah perintah.
Ganti skrip JSON di panel kanan dengan cuplikan JSON berikut ini:
{ "name": "ADFTutorialPipelineCustom", "properties": { "description": "Use custom activity", "activities": [ { "Name": "MyDotNetActivity", "Type": "DotNetActivity", "Inputs": [ { "Name": "InputDataset" } ], "Outputs": [ { "Name": "OutputDataset" } ], "LinkedServiceName": "AzureBatchLinkedService", "typeProperties": { "AssemblyName": "MyDotNetActivity.dll", "EntryPoint": "MyDotNetActivityNS.MyDotNetActivity", "PackageLinkedService": "AzureStorageLinkedService", "PackageFile": "customactivitycontainer/MyDotNetActivity.zip", "extendedProperties": { "SliceStart": "$$Text.Format('{0:yyyyMMddHH-mm}', Time.AddMinutes(SliceStart, 0))" } }, "Policy": { "Concurrency": 2, "ExecutionPriorityOrder": "OldestFirst", "Retry": 3, "Timeout": "00:30:00", "Delay": "00:00:00" } } ], "start": "2016-11-16T00:00:00Z", "end": "2016-11-16T05:00:00Z", "isPaused": false } }Perhatikan poin berikut:
- Konkurensi diatur ke 2 sehingga dua irisan diproses secara paralel dengan 2 VM di pool Azure Batch.
- Ada satu aktivitas di bagian aktivitas dan jenisnya: DotNetActivity.
- AssemblyName ditetapkan ke nama DLL MyDotnetActivity.dll.
- EntryPoint ditetapkan ke MyDotNetActivityNS.MyDotNetActivity.
- PackageLinkedService ditetapkan ke AzureStorageLinkedService, yang menunjuk ke penyimpanan blob yang berisi file zip aktivitas kustom. Jika Anda menggunakan akun Penyimpanan Azure yang berbeda untuk file input/output dan file zip aktivitas kustom, Anda membuat layanan tertaut Microsoft Azure Storage lainnya. Artikel ini mengasumsikan bahwa Anda menggunakan akun Microsoft Azure Storage yang sama.
- PackageFile ditetapkan ke customactivitycontainer/MyDotNetActivity.zip. Dalam format: containerforthezip/nameofthezip.zip.
- Aktivitas kustom mengambil InputDataset sebagai input dan OutputDataset sebagai output.
- linkedServiceName yang ditautkan dari titik aktivitas kustom ke AzureBatchLinkedService, yang memberi tahu Azure Data Factory bahwa aktivitas kustom perlu dijalankan pada Azure Batch VMs.
- Properti isPaused disetel ke false secara default. Alur berjalan segera dalam contoh ini karena irisan dimulai di masa lalu. Anda bisa menyetel properti ini ke true untuk menjeda alur dan menyetelnya kembali ke false untuk memulai ulang.
- Waktu mulai dan waktu akhir adalah lima jam terpisah dan irisan diproduksi per jam, sehingga lima irisan diproduksi oleh alur.
Untuk menggunakan alur, klik Terapkan pada bilah perintah.
Monitor saluran pipa
Di bilah Data Factory di portal Microsoft Azure, klik Diagram.
Dalam Tampilan Diagram, sekarang klik OutputDataset.
Anda akan melihat bahwa lima irisan output berada dalam status Siap. Jika mereka tidak dalam keadaan Siap, mereka belum diproduksi.
Verifikasi bahwa file output dihasilkan dalam penyimpanan blob dalam kontainer adftutorial.

Jika Anda membuka file output, Anda akan melihat output yang mirip dengan output berikut:
2 occurrences(s) of the search term "Microsoft" were found in the file inputfolder/2016-11-16-00/file.txt.Gunakan cmdlet portal Microsoft Azure atau Azure PowerShell untuk memantau Azure Data Factory, alur, dan himpunan data Anda. Anda dapat melihat pesan dari ActivityLogger dalam kode untuk aktivitas kustom di log (khususnya pengguna-0.log) yang dapat Anda unduh dari portal atau menggunakan cmdlet.

Lihat Memantau dan Mengelola alur untuk langkah-langkah mendetail untuk memantau himpunan data dan alur.
Proyek Azure Data Factory di Visual Studio
Anda dapat membuat dan menerbitkan entitas Data Factory dengan menggunakan Visual Studio alih-alih menggunakan portal Microsoft Azure. Untuk informasi selengkapnya tentang membuat dan menerbitkan entitas Data Factory dengan menggunakan Visual Studio, Lihat Membuat alur pertama Anda menggunakan Visual Studio dan Menyalin data dari Azure Blob ke artikel Azure SQL.
Lakukan langkah-langkah tambahan berikut ini jika Anda membuat proyek Azure Data Factory di Visual Studio:
Tambahkan proyek Azure Data Factory ke solusi Visual Studio yang berisi proyek aktivitas kustom.
Tambahkan referensi ke proyek aktivitas .NET dari proyek Azure Data Factory. Klik kanan proyek Azure Data Factory, arahkan ke Tambahkan, lalu klik Referensi.
Dalam kotak dialog Tambahkan Referensi, pilih proyek MyDotNetActivity, dan klik OK.
Buat dan publikasikan solusinya.
Penting
Saat Anda menerbitkan entitas Data Factory, file zip secara otomatis dibuat untuk Anda dan diunggah ke kontainer blob: customactivitycontainer. Jika kontainer blob tidak ada, itu secara otomatis dibuat juga.
Integrasi Azure Data Factory dan Batch
Layanan Data Factory membuat pekerjaan di Azure Batch dengan nama: adf-poolname: job-xxx. Klik Pekerjaan dari menu sebelah kiri.
Sebuah tugas dibuat untuk setiap eksekusi aktivitas. Jika ada lima irisan yang siap diproses, lima tugas dibuat dalam pekerjaan ini. Jika ada beberapa node komputasi di kumpulan Batch, dua atau beberapa irisan dapat berjalan secara paralel. Jika tugas maksimum per node komputasi diatur ke > 1, Anda juga dapat menjalankan lebih dari satu potongan pada komputasi yang sama.
Diagram berikut ini mengilustrasikan hubungan antara tugas Azure Data Factory dan Batch.
Memecahkan masalah kegagalan
Pemecahan masalah terdiri dari beberapa teknik dasar:
Jika Anda melihat kesalahan berikut, Anda mungkin menggunakan penyimpanan blob Hot/Cool alih-alih menggunakan penyimpanan blob Azure tujuan umum. Unggah file zip ke Akun Microsoft Azure Storage tujuan umum.
Error in Activity: Job encountered scheduling error. Code: BlobDownloadMiscError Category: ServerError Message: Miscellaneous error encountered while downloading one of the specified Azure Blob(s).Jika Anda melihat kesalahan berikut, konfirmasikan bahwa nama kelas dalam file CS cocok dengan nama yang Anda tentukan untuk properti EntryPoint dalam alur JSON. Di penelusuran, nama kelas adalah: MyDotNetActivity, dan EntryPoint di JSON adalah: MyDotNetActivityNS. MyDotNetActivity.
MyDotNetActivity assembly does not exist or doesn't implement the type Microsoft.DataFactories.Runtime.IDotNetActivity properlyJika nama cocok, konfirmasikan bahwa semua biner berada di folder akar file zip. Artinya, ketika Anda membuka file zip, Anda akan melihat semua file di folder root, bukan di sub folder apa pun.
Jika irisan input tidak diatur ke Siap, pastikan bahwa struktur folder input sudah benar dan file.txt ada di folder input.
Dalam metode Execute dari aktivitas kustom Anda, gunakan objek IActivityLogger untuk mencatat informasi yang membantu Anda memecahkan masalah. Pesan yang dicatat muncul dalam file log pengguna (satu atau beberapa file bernama: user-0.log, user-1.log, user-2.log, dll.).
Pada blade OutputDataset, pilih irisan untuk melihat blade IRISAN DATA untuk irisan tersebut. Anda melihat aktivitas berjalan untuk irisan itu. Anda akan melihat satu aktivitas berjalan untuk irisan. Jika Anda mengklik Jalankan di bilah perintah, Anda dapat memulai aktivitas lain yang dijalankan untuk irisan yang sama.
Saat Anda mengeklik aktivitas, Anda akan melihat bilah DETAIL OPERASI AKTIVITAS dengan daftar file log. Anda melihat pesan yang dicatat dalam user_0.log ini. Ketika terjadi kesalahan, Anda akan melihat tiga aktivitas berjalan karena jumlah 'coba lagi' ditetapkan menjadi 3 di dalam alur/aktivitas JSON. Saat memilih eksekusi aktivitas, Anda akan melihat file log yang dapat Anda tinjau untuk memecahkan masalah kesalahan.
Dalam daftar file log, klik pengguna-0.log. Di panel kanan, hasil penggunaan metode IActivityLogger.Write muncul. Jika Anda tidak melihat semua pesan, periksa apakah Anda memiliki lebih banyak file log bernama: user_1.log, user_2.log dll. Jika tidak, kode mungkin telah gagal setelah pesan terakhir dicatat.
Selain itu, periksa sistem-0.log untuk setiap pesan kesalahan sistem dan pengecualian.
Sertakan file PDB dalam file zip sehingga detail kesalahan memiliki informasi seperti tumpukan panggilan ketika terjadi kesalahan.
Semua file dalam file zip untuk aktivitas kustom harus berada di tingkat atas tanpa sub folder.
Pastikan bahwa assemblyName (MyDotNetActivity.dll), entryPoint(MyDotNetActivityNS.MyDotNetActivity), packageFile (customactivitycontainer/MyDotNetActivity.zip), dan packageLinkedService (harus menunjuk ke penyimpananblob Azure tujuan umum yang berisi file zip) diatur ke nilai yang benar.
Jika Anda memperbaiki kesalahan dan ingin memproses ulang irisan, klik kanan irisan di blade OutputDataset dan pilih Run.
Jika Anda melihat kesalahan berikut ini, Anda menggunakan paket Microsoft Azure Storage versi > 4.3.0. Peluncur layanan Data Factory memerlukan WindowsAzure.Storage versi 4.3. Lihat Bagian isolasi Appdomain untuk work-around jika Anda harus menggunakan versi perakitan Microsoft Azure Storage yang lebih baru.
Error in Activity: Unknown error in module: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeLoadException: Could not load type 'Microsoft.WindowsAzure.Storage.Blob.CloudBlob' from assembly 'Microsoft.WindowsAzure.Storage, Version=4.3.0.0, Culture=neutral,Jika Anda dapat menggunakan versi 4.3.0 dari paket Microsoft Azure Storage, hapus referensi yang ada ke paket Penyimpanan Azure versi > 4.3.0. Kemudian, jalankan perintah berikut dari NuGet Package Manager Console.
Install-Package WindowsAzure.Storage -Version 4.3.0Membangun proyek. Hapus perakitan Azure.Storage versi > 4.3.0 dari folder bin\Debug. Buat file zip dengan biner dan file PDB. Ganti file zip lama dengan yang satu ini di kontainer blob (customactivitycontainer). Jalankan ulang irisan yang gagal (irisan klik kanan, dan klik Jalankan).
Aktivitas kustom tidak menggunakan file app.config dari paket Anda. Karena itu, jika kode Anda membaca string koneksi apa pun dari file konfigurasi, maka kode tersebut tidak berfungsi pada waktu proses. Praktik terbaik saat menggunakan Azure Batch adalah menyimpan rahasia apa pun di Azure KeyVault, menggunakan prinsipal layanan berbasis sertifikat untuk melindungi keyvault, dan mendistribusikan sertifikat ke kumpulan Azure Batch. Aktivitas kustom .NET dapat mengakses secrets dari KeyVault pada waktu proses. Solusi ini adalah solusi generik dan dapat menskalakan ke segala jenis rahasia, bukan hanya string koneksi.
Ada solusi yang lebih mudah (tetapi bukan praktik terbaik): Anda dapat membuat layanan tertaut Azure SQL dengan pengaturan string koneksi, membuat himpunan data yang menggunakan layanan tertaut, dan merantai himpunan data sebagai himpunan data input dummy ke aktivitas .NET kustom. Anda kemudian dapat mengakses string koneksi layanan tertaut dalam kode aktivitas kustom.
Memperbarui aktivitas kustom
Jika Anda memperbarui kode untuk aktivitas kustom, buat, dan unggah file zip yang berisi biner baru ke penyimpanan blob.
Isolasi appdomain
Lihat Sampel Cross AppDomain yang memperlihatkan kepada Anda cara membuat aktivitas kustom yang tidak dibatasi ke versi perakitan yang digunakan oleh peluncur Azure Data Factory (misalnya: WindowsAzure.Storage v4.3.0, Newtonsoft.Jsdi v6.0.x, dll.).
Menyalin properti yang diperluas
Anda dapat mendeklarasikan properti yang diperluas dalam aktivitas JSON seperti yang ditunjukkan dalam contoh berikut:
"typeProperties": {
"AssemblyName": "MyDotNetActivity.dll",
"EntryPoint": "MyDotNetActivityNS.MyDotNetActivity",
"PackageLinkedService": "AzureStorageLinkedService",
"PackageFile": "customactivitycontainer/MyDotNetActivity.zip",
"extendedProperties": {
"SliceStart": "$$Text.Format('{0:yyyyMMddHH-mm}', Time.AddMinutes(SliceStart, 0))",
"DataFactoryName": "CustomActivityFactory"
}
},
Dalam contoh, ada dua properti yang diperluas: SliceStart dan DataFactoryName. Nilai untuk SliceStart didasarkan pada variabel sistem SliceStart. Lihat Variabel Sistem untuk daftar variabel sistem yang didukung. Nilai untuk DataFactoryName dikodekan dengan keras ke CustomActivityFactory.
Untuk mengakses properti yang diperluas ini dalam metode Eksekusi, gunakan kode yang mirip dengan kode berikut:
// to get extended properties (for example: SliceStart)
DotNetActivity dotNetActivity = (DotNetActivity)activity.TypeProperties;
string sliceStartString = dotNetActivity.ExtendedProperties["SliceStart"];
// to log all extended properties
IDictionary<string, string> extendedProperties = dotNetActivity.ExtendedProperties;
logger.Write("Logging extended properties if any...");
foreach (KeyValuePair<string, string> entry in extendedProperties)
{
logger.Write("<key:{0}> <value:{1}>", entry.Key, entry.Value);
}
Penskalaan otomatis Azure Batch
Anda juga dapat membuat kumpulan Azure Batch dengan fitur autoscale. Misalnya, Anda dapat membuat kumpulan batch azure dengan 0 VM khusus dan rumus skala otomatis berdasarkan jumlah tugas yang tertunda.
Contoh rumus di sini mencapai perilaku berikut: Ketika kumpulan awalnya dibuat, itu dimulai dengan 1 VM. Metrik $PendingTasks menentukan jumlah tugas dalam status berjalan dan aktif (mengantri). Rumus menghitung jumlah rata-rata tugas yang menunggu dalam 180 detik terakhir dan menetapkan TargetDedicated yang sesuai. Ini memastikan TargetDedicated tidak pernah melampaui 25 VM. Jadi, ketika tugas baru dikirimkan, kumpulan secara otomatis tumbuh dan ketika tugas selesai, VM menjadi gratis satu per satu dan autoscaling menyusutkan VM tersebut. Anda dapat menyesuaikan startingNumberOfVMs dan maxNumberofVMs dengan kebutuhan Anda.
Rumus skala otomatis:
startingNumberOfVMs = 1;
maxNumberofVMs = 25;
pendingTaskSamplePercent = $PendingTasks.GetSamplePercent(180 * TimeInterval_Second);
pendingTaskSamples = pendingTaskSamplePercent < 70 ? startingNumberOfVMs : avg($PendingTasks.GetSample(180 * TimeInterval_Second));
$TargetDedicated=min(maxNumberofVMs,pendingTaskSamples);
Lihat Menskalakan node komputasi secara otomatis di kumpulan Azure Batch untuk detailnya.
Jika kumpulan menggunakan autoScaleEvaluationIntervaldefault, layanan Batch bisa memakan waktu 15-30 menit untuk menyiapkan VM sebelum menjalankan aktivitas kustom. Jika kumpulan menggunakan autoScaleEvaluationInterval yang berbeda, layanan Batch dapat mengambil autoScaleEvaluationInterval + 10 menit.
Membuat aktivitas kustom dengan menggunakan .NET SDK
Di penelusuran dalam artikel ini, Anda membuat Data Factory dengan alur yang menggunakan aktivitas kustom dengan menggunakan portal Microsoft Azure. Kode berikut menunjukkan kepada Anda cara membuat Data Factory dengan menggunakan .NET SDK sebagai gantinya. Anda dapat menemukan detail lebih lanjut tentang menggunakan SDK untuk membuat alur secara terprogram dalam membuat alur dengan aktivitas salin dengan menggunakan artikel .NET API.
using System;
using System.Configuration;
using System.Collections.ObjectModel;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure;
using Microsoft.Azure.Management.DataFactories;
using Microsoft.Azure.Management.DataFactories.Models;
using Microsoft.Azure.Management.DataFactories.Common.Models;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Collections.Generic;
namespace DataFactoryAPITestApp
{
class Program
{
static void Main(string[] args)
{
// create data factory management client
// TODO: replace ADFTutorialResourceGroup with the name of your resource group.
string resourceGroupName = "ADFTutorialResourceGroup";
// TODO: replace APITutorialFactory with a name that is globally unique. For example: APITutorialFactory04212017
string dataFactoryName = "APITutorialFactory";
TokenCloudCredentials aadTokenCredentials = new TokenCloudCredentials(
ConfigurationManager.AppSettings["SubscriptionId"],
GetAuthorizationHeader().Result);
Uri resourceManagerUri = new Uri(ConfigurationManager.AppSettings["ResourceManagerEndpoint"]);
DataFactoryManagementClient client = new DataFactoryManagementClient(aadTokenCredentials, resourceManagerUri);
Console.WriteLine("Creating a data factory");
client.DataFactories.CreateOrUpdate(resourceGroupName,
new DataFactoryCreateOrUpdateParameters()
{
DataFactory = new DataFactory()
{
Name = dataFactoryName,
Location = "westus",
Properties = new DataFactoryProperties()
}
}
);
// create a linked service for input data store: Azure Storage
Console.WriteLine("Creating Azure Storage linked service");
client.LinkedServices.CreateOrUpdate(resourceGroupName, dataFactoryName,
new LinkedServiceCreateOrUpdateParameters()
{
LinkedService = new LinkedService()
{
Name = "AzureStorageLinkedService",
Properties = new LinkedServiceProperties
(
// TODO: Replace <accountname> and <accountkey> with name and key of your Azure Storage account.
new AzureStorageLinkedService("DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>")
)
}
}
);
// create a linked service for output data store: Azure SQL Database
Console.WriteLine("Creating Azure Batch linked service");
client.LinkedServices.CreateOrUpdate(resourceGroupName, dataFactoryName,
new LinkedServiceCreateOrUpdateParameters()
{
LinkedService = new LinkedService()
{
Name = "AzureBatchLinkedService",
Properties = new LinkedServiceProperties
(
// TODO: replace <batchaccountname> and <yourbatchaccountkey> with name and key of your Azure Batch account
new AzureBatchLinkedService("<batchaccountname>", "https://westus.batch.azure.com", "<yourbatchaccountkey>", "myazurebatchpool", "AzureStorageLinkedService")
)
}
}
);
// create input and output datasets
Console.WriteLine("Creating input and output datasets");
string Dataset_Source = "InputDataset";
string Dataset_Destination = "OutputDataset";
Console.WriteLine("Creating input dataset of type: Azure Blob");
client.Datasets.CreateOrUpdate(resourceGroupName, dataFactoryName,
new DatasetCreateOrUpdateParameters()
{
Dataset = new Dataset()
{
Name = Dataset_Source,
Properties = new DatasetProperties()
{
LinkedServiceName = "AzureStorageLinkedService",
TypeProperties = new AzureBlobDataset()
{
FolderPath = "adftutorial/customactivityinput/",
Format = new TextFormat()
},
External = true,
Availability = new Availability()
{
Frequency = SchedulePeriod.Hour,
Interval = 1,
},
Policy = new Policy() { }
}
}
});
Console.WriteLine("Creating output dataset of type: Azure Blob");
client.Datasets.CreateOrUpdate(resourceGroupName, dataFactoryName,
new DatasetCreateOrUpdateParameters()
{
Dataset = new Dataset()
{
Name = Dataset_Destination,
Properties = new DatasetProperties()
{
LinkedServiceName = "AzureStorageLinkedService",
TypeProperties = new AzureBlobDataset()
{
FileName = "{slice}.txt",
FolderPath = "adftutorial/customactivityoutput/",
PartitionedBy = new List<Partition>()
{
new Partition()
{
Name = "slice",
Value = new DateTimePartitionValue()
{
Date = "SliceStart",
Format = "yyyy-MM-dd-HH"
}
}
}
},
Availability = new Availability()
{
Frequency = SchedulePeriod.Hour,
Interval = 1,
},
}
}
});
Console.WriteLine("Creating a custom activity pipeline");
DateTime PipelineActivePeriodStartTime = new DateTime(2017, 3, 9, 0, 0, 0, 0, DateTimeKind.Utc);
DateTime PipelineActivePeriodEndTime = PipelineActivePeriodStartTime.AddMinutes(60);
string PipelineName = "ADFTutorialPipelineCustom";
client.Pipelines.CreateOrUpdate(resourceGroupName, dataFactoryName,
new PipelineCreateOrUpdateParameters()
{
Pipeline = new Pipeline()
{
Name = PipelineName,
Properties = new PipelineProperties()
{
Description = "Use custom activity",
// Initial value for pipeline's active period. With this, you won't need to set slice status
Start = PipelineActivePeriodStartTime,
End = PipelineActivePeriodEndTime,
IsPaused = false,
Activities = new List<Activity>()
{
new Activity()
{
Name = "MyDotNetActivity",
Inputs = new List<ActivityInput>()
{
new ActivityInput() {
Name = Dataset_Source
}
},
Outputs = new List<ActivityOutput>()
{
new ActivityOutput()
{
Name = Dataset_Destination
}
},
LinkedServiceName = "AzureBatchLinkedService",
TypeProperties = new DotNetActivity()
{
AssemblyName = "MyDotNetActivity.dll",
EntryPoint = "MyDotNetActivityNS.MyDotNetActivity",
PackageLinkedService = "AzureStorageLinkedService",
PackageFile = "customactivitycontainer/MyDotNetActivity.zip",
ExtendedProperties = new Dictionary<string, string>()
{
{ "SliceStart", "$$Text.Format('{0:yyyyMMddHH-mm}', Time.AddMinutes(SliceStart, 0))"}
}
},
Policy = new ActivityPolicy()
{
Concurrency = 2,
ExecutionPriorityOrder = "OldestFirst",
Retry = 3,
Timeout = new TimeSpan(0,0,30,0),
Delay = new TimeSpan()
}
}
}
}
}
});
}
public static async Task<string> GetAuthorizationHeader()
{
AuthenticationContext context = new AuthenticationContext(ConfigurationManager.AppSettings["ActiveDirectoryEndpoint"] + ConfigurationManager.AppSettings["ActiveDirectoryTenantId"]);
ClientCredential credential = new ClientCredential(
ConfigurationManager.AppSettings["ApplicationId"],
ConfigurationManager.AppSettings["Password"]);
AuthenticationResult result = await context.AcquireTokenAsync(
resource: ConfigurationManager.AppSettings["WindowsManagementUri"],
clientCredential: credential);
if (result != null)
return result.AccessToken;
throw new InvalidOperationException("Failed to acquire token");
}
}
}
Debug aktivitas kustom di Visual Studio
Azure Data Factory - sampel lingkungan lokal di GitHub menyertakan alat yang memungkinkan Anda untuk men-debug aktivitas .NET kustom dalam Visual Studio.
Contoh aktivitas kustom di GitHub
| Sampel | Aktivitas kustom apa yang dilakukan |
|---|---|
| Pengunduh Data HTTP. | Mengunduh data dari Titik Akhir HTTP ke Azure Blob Storage menggunakan Aktivitas C# kustom di Azure Data Factory. |
| Jalankan R Script. | Panggil skrip R dengan menjalankan RScript.exe pada kluster HDInsight Anda yang sudah memiliki R Terinstal di atasnya. |
| Lintas AppDomain .NET Aktivitas | Menggunakan versi perakitan yang berbeda dari yang digunakan oleh peluncur Azure Data Factory |
| Mengolah ulang model di Azure Analysis Services | Reproduksi model di Azure Analysis Services. |