.NET uygulaması ile Azure Data Lake Analytics’i yönetme
Bu makalede, Azure .NET SDK kullanılarak yazılmış bir uygulamayı kullanarak Azure Data Lake Analytics hesaplarının, veri kaynaklarının, kullanıcıların ve işlerin nasıl yönetileceği açıklanmaktadır.
Önkoşullar
- Visual Studio 2015, Visual Studio 2013 Güncelleştirme 4 veya Visual C++ Yüklü Visual Studio 2012.
- .NET sürüm 2.5 veya üzeri için Microsoft Azure SDK. Web platformu yükleyicisini kullanarak yükleyin.
- Gerekli NuGet paketleri
NuGet paketlerini yükleme
| Paket | Sürüm |
|---|---|
| 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-Önizleme |
| Microsoft.Azure.Graph.RBAC | 3.4.0-Önizleme |
Aşağıdaki komutlarla NuGet komut satırı aracılığıyla bu paketleri yükleyebilirsiniz:
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
Ortak değişkenler
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)
Kimlik Doğrulaması
Azure Data Lake Analytics oturum açma için birden çok seçeneğiniz vardır. Aşağıdaki kod parçacığında bir açılır pencere ile etkileşimli kullanıcı kimlik doğrulaması ile bir kimlik doğrulaması örneği gösterilmektedir.
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);
}
}
GetCreds_User_Popup için kaynak kodu ve kimlik doğrulama için diğer seçeneklere yönelik kod, Data Lake Analytics .NET kimlik doğrulama seçeneklerinde kapsanır
İstemci yönetimi nesneleri oluşturma
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;
Hesapları yönetme
Azure Kaynak Grubu oluşturma
Henüz bir tane oluşturmadıysanız, Data Lake Analytics bileşenlerinizi oluşturmak için bir Azure Kaynak grubunuz olması gerekir. Kimlik doğrulama kimlik bilgileriniz, abonelik KIMLIĞINIZ ve bir konum gereklidir. Aşağıdaki kod, bir kaynak grubu oluşturmayı göstermektedir:
var resourceGroup = new ResourceGroup { Location = location };
resourceManagementClient.ResourceGroups.CreateOrUpdate(groupName, rg);
Daha fazla bilgi için bkz. Azure Kaynak grupları ve Data Lake Analytics.
Data Lake Store hesabı oluşturma
Ever ADLA hesabının bir ADLS hesabı olması gerekir. Henüz bir tane kullanmak istemiyorsanız, aşağıdaki kodla bir tane oluşturabilirsiniz:
var new_adls_params = new DataLakeStoreAccount(location: _location);
adlsAccountClient.Account.Create(rg, adls, new_adls_params);
Data Lake Analytics hesabı oluşturma
Aşağıdaki kod bir ADLS hesabı oluşturur
var new_adla_params = new DataLakeAnalyticsAccount()
{
DefaultDataLakeStoreAccount = adls,
Location = location
};
adlaClient.Account.Create(rg, adla, new_adla_params);
Data Lake Store hesaplarını listeleme
var adlsAccounts = adlsAccountClient.Account.List().ToList();
foreach (var adls in adlsAccounts)
{
Console.WriteLine($"ADLS: {0}", adls.Name);
}
Data Lake Analytics hesaplarını listeleme
var adlaAccounts = adlaClient.Account.List().ToList();
for (var adla in AdlaAccounts)
{
Console.WriteLine($"ADLA: {0}, adla.Name");
}
Bir hesabın var olup olmadığı denetleniyor
bool exists = adlaClient.Account.Exists(rg, adla));
Hesap hakkında bilgi alın
bool exists = adlaClient.Account.Exists(rg, adla));
if (exists)
{
var adla_accnt = adlaClient.Account.Get(rg, adla);
}
Hesap silme
if (adlaClient.Account.Exists(rg, adla))
{
adlaClient.Account.Delete(rg, adla);
}
Varsayılan Data Lake Store hesabını al
Her Data Lake Analytics hesabının varsayılan bir Data Lake Store hesabı olması gerekir. Bir analiz hesabının varsayılan depolama hesabını öğrenmek için bu kodu kullanın.
if (adlaClient.Account.Exists(rg, adla))
{
var adla_accnt = adlaClient.Account.Get(rg, adla);
string def_adls_account = adla_accnt.DefaultDataLakeStoreAccount;
}
Veri kaynaklarını yönetme
Data Lake Analytics Şu anda aşağıdaki veri kaynaklarını desteklemektedir:
Azure depolama hesabına bağlantı
Azure depolama hesaplarına bağlantılar oluşturabilirsiniz.
string storage_key = "xxxxxxxxxxxxxxxxxxxx";
string storage_account = "mystorageaccount";
var addParams = new AddStorageAccountParameters(storage_key);
adlaClient.StorageAccounts.Add(rg, adla, storage_account, addParams);
Azure depolama veri kaynaklarını listeleme
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 veri kaynaklarını listeleme
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);
}
}
Klasörleri ve dosyaları karşıya yükleme ve indirme
Aşağıdaki yöntemleri kullanarak, tek tek dosyaları veya klasörleri Azure 'dan yerel bilgisayarınıza yüklemek ve indirmek için Data Lake Store dosya sistemi istemci yönetimi nesnesini kullanabilirsiniz:
- UploadFolder
- UploadFile
- DownloadFolder
- DownloadFile
Bu yöntemlerin ilk parametresi, Data Lake Store hesabının adıdır ve ardından kaynak yolu ve hedef yolu için parametreler izler.
Aşağıdaki örnek, Data Lake Store bir klasörün nasıl indirileceği gösterilmektedir.
adlsFileSystemClient.FileSystem.DownloadFolder(adls, sourcePath, destinationPath);
Data Lake Store hesapta bir dosya oluşturun
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 depolama hesabı yollarını doğrulama
Aşağıdaki kod, bir Azure depolama hesabının (storageAccntName) Data Lake Analytics hesapta (analyticsAccountName) bulunup bulunmadığını ve Azure depolama hesabında bir kapsayıcı (containerName) olup olmadığını denetler.
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));
Katalog ve işleri yönetme
Datalakeanal, Alogmanagementclient nesnesi her bir Azure Data Lake Analytics hesabı için sağlanan SQL veritabanının yönetilmesi için yöntemler sağlar. Datalakeanalsjobmanagementclient, veritabanı üzerinde U-SQL betikleri ile çalıştırılan işleri göndermek ve yönetmek için yöntemler sağlar.
Veritabanları ve şemaları listeleme
Birçok konuda, en yaygın olarak veritabanları ve bunların şeması bulunur. Aşağıdaki kod bir veritabanları koleksiyonu edinir ve sonra her bir veritabanı için şemayı numaralandırır.
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}");
}
}
Tablo sütunlarını listeleme
Aşağıdaki kod, belirtilen tablodaki sütunları listelemek için bir Data Lake Analytics katalog yönetimi istemcisiyle veritabanına nasıl erişdeğiştirileceğini gösterir.
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 işi gönderme
Aşağıdaki kod, bir işi göndermek için Data Lake Analytics Iş Yönetimi istemcisinin nasıl kullanılacağını gösterir.
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.");
Başarısız işleri listeleme
Aşağıdaki kod, başarısız olan işlerle ilgili bilgileri listeler.
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}");
}
İşlem hatlarını Listele
Aşağıdaki kod, hesaba gönderilen işlerin her bir ardışık düzenine ilişkin bilgileri listeler.
var pipelines = adlaJobClient.Pipeline.List(adla);
foreach (var p in pipelines)
{
Console.WriteLine($"Pipeline: {p.Name}\t{p.PipelineId}\t{p.LastSubmitTime}");
}
Tekrarları Listele
Aşağıdaki kod, hesaba gönderilen işlerin her yinelemesi hakkındaki bilgileri listeler.
var recurrences = adlaJobClient.Recurrence.List(adla);
foreach (var r in recurrences)
{
Console.WriteLine($"Recurrence: {r.Name}\t{r.RecurrenceId}\t{r.LastSubmitTime}");
}
Ortak Graf senaryoları
Kullanıcıyı AAD dizininde ara
var userinfo = graphClient.Users.Get( "bill@contoso.com" );
AAD dizinindeki bir kullanıcının ObjectID 'sini al
var userinfo = graphClient.Users.Get( "bill@contoso.com" );
Console.WriteLine( userinfo.ObjectId )
İşlem ilkelerini yönetme
Datalakeanalticsaccountmanagementclient nesnesi, bir Data Lake Analytics hesabının işlem ilkelerini yönetmek için yöntemler sağlar.
İşlem ilkelerini Listele
Aşağıdaki kod, bir Data Lake Analytics hesabı için işlem ilkelerinin bir listesini alır.
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}");
}
Yeni bir işlem İlkesi Oluştur
Aşağıdaki kod, bir Data Lake Analytics hesabı için yeni bir işlem ilkesi oluşturur, belirtilen kullanıcı için kullanılabilir maksimum AU sayısını 50 olarak ayarlar ve en düşük iş önceliği 250 ' dir.
var userAadObjectId = "3b097601-4912-4d41-b9d2-78672fc2acde";
var newPolicyParams = new ComputePolicyCreateOrUpdateParameters(userAadObjectId, "User", 50, 250);
adlaAccountClient.ComputePolicies.CreateOrUpdate(rg, adla, "GaryMcDaniel", newPolicyParams);