Share via


Azure Data Lake Analytics beheren met behulp van een .NET-app

Belangrijk

Azure Data Lake Analytics op 29 februari 2024 buiten gebruik gesteld. Meer informatie over deze aankondiging.

Voor gegevensanalyse kan uw organisatie gebruikmaken van Azure Synapse Analytics of Microsoft Fabric.

In dit artikel wordt beschreven hoe u Azure Data Lake Analytics-accounts, gegevensbronnen, gebruikers en taken beheert met behulp van een app die is geschreven met de Azure .NET SDK.

Vereisten

  • Visual Studio 2015, Visual Studio 2013 update 4 of Visual Studio 2012 met Visual C++ geïnstalleerd.
  • Microsoft Azure SDK voor .NET versie 2.5 of hoger. U kunt dit installeren met het Webplatforminstallatieprogramma.
  • Vereiste NuGet-pakketten

NuGet-pakketten installeren

Pakket Versie
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

U kunt deze pakketten installeren via de NuGet-opdrachtregel met de volgende opdrachten:

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

Algemene variabelen

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

Verificatie

U hebt meerdere opties om u aan te melden bij Azure Data Lake Analytics. In het volgende fragment ziet u een voorbeeld van verificatie met interactieve gebruikersverificatie met een pop-up.

Voor ClientID kunt u de id van een gebruiker of de toepassings-id (client) van een service-principal gebruiken.

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

De broncode voor GetCreds_User_Popup en de code voor andere opties voor verificatie worden behandeld in Data Lake Analytics .NET-verificatieopties

De clientbeheerobjecten maken

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;

Accounts beheren

Een Azure-resourcegroep maken

Als u er nog geen hebt gemaakt, moet u een Azure-resourcegroep hebben om uw Data Lake Analytics-onderdelen te maken. U hebt uw verificatiereferenties, abonnements-id en een locatie nodig. De volgende code laat zien hoe u een resourcegroep maakt:

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

Zie Azure-resourcegroepen en Data Lake Analytics voor meer informatie.

Een Data Lake Store-account maken

Voor een ADLA-account is altijd een ADLS-account vereist. Als u er nog geen hebt om er een te gebruiken, kunt u er een maken met de volgende code:

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

Een Data Lake Analytics-account maken

Met de volgende code wordt een ADLS-account gemaakt

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

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

Data Lake Store-accounts weergeven

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

Data Lake Analytics-accounts weergeven

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

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

Controleren of er een account bestaat

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

Informatie over een account ophalen

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

Een account verwijderen

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

Het data lake store-standaardaccount ophalen

Voor elk Data Lake Analytics-account is een data lake store-standaardaccount vereist. Gebruik deze code om het standaard Store-account voor een Analytics-account te bepalen.

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

Gegevensbronnen beheren

Data Lake Analytics ondersteunt momenteel de volgende gegevensbronnen:

U kunt koppelingen maken naar Azure Storage-accounts.

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

Azure Storage-gegevensbronnen weergeven

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-gegevensbronnen weergeven

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

Mappen en bestanden uploaden en downloaden

U kunt het clientbeheerobject van het Data Lake Store-bestandssysteem gebruiken om afzonderlijke bestanden of mappen van Azure te uploaden en te downloaden naar uw lokale computer, met behulp van de volgende methoden:

  • UploadFolder
  • UploadFile
  • DownloadMap
  • DownloadBestand

De eerste parameter voor deze methoden is de naam van het Data Lake Store-account, gevolgd door parameters voor het bronpad en het doelpad.

In het volgende voorbeeld ziet u hoe u een map downloadt in de Data Lake Store.

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

Een bestand maken in een Data Lake Store-account

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

Paden voor Azure Storage-accounts controleren

Met de volgende code wordt gecontroleerd of er een Azure Storage-account (storageAccntName) bestaat in een Data Lake Analytics-account (analyticsAccountName) en of er een container (containerName) bestaat in het Azure Storage-account.

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

Catalogus en taken beheren

Het object DataLakeAnalyticsCatalogManagementClient biedt methoden voor het beheren van de SQL-database die voor elk Azure Data Lake Analytics-account is opgegeven. De DataLakeAnalyticsJobManagementClient biedt methoden voor het verzenden en beheren van taken die worden uitgevoerd op de database met U-SQL-scripts.

Databases en schema's weergeven

Onder de verschillende dingen die u kunt vermelden, zijn de meest voorkomende databases en hun schema. Met de volgende code wordt een verzameling databases verkregen en wordt vervolgens het schema voor elke database opgesomd.

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

Tabelkolommen weergeven

De volgende code laat zien hoe u toegang hebt tot de database met een Data Lake Analytics Catalogusbeheerclient om de kolommen in een opgegeven tabel weer te geven.

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

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

Een U-SQL-taak verzenden

De volgende code laat zien hoe u een Data Lake Analytics Taakbeheerclient gebruikt om een taak te verzenden.

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

Lijst met mislukte taken

De volgende code bevat informatie over taken die zijn mislukt.

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

Pijplijnen weergeven

De volgende code bevat informatie over elke pijplijn van taken die naar het account worden verzonden.

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

Terugkeerpatronen weergeven

De volgende code bevat informatie over elk terugkeerpatroon van taken die naar het account worden verzonden.

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

Veelvoorkomende grafiekscenario's

Gebruiker opzoeken in de map Microsoft Entra ID

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

De ObjectId van een gebruiker ophalen in de map Microsoft Entra ID

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

Rekenbeleid beheren

Het object DataLakeAnalyticsAccountManagementClient biedt methoden voor het beheren van het rekenbeleid voor een Data Lake Analytics-account.

Rekenbeleid weergeven

Met de volgende code wordt een lijst met rekenbeleidsregels voor een Data Lake Analytics-account opgehaald.

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

Een nieuw rekenbeleid maken

Met de volgende code maakt u een nieuw rekenbeleid voor een Data Lake Analytics-account, waarbij het maximum aantal BESCHIKBARE EENHEDEN voor de opgegeven gebruiker wordt ingesteld op 50 en de minimale taakprioriteit op 250.

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

Volgende stappen