Zarządzanie usługą Azure Data Lake Analytics za pomocą aplikacji platformy .NET

Ważne

Usługa Azure Data Lake Analytics została wycofana 29 lutego 2024 r. Dowiedz się więcej z tym ogłoszeniem.

W przypadku analizy danych organizacja może używać Azure Synapse Analytics lub Microsoft Fabric.

W tym artykule opisano sposób zarządzania kontami usługi Azure Data Lake Analytics, źródłami danych, użytkownikami i zadaniami przy użyciu aplikacji napisanej przy użyciu zestawu AZURE .NET SDK.

Wymagania wstępne

  • Zainstalowany program Visual Studio 2015, Visual Studio 2013 Update 4 lub Visual Studio 2012 z językiem Visual C++.
  • Zestaw Microsoft Azure SDK dla programu .NET w wersji 2.5 lub nowszej. Można go zainstalować przy użyciu Instalatora platformy sieci Web.
  • Wymagane pakiety NuGet

Instalowanie pakietów NuGet

Pakiet Wersja
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-preview
Microsoft.Azure.Graph.RBAC 3.4.0-preview

Te pakiety można zainstalować za pomocą wiersza polecenia NuGet za pomocą następujących poleceń:

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

Typowe zmienne

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

Authentication

Istnieje wiele opcji logowania do usługi Azure Data Lake Analytics. Poniższy fragment kodu przedstawia przykład uwierzytelniania z interaktywnym uwierzytelnianiem użytkownika z wyskakującym okienkiem.

W polu ClientID można użyć identyfikatora użytkownika lub identyfikatora aplikacji (klienta) jednostki usługi.

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

Kod źródłowy GetCreds_User_Popup i kod innych opcji uwierzytelniania są omówione w opcjach uwierzytelniania Data Lake Analytics .NET

Tworzenie obiektów zarządzania klientami

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;

Zarządzanie kontami

Tworzenie grupy zasobów platformy Azure

Jeśli jeszcze go nie utworzono, musisz mieć grupę zasobów platformy Azure, aby utworzyć składniki Data Lake Analytics. Potrzebujesz poświadczeń uwierzytelniania, identyfikatora subskrypcji i lokalizacji. Poniższy kod pokazuje, jak utworzyć grupę zasobów:

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

Aby uzyskać więcej informacji, zobacz Grupy zasobów platformy Azure i Data Lake Analytics.

Tworzenie konta usługi Data Lake Store

Konto usługi ADLA w historii wymaga konta usługi ADLS. Jeśli nie masz jeszcze jednego do użycia, możesz go utworzyć przy użyciu następującego kodu:

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

Tworzenie konta Data Lake Analytics

Poniższy kod tworzy konto usługi ADLS

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

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

Wyświetlanie listy kont usługi Data Lake Store

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

Wyświetlanie listy kont Data Lake Analytics

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

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

Sprawdzanie, czy konto istnieje

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

Uzyskiwanie informacji o koncie

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

Usuwanie konta

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

Pobieranie domyślnego konta usługi Data Lake Store

Każde konto Data Lake Analytics wymaga domyślnego konta usługi Data Lake Store. Użyj tego kodu, aby określić domyślne konto sklepu dla konta usługi Analytics.

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

Zarządzanie źródłami danych

Data Lake Analytics obecnie obsługuje następujące źródła danych:

Możesz tworzyć linki do kont usługi Azure Storage.

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

Wyświetlanie listy źródeł danych usługi Azure Storage

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

Wyświetlanie listy źródeł danych usługi Data Lake Store

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

Przekazywanie i pobieranie folderów i plików

Za pomocą obiektu zarządzania klientami systemu plików usługi Data Lake Store można przekazywać i pobierać poszczególne pliki lub foldery z platformy Azure do komputera lokalnego przy użyciu następujących metod:

  • UploadFolder
  • Uploadfile
  • Pobierzfolder
  • Downloadfile

Pierwszym parametrem dla tych metod jest nazwa konta usługi Data Lake Store, po którym następują parametry ścieżki źródłowej i ścieżki docelowej.

W poniższym przykładzie pokazano, jak pobrać folder w usłudze Data Lake Store.

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

Tworzenie pliku na koncie usługi Data Lake Store

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

Weryfikowanie ścieżek konta usługi Azure Storage

Poniższy kod sprawdza, czy konto usługi Azure Storage (storageAccntName) istnieje na koncie Data Lake Analytics (analyticsAccountName), a jeśli kontener (containerName) istnieje na koncie usługi Azure Storage.

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

Zarządzanie katalogiem i zadaniami

Obiekt DataLakeAnalyticsCatalogManagementClient udostępnia metody zarządzania bazą danych SQL świadczoną dla każdego konta usługi Azure Data Lake Analytics. Obiekt DataLakeAnalyticsJobManagementClient udostępnia metody przesyłania zadań uruchamianych w bazie danych i zarządzania nimi za pomocą skryptów U-SQL.

Wyświetlanie listy baz danych i schematów

Wśród kilku elementów, które można wyświetlić, najczęściej są to bazy danych i ich schemat. Poniższy kod uzyskuje kolekcję baz danych, a następnie wylicza schemat dla każdej bazy danych.

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

Wyświetlanie listy kolumn tabeli

Poniższy kod pokazuje, jak uzyskać dostęp do bazy danych za pomocą klienta zarządzania katalogiem Data Lake Analytics, aby wyświetlić listę kolumn w określonej tabeli.

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

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

Przesyłanie zadania U-SQL

Poniższy kod pokazuje, jak przesłać zadanie przy użyciu klienta zarządzania zadaniami Data Lake Analytics.

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.");

Wyświetlanie listy zadań, które zakończyły się niepowodzeniem

Poniższy kod zawiera listę informacji o zadaniach, które zakończyły się niepowodzeniem.

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

Wyświetlanie listy potoków

Poniższy kod zawiera listę informacji o każdym potoku zadań przesłanych do konta.

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

Wyświetlanie listy cykli

Poniższy kod zawiera informacje o każdym cyklu zadań przesłanych do konta.

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

Typowe scenariusze grafu

Wyszukiwanie użytkownika w katalogu Tożsamość Microsoft Entra

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

Pobieranie identyfikatora ObjectId użytkownika w katalogu Tożsamość Microsoft Entra

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

Zarządzanie zasadami obliczeniowymi

Obiekt DataLakeAnalyticsAccountManagementClient udostępnia metody zarządzania zasadami obliczeniowymi dla konta Data Lake Analytics.

Wyświetlanie listy zasad obliczeniowych

Poniższy kod pobiera listę zasad obliczeniowych dla konta Data Lake Analytics.

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

Tworzenie nowych zasad obliczeniowych

Poniższy kod tworzy nowe zasady obliczeniowe dla konta Data Lake Analytics, ustawiając maksymalną liczbę jednostek AU dostępnych dla określonego użytkownika na 50, a minimalny priorytet zadania na 250.

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

Następne kroki