Hantera Azure Data Lake Analytics med en .NET-app

Den här artikeln beskriver hur du hanterar Azure Data Lake Analytics-konton, data källor, användare och jobb med hjälp av en app som skrivits med hjälp av Azure .NET SDK.

Förutsättningar

  • Visual Studio 2015, Visual Studio 2013 uppdatering 4 eller Visual Studio 2012 med Visual C++ installerat.
  • Microsoft Azure SDK för .NET version 2.5 eller högre. Installera den med hjälp av installationsprogrammet för webbplattformen.
  • Nödvändiga NuGet-paket

Installera NuGet-paket

Paket Version
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 – för hands version
Microsoft.Azure.Graph.RBAC 3.4.0 – för hands version

Du kan installera dessa paket via NuGet-kommando raden med följande kommandon:

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

Vanliga variabler

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 = "1950a258-227b-4e31-a9cf-717495945fc2"; // Sample client ID (this will work, but you should pick your own)

Autentisering

Du har flera alternativ för att logga in på Azure Data Lake Analytics. I följande kodfragment visas ett exempel på autentisering med interaktiv användarautentisering med ett popup-fönster.

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 = "1950a258-227b-4e31-a9cf-717495945fc2";
   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);
   }
}

Käll koden för GetCreds_User_Popup och koden för andra alternativ för autentisering beskrivs i data Lake Analytics .net-autentiseringsalternativ

Skapa klient hanterings objekt

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;

Hantera konton

Skapa en Azure-resursgrupp

Om du inte redan har skapat en måste du ha en Azure-resurs grupp för att skapa Data Lake Analytics-komponenter. Du behöver dina autentiseringsuppgifter för autentisering, prenumerations-ID och en plats. Följande kod visar hur du skapar en resurs grupp:

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

Mer information finns i Azure-resurs grupper och Data Lake Analytics.

Skapa ett Data Lake Store-konto

Någonsin ADLA-kontot kräver ett ADLS-konto. Om du inte redan har en att använda kan du skapa en med följande kod:

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

Skapa ett Data Lake Analytics-konto

Följande kod skapar ett ADLS-konto

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

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

Lista Data Lake Store konton

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

Lista Data Lake Analytics konton

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

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

Kontrollerar om ett konto finns

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

Hämta information om ett konto

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

Ta bort ett konto

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

Hämta standard Data Lake Stores kontot

För alla Data Lake Analytics-konton krävs ett standard Data Lake Store-konto. Använd den här koden för att fastställa standard lagrings kontot för ett analys konto.

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

Hantera datakällor

Data Lake Analytics stöder för närvarande följande data Källor:

Du kan skapa länkar till Azure Storage-konton.

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

Visa Azure Storage data källor

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

Visa Data Lake Store data källor

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

Ladda upp och hämta mappar och filer

Du kan använda klient hanterings objekt för Data Lake Store-filsystem för att överföra och hämta enskilda filer eller mappar från Azure till din lokala dator med hjälp av följande metoder:

  • UploadFolder
  • UploadFile
  • DownloadFolder
  • DownloadFile

Den första parametern för dessa metoder är namnet på Data Lake Store kontot, följt av parametrar för käll Sök vägen och mål Sök vägen.

I följande exempel visas hur du hämtar en mapp i Data Lake Store.

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

Skapa en fil i ett Data Lake Store konto

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

Verifiera Azure Storage konto Sök vägar

Följande kod kontrollerar om ett Azure Storage konto (storageAccntName) finns i ett Data Lake Analytics konto (analyticsAccountName) och om en behållare (containerName) finns i Azure Storage-kontot.

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

Hantera katalog och jobb

DataLakeAnalyticsCatalogManagementClient-objektet innehåller metoder för att hantera den SQL-databas som har angetts för varje Azure Data Lake Analytics konto. DataLakeAnalyticsJobManagementClient innehåller metoder för att skicka och hantera jobb som körs på databasen med U-SQL-skript.

Visa lista över databaser och scheman

Bland de många saker som du kan lista, är de vanligaste databaserna och deras schema. Följande kod hämtar en samling databaser och räknar upp schemat för varje databas.

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

List tabell kolumner

Följande kod visar hur du kommer åt databasen med en Data Lake Analytics katalog hanterings klient för att Visa kolumnerna i en angiven tabell.

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

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

Skicka ett U-SQL-jobb

Följande kod visar hur du använder en Data Lake Analytics jobb hanterings klient för att skicka ett jobb.

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

Visa lista över misslyckade jobb

Följande kod visar information om misslyckade jobb.

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

Lista pipelines

Följande kod visar information om varje pipeline för jobb som skickas till kontot.

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

Lista upprepningar

Följande kod visar information om varje upprepning av jobb som skickats till kontot.

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

Vanliga diagram scenarier

Leta upp användare i AAD-katalogen

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

Hämta ObjectId för en användare i AAD-katalogen

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

Hantera beräknings principer

DataLakeAnalyticsAccountManagementClient-objektet innehåller metoder för att hantera beräknings principerna för ett Data Lake Analytics-konto.

Lista med beräknings principer

Följande kod hämtar en lista med beräknings principer för ett Data Lake Analytics-konto.

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

Skapa en ny beräknings princip

Följande kod skapar en ny beräknings princip för ett Data Lake Analytics konto, ställer in den maximala mappen som är tillgänglig för den angivna användaren till 50 och minsta jobb prioritet till 250.

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

Nästa steg