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:
Länka till ett Azure Storage konto
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);