Управление 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
Вы можете создавать ссылки на учетные записи хранения 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);