Поделиться через


Управление Azure Data Lake Analytics приложением .NET

Это важно

Azure Data Lake Analytics вышел из эксплуатации 29 февраля 2024 года. Дополнительные сведения см. в этом объявлении.

Для аналитики данных ваша организация может использовать Azure Synapse Analytics или Microsoft Fabric.

В этой статье описывается управление учетными записями Azure Data Lake Analytics, источниками данных, пользователями и заданиями с помощью приложения, написанного с помощью пакета SDK для Azure .NET.

Предпосылки

  • Visual Studio 2015, Visual Studio 2013 с обновлением 4 или Visual Studio 2012 с установленным Visual C++.
  • Пакет SDK Microsoft Azure для .NET версии 2.5 или более поздней. Установите его с помощью установщика веб-платформы.
  • Обязательные пакеты NuGet

Установка пакетов Nuget

Пакет Версия
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

Эти пакеты можно установить с помощью командной строки NuGet с помощью следующих команд:

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

Общие переменные

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

Аутентификация

У вас есть несколько вариантов входа в Azure Data Lake Analytics. В следующем фрагменте кода показан пример проверки подлинности с интерактивной проверкой подлинности пользователей с помощью всплывающего окна.

Для ClientID можно использовать идентификатор пользователя или идентификатор приложения (клиента) субъекта-службы.

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 и код для других вариантов проверки подлинности рассматриваются в параметрах проверки подлинности Data Lake Analytics .NET.

Создание объектов управления клиентами

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;

Управление учетными записями

Создание группы ресурсов Azure

Если вы еще не создали его, необходимо создать группу ресурсов Azure для создания компонентов Data Lake Analytics. Вам нужны данные для аутентификации, идентификатор подписки и местоположение. В следующем коде показано, как создать группу ресурсов:

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

Дополнительные сведения см. в разделе "Группы ресурсов Azure" и "Аналитика озера данных".

Создание учетной записи Data Lake Store

Для учетной записи ADLA требуется учетная запись ADLS. Если у вас еще нет одного, его можно создать с помощью следующего кода:

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

Создание учетной записи Data Lake Analytics

Следующий код создает учетную запись ADLS

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

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

Список учетных записей Data Lake Store

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

Перечень учетных записей Data Lake Analytics

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

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

Проверка наличия учетной записи

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

Получение сведений об учетной записи

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

Удаление учетной записи

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

Получение учетной записи Data Lake Store по умолчанию

Для каждой учетной записи Data Lake Analytics требуется учетная запись Data Lake Store по умолчанию. Используйте этот код для определения учетной записи магазина по умолчанию для учетной записи аналитики.

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

Управление источниками данных

Data Lake Analytics в настоящее время поддерживает следующие источники данных:

Вы можете создавать ссылки на учетные записи хранения Azure.

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

Перечисление источников данных службы хранилища Azure

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

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

Отправка и скачивание папок и файлов

Объект управления клиентом файловой системы Data Lake Store можно использовать для отправки и скачивания отдельных файлов или папок из Azure на локальный компьютер с помощью следующих методов:

  • Папка для загрузки
  • Загрузить файл
  • Папка загрузок
  • Загрузить файл

Первым параметром этих методов является имя учетной записи Data Lake Store, а затем параметры исходного пути и пути назначения.

В следующем примере показано, как скачать папку в Data Lake Store.

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

Создание файла в учетной записи 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);
   }
}

Проверьте пути учетной записи Azure Storage

Следующий код проверяет, существует ли учетная запись хранения Azure (storageAccntName) в учетной записи Data Lake Analytics (analyticsAccountName) и существует ли контейнер (containerName) в учетной записи хранения Azure.

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

Управление каталогом и заданиями

Объект DataLakeAnalyticsCatalogManagementClient предоставляет методы управления базой данных SQL, предоставленной для каждой учетной записи Azure Data Lake Analytics. DataLakeAnalyticsJobManagementClient предоставляет методы для отправки заданий и управления ими, выполняемых в базе данных с помощью скриптов U-SQL.

Список баз данных и схем

Среди нескольких вещей, которые можно перечислить, наиболее распространенными являются базы данных и их схема. Следующий код получает коллекцию баз данных, а затем перечисляет схему для каждой базы данных.

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

Перечислить столбцы таблицы

В следующем коде показано, как получить доступ к базе данных с помощью клиента управления каталогом Data Lake Analytics для перечисления столбцов в указанной таблице.

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

В следующем коде показано, как использовать клиент управления заданиями 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.");

Перечислить неудачные задания

В следующем коде перечислены сведения о заданиях, которые не удалось выполнить.

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

Список конвейеров

Следующий код содержит сведения о каждом конвейере заданий, отправленных в учетную запись.

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

Список повторений

В следующем коде перечислены сведения о каждом повторении заданий, отправленных в учетную запись.

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

Распространенные сценарии графа

Поиск пользователя в каталоге Microsoft Entra ID

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

Получите ObjectId пользователя в каталоге Microsoft Entra ID.

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

Управление политиками вычислений

Объект DataLakeAnalyticsAccountManagementClient предоставляет методы управления политиками вычислений для учетной записи Data Lake Analytics.

Список политик вычислений

Следующий код извлекает список политик вычислений для учетной записи 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}");
}

Создание новой политики вычислений

Следующий код создает новую политику вычислений для учетной записи Data Lake Analytics, задав максимальное число единиц AUS, доступных указанному пользователю, значение 50, а минимальный приоритет задания — 250.

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

Дальнейшие действия