.NET uygulaması ile Azure Data Lake Analytics’i yönetme

Önemli

Azure Data Lake Analytics 29 Şubat 2024'te kullanımdan kaldırıldı. Bu duyuru ile daha fazla bilgi edinin.

Veri analizi için kuruluşunuz Azure Synapse Analytics veya Microsoft Fabric kullanabilir.

Bu makalede Azure .NET SDK kullanılarak yazılmış bir uygulama kullanılarak Azure Data Lake Analytics hesaplarının, veri kaynaklarının, kullanıcıların ve işlerin nasıl yönetileceğini açıklanmaktadır.

Önkoşullar

  • Visual Studio 2015, Visual Studio 2013 Güncelleştirme 4 veya Visual C++ Yüklü Visual Studio 2012.
  • .NET sürüm 2.5 veya üzeri için Microsoft Azure SDK. Web platformu yükleyicisini kullanarak yükleyin.
  • Gerekli NuGet Paketleri

NuGet paketlerini yükleme

Paket Sürüm
Microsoft.Rest.ClientRuntime.Azure.Authentication 2.3.1
Microsoft.Azure.Management.DataLake.Analytics 3.0.0
Microsoft.Azure.Management.DataLake.Store 2.2.0
Microsoft.Azure.Management.ResourceManager 1.6.0-önizleme
Microsoft.Azure.Graph.RBAC 3.4.0-önizleme

Aşağıdaki komutlarla NuGet komut satırı aracılığıyla bu paketleri yükleyebilirsiniz:

Install-Package -Id Microsoft.Rest.ClientRuntime.Azure.Authentication  -Version 2.3.1
Install-Package -Id Microsoft.Azure.Management.DataLake.Analytics  -Version 3.0.0
Install-Package -Id Microsoft.Azure.Management.DataLake.Store  -Version 2.2.0
Install-Package -Id Microsoft.Azure.Management.ResourceManager  -Version 1.6.0-preview
Install-Package -Id Microsoft.Azure.Graph.RBAC -Version 3.4.0-preview

Ortak değişkenler

string subid = "<Subscription ID>"; // Subscription ID (a GUID)
string tenantid = "<Tenant ID>"; // AAD tenant ID or domain. For example, "contoso.onmicrosoft.com"
string rg == "<value>"; // Resource  group name
string clientid = "abcdef01-2345-6789-0abc-def012345678"; // Sample client ID

Kimlik Doğrulaması

Azure Data Lake Analytics oturum açmak için birden çok seçeneğiniz vardır. Aşağıdaki kod parçacığında, açılır pencereyle etkileşimli kullanıcı kimlik doğrulaması ile kimlik doğrulaması örneği gösterilmektedir.

ClientID için bir kullanıcının kimliğini veya hizmet sorumlusunun Uygulama (İstemci) Kimliğini kullanabilirsiniz.

using System;
using System.IO;
using System.Threading;
using System.Security.Cryptography.X509Certificates;

using Microsoft.Rest;
using Microsoft.Rest.Azure.Authentication;
using Microsoft.Azure.Management.DataLake.Analytics;
using Microsoft.Azure.Management.DataLake.Analytics.Models;
using Microsoft.Azure.Management.DataLake.Store;
using Microsoft.Azure.Management.DataLake.Store.Models;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Azure.Graph.RBAC;

public static Program
{
   public static string TENANT = "microsoft.onmicrosoft.com";
   public static string CLIENTID = "abcdef01-2345-6789-0abc-def012345678";
   public static System.Uri ARM_TOKEN_AUDIENCE = new System.Uri( @"https://management.core.windows.net/");
   public static System.Uri ADL_TOKEN_AUDIENCE = new System.Uri( @"https://datalake.azure.net/" );
   public static System.Uri GRAPH_TOKEN_AUDIENCE = new System.Uri( @"https://graph.windows.net/" );

   static void Main(string[] args)
   {
      string MY_DOCUMENTS= System.Environment.GetFolderPath( System.Environment.SpecialFolder.MyDocuments);
      string TOKEN_CACHE_PATH = System.IO.Path.Combine(MY_DOCUMENTS, "my.tokencache");

      var tokenCache = GetTokenCache(TOKEN_CACHE_PATH);
      var armCreds = GetCreds_User_Popup(TENANT, ARM_TOKEN_AUDIENCE, CLIENTID, tokenCache);
      var adlCreds = GetCreds_User_Popup(TENANT, ADL_TOKEN_AUDIENCE, CLIENTID, tokenCache);
      var graphCreds = GetCreds_User_Popup(TENANT, GRAPH_TOKEN_AUDIENCE, CLIENTID, tokenCache);
   }
}

GetCreds_User_Popup kaynak kodu ve diğer kimlik doğrulaması seçeneklerinin kodu Data Lake Analytics .NET kimlik doğrulama seçeneklerinde ele alınmıştır

İstemci yönetim nesnelerini oluşturma

var resourceManagementClient = new ResourceManagementClient(armCreds) { SubscriptionId = subid };

var adlaAccountClient = new DataLakeAnalyticsAccountManagementClient(armCreds);
adlaAccountClient.SubscriptionId = subid;

var adlsAccountClient = new DataLakeStoreAccountManagementClient(armCreds);
adlsAccountClient.SubscriptionId = subid;

var adlaCatalogClient = new DataLakeAnalyticsCatalogManagementClient(adlCreds);
var adlaJobClient = new DataLakeAnalyticsJobManagementClient(adlCreds);

var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(adlCreds);

var  graphClient = new GraphRbacManagementClient(graphCreds);
graphClient.TenantID = domain;

Hesapları yönetme

Azure Kaynak Grubu oluşturma

Henüz oluşturmadıysanız, Data Lake Analytics bileşenlerinizi oluşturmak için bir Azure Kaynak Grubunuz olmalıdır. Kimlik doğrulama kimlik bilgilerinize, abonelik kimliğinize ve bir konuma ihtiyacınız vardır. Aşağıdaki kodda kaynak grubunun nasıl oluşturulacağı gösterilmektedir:

var resourceGroup = new ResourceGroup { Location = location };
resourceManagementClient.ResourceGroups.CreateOrUpdate(groupName, rg);

Daha fazla bilgi için bkz. Azure Kaynak Grupları ve Data Lake Analytics.

Data Lake Store hesabı oluşturma

ADLA hesabı için bir ADLS hesabı gerekir. Kullanmak istediğiniz bir tane yoksa aşağıdaki kodla bir tane oluşturabilirsiniz:

var new_adls_params = new DataLakeStoreAccount(location: _location);
adlsAccountClient.Account.Create(rg, adls, new_adls_params);

Data Lake Analytics hesabı oluşturma

Aşağıdaki kod bir ADLS hesabı oluşturur

var new_adla_params = new DataLakeAnalyticsAccount()
{
   DefaultDataLakeStoreAccount = adls,
   Location = location
};

adlaClient.Account.Create(rg, adla, new_adla_params);

Data Lake Store hesaplarını listeleme

var adlsAccounts = adlsAccountClient.Account.List().ToList();
foreach (var adls in adlsAccounts)
{
   Console.WriteLine($"ADLS: {0}", adls.Name);
}

Data Lake Analytics hesaplarını listeleme

var adlaAccounts = adlaClient.Account.List().ToList();

for (var adla in AdlaAccounts)
{
   Console.WriteLine($"ADLA: {0}, adla.Name");
}

Bir hesabın mevcut olup olmadığını denetleme

bool exists = adlaClient.Account.Exists(rg, adla));

Hesap hakkında bilgi alma

bool exists = adlaClient.Account.Exists(rg, adla));
if (exists)
{
   var adla_accnt = adlaClient.Account.Get(rg, adla);
}

Hesap silme

if (adlaClient.Account.Exists(rg, adla))
{
   adlaClient.Account.Delete(rg, adla);
}

Varsayılan Data Lake Store hesabını alma

Her Data Lake Analytics hesabı için varsayılan bir Data Lake Store hesabı gerekir. Bir Analytics hesabının varsayılan Mağaza hesabını belirlemek için bu kodu kullanın.

if (adlaClient.Account.Exists(rg, adla))
{
  var adla_accnt = adlaClient.Account.Get(rg, adla);
  string def_adls_account = adla_accnt.DefaultDataLakeStoreAccount;
}

Veri kaynaklarını yönetme

Data Lake Analytics şu anda aşağıdaki veri kaynaklarını destekler:

Azure Depolama hesaplarına bağlantılar oluşturabilirsiniz.

string storage_key = "xxxxxxxxxxxxxxxxxxxx";
string storage_account = "mystorageaccount";
var addParams = new AddStorageAccountParameters(storage_key);            
adlaClient.StorageAccounts.Add(rg, adla, storage_account, addParams);

Azure Depolama veri kaynaklarını listeleme

var stg_accounts = adlaAccountClient.StorageAccounts.ListByAccount(rg, adla);

if (stg_accounts != null)
{
  foreach (var stg_account in stg_accounts)
  {
      Console.WriteLine($"Storage account: {0}", stg_account.Name);
  }
}

Data Lake Store veri kaynaklarını listeleme

var adls_accounts = adlsClient.Account.List();

if (adls_accounts != null)
{
  foreach (var adls_accnt in adls_accounts)
  {
      Console.WriteLine($"ADLS account: {0}", adls_accnt.Name);
  }
}

Klasörleri ve dosyaları karşıya yükleme ve indirme

Data Lake Store dosya sistemi istemci yönetim nesnesini kullanarak aşağıdaki yöntemleri kullanarak Azure'dan yerel bilgisayarınıza tek tek dosyaları veya klasörleri karşıya yükleyebilir ve indirebilirsiniz:

  • UploadFolder
  • Uploadfile
  • İndirKlasör
  • Downloadfile

Bu yöntemlerin ilk parametresi Data Lake Store Hesabının adı ve ardından kaynak yol ve hedef yol için parametrelerdir.

Aşağıdaki örnekte Data Lake Store'da klasör indirme işlemi gösterilmektedir.

adlsFileSystemClient.FileSystem.DownloadFolder(adls, sourcePath, destinationPath);

Data Lake Store hesabında dosya oluşturma

using (var memstream = new MemoryStream())
{
   using (var sw = new StreamWriter(memstream, UTF8Encoding.UTF8))
   {
      sw.WriteLine("Hello World");
      sw.Flush();
      
      memstream.Position = 0;

      adlsFileSystemClient.FileSystem.Create(adls, "/Samples/Output/randombytes.csv", memstream);
   }
}

Azure Depolama hesabı yollarını doğrulama

Aşağıdaki kod, Data Lake Analytics hesabında (analyticsAccountName) bir Azure Depolama hesabının (storageAccntName) mevcut olup olmadığını ve Azure Depolama hesabında bir kapsayıcı (containerName) olup olmadığını denetler.

string storage_account = "mystorageaccount";
string storage_container = "mycontainer";
bool accountExists = adlaClient.Account.StorageAccountExists(rg, adla, storage_account));
bool containerExists = adlaClient.Account.StorageContainerExists(rg, adla, storage_account, storage_container));

Kataloğu ve işleri yönetme

DataLakeAnalyticsCatalogManagementClient nesnesi, her Azure Data Lake Analytics hesabı için sağlanan SQL veritabanını yönetmek için yöntemler sağlar. DataLakeAnalyticsJobManagementClient, U-SQL betikleriyle veritabanında çalıştırılacak işleri göndermek ve yönetmek için yöntemler sağlar.

Veritabanlarını ve şemaları listeleme

Listeleyebileceğiniz birkaç şey arasında en yaygın olanları veritabanları ve şemalarıdır. Aşağıdaki kod bir veritabanı koleksiyonu alır ve her veritabanı için şemayı numaralandırır.

var databases = adlaCatalogClient.Catalog.ListDatabases(adla);
foreach (var db in databases)
{
  Console.WriteLine($"Database: {db.Name}");
  Console.WriteLine(" - Schemas:");
  var schemas = adlaCatalogClient.Catalog.ListSchemas(adla, db.Name);
  foreach (var schm in schemas)
  {
      Console.WriteLine($"\t{schm.Name}");
  }
}

Tablo sütunlarını listeleme

Aşağıdaki kod, belirtilen tablodaki sütunları listelemek için bir Data Lake Analytics Kataloğu yönetim istemcisiyle veritabanına nasıl erişeceklerini gösterir.

var tbl = adlaCatalogClient.Catalog.GetTable(adla, "master", "dbo", "MyTableName");
IEnumerable<USqlTableColumn> columns = tbl.ColumnList;

foreach (USqlTableColumn utc in columns)
{
  Console.WriteLine($"\t{utc.Name}");
}

U-SQL işi gönderme

Aşağıdaki kod, bir iş göndermek için Data Lake Analytics İş yönetimi istemcisinin nasıl kullanılacağını gösterir.

string scriptPath = "/Samples/Scripts/SearchResults_Wikipedia_Script.txt";
Stream scriptStrm = adlsFileSystemClient.FileSystem.Open(_adlsAccountName, scriptPath);
string scriptTxt = string.Empty;
using (StreamReader sr = new StreamReader(scriptStrm))
{
    scriptTxt = sr.ReadToEnd();
}

var jobName = "SR_Wikipedia";
var jobId = Guid.NewGuid();
var properties = new USqlJobProperties(scriptTxt);
var parameters = new JobInformation(jobName, JobType.USql, properties, priority: 1, degreeOfParallelism: 1, jobId: jobId);
var jobInfo = adlaJobClient.Job.Create(adla, jobId, parameters);
Console.WriteLine($"Job {jobName} submitted.");

Başarısız işleri listeleme

Aşağıdaki kod, başarısız olan işler hakkındaki bilgileri listeler.

var odq = new ODataQuery<JobInformation> { Filter = "result eq 'Failed'" };
var jobs = adlaJobClient.Job.List(adla, odq);
foreach (var j in jobs)
{
   Console.WriteLine($"{j.Name}\t{j.JobId}\t{j.Type}\t{j.StartTime}\t{j.EndTime}");
}

İşlem hatlarını listeleme

Aşağıdaki kod, hesaba gönderilen her iş işlem hattıyla ilgili bilgileri listeler.

var pipelines = adlaJobClient.Pipeline.List(adla);
foreach (var p in pipelines)
{
   Console.WriteLine($"Pipeline: {p.Name}\t{p.PipelineId}\t{p.LastSubmitTime}");
}

Yinelenmeleri listeleme

Aşağıdaki kod, hesaba gönderilen işlerin her yinelenme sayısıyla ilgili bilgileri listeler.

var recurrences = adlaJobClient.Recurrence.List(adla);
foreach (var r in recurrences)
{
   Console.WriteLine($"Recurrence: {r.Name}\t{r.RecurrenceId}\t{r.LastSubmitTime}");
}

Yaygın grafik senaryoları

Microsoft Entra ID dizininde kullanıcı arama

var userinfo = graphClient.Users.Get( "bill@contoso.com" );

Microsoft Entra ID dizinindeki bir kullanıcının ObjectId değerini alma

var userinfo = graphClient.Users.Get( "bill@contoso.com" );
Console.WriteLine( userinfo.ObjectId )

İşlem ilkelerini yönetme

DataLakeAnalyticsAccountManagementClient nesnesi, bir Data Lake Analytics hesabı için işlem ilkelerini yönetmek için yöntemler sağlar.

İşlem ilkelerini listeleme

Aşağıdaki kod, Data Lake Analytics hesabı için işlem ilkelerinin listesini alır.

var policies = adlaAccountClient.ComputePolicies.ListByAccount(rg, adla);
foreach (var p in policies)
{
   Console.WriteLine($"Name: {p.Name}\tType: {p.ObjectType}\tMax AUs / job: {p.MaxDegreeOfParallelismPerJob}\tMin priority / job: {p.MinPriorityPerJob}");
}

Yeni işlem ilkesi oluşturma

Aşağıdaki kod, bir Data Lake Analytics hesabı için yeni bir işlem ilkesi oluşturur ve belirtilen kullanıcının kullanabileceği en yüksek AU sayısını 50 ve minimum iş önceliğini 250 olarak ayarlar.

var userAadObjectId = "3b097601-4912-4d41-b9d2-78672fc2acde";
var newPolicyParams = new ComputePolicyCreateOrUpdateParameters(userAadObjectId, "User", 50, 250);
adlaAccountClient.ComputePolicies.CreateOrUpdate(rg, adla, "GaryMcDaniel", newPolicyParams);

Sonraki adımlar