Gestire cluster Apache Hadoop in HDInsight usando .NET SDK
Informazioni su come gestire i cluster Azure HDInsight usando HDInsight.NET SDK.
Prerequisiti
Prima di iniziare questo articolo, è necessario disporre di:
- Un account Azure con una sottoscrizione attiva. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Connettersi ad Azure HDInsight
Sono necessari i pacchetti NuGet seguenti:
Install-Package Microsoft.Rest.ClientRuntime.Azure.Authentication -Pre
Install-Package Microsoft.Azure.Management.ResourceManager -Pre
Install-Package Microsoft.Azure.Management.HDInsight
L'esempio di codice indica come connettersi ad Azure prima di poter amministrare cluster HDInsight con una sottoscrizione Azure.
using System;
using Microsoft.Azure;
using Microsoft.Azure.Management.HDInsight;
using Microsoft.Azure.Management.HDInsight.Models;
using Microsoft.Azure.Management.ResourceManager;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Rest;
using Microsoft.Rest.Azure.Authentication;
namespace HDInsightManagement
{
class Program
{
private static HDInsightManagementClient _hdiManagementClient;
// Replace with your Azure Active Directory tenant ID if necessary.
private const string TenantId = UserTokenProvider.CommonTenantId;
private const string SubscriptionId = "<Your Azure Subscription ID>";
// This is the GUID for the PowerShell client. Used for interactive logins in this example.
private const string ClientId = "1950a258-227b-4e31-a9cf-717495945fc2";
static void Main(string[] args)
{
// Authenticate and get a token
var authToken = Authenticate(TenantId, ClientId, SubscriptionId);
// Flag subscription for HDInsight, if it isn't already.
EnableHDInsight(authToken);
// Get an HDInsight management client
_hdiManagementClient = new HDInsightManagementClient(authToken);
// insert code here
System.Console.WriteLine("Press ENTER to continue");
System.Console.ReadLine();
}
/// <summary>
/// Authenticate to an Azure subscription and retrieve an authentication token
/// </summary>
static TokenCloudCredentials Authenticate(string TenantId, string ClientId, string SubscriptionId)
{
var authContext = new AuthenticationContext("https://login.microsoftonline.com/" + TenantId);
var tokenAuthResult = authContext.AcquireToken("https://management.core.windows.net/",
ClientId,
new Uri("urn:ietf:wg:oauth:2.0:oob"),
PromptBehavior.Always,
UserIdentifier.AnyUser);
return new TokenCloudCredentials(SubscriptionId, tokenAuthResult.AccessToken);
}
/// <summary>
/// Marks your subscription as one that can use HDInsight, if it has not already been marked as such.
/// </summary>
/// <remarks>This is essentially a one-time action; if you have already done something with HDInsight
/// on your subscription, then this isn't needed at all and will do nothing.</remarks>
/// <param name="authToken">An authentication token for your Azure subscription</param>
static void EnableHDInsight(TokenCloudCredentials authToken)
{
// Create a client for the Resource manager and set the subscription ID
var resourceManagementClient = new ResourceManagementClient(new TokenCredentials(authToken.Token));
resourceManagementClient.SubscriptionId = SubscriptionId;
// Register the HDInsight provider
var rpResult = resourceManagementClient.Providers.Register("Microsoft.HDInsight");
}
}
}
Quando si esegue questo programma, viene visualizzato un prompt. Se non si vuole visualizzare il prompt, vedere Creare applicazioni .NET HDInsight di autenticazione non interattive.
Elencare i cluster
Il frammento di codice seguente elenca i cluster e alcune proprietà:
var results = _hdiManagementClient.Clusters.List();
foreach (var name in results.Clusters) {
Console.WriteLine("Cluster Name: " + name.Name);
Console.WriteLine("\t Cluster type: " + name.Properties.ClusterDefinition.ClusterType);
Console.WriteLine("\t Cluster location: " + name.Location);
Console.WriteLine("\t Cluster version: " + name.Properties.ClusterVersion);
}
Eliminare cluster
Per eliminare un cluster in modo sincrono o asincrono, usare il frammento di codice seguente:
_hdiManagementClient.Clusters.Delete("<Resource Group Name>", "<Cluster Name>");
_hdiManagementClient.Clusters.DeleteAsync("<Resource Group Name>", "<Cluster Name>");
Ridimensionare i cluster
Usare la funzionalità di ridimensionamento del cluster per modificare il numero di nodi di lavoro usati da un cluster in esecuzione in HDInsight senza dover ricreare il cluster.
Nota
Sono supportati solo i cluster con HDInsight versione 3.1.3 o successive. Se non si è certi della versione del cluster, controllare la pagina Proprietà . Per altre informazioni, vedere Elencare e visualizzare i cluster.
Effetto della modifica del numero di nodi dati per ogni tipo di cluster supportato da HDInsight:
Apache Hadoop: è possibile aumentare facilmente il numero di nodi di lavoro in un cluster Hadoop in esecuzione senza influire sui processi in sospeso o in esecuzione. È anche possibile inviare nuovi processi mentre l'operazione è in corso. Gli errori in un'operazione di scalabilità vengono gestiti in modo che il cluster rimanga sempre in uno stato funzionale.
Quando un cluster Hadoop viene ridimensionato riducendo il numero di nodi dati, alcuni dei servizi del cluster vengono riavviati. Tutti i processi in esecuzione e in sospeso hanno esito negativo al completamento dell'operazione di ridimensionamento. Al termine dell'operazione, è possibile inviare nuovamente i processi.
Apache HBase: è possibile aggiungere o rimuovere facilmente nodi al cluster HBase durante l'esecuzione. I server a livello di area vengono bilanciati automaticamente entro pochi minuti dal completamento dell'operazione di ridimensionamento. È anche possibile bilanciare manualmente i server a livello di area. Accedere al nodo head di un cluster ed eseguire i comandi seguenti da una finestra del prompt dei comandi:
>pushd %HBASE_HOME%\bin >hbase shell >balancer
Aggiornare le credenziali utente HTTP
La procedura di aggiornamento è identica a quella usata per concedere o revocare l'accesso HTTP. Se al cluster è stato concesso l'accesso HTTP, è necessario prima revocarlo. È quindi possibile concedere l'accesso con le nuove credenziali utente HTTP.
Trovare l'account di archiviazione predefinito
Il frammento di codice seguente illustra come ottenere il nome e la chiave dell'account di archiviazione predefiniti per un cluster.
var results = _hdiManagementClient.Clusters.GetClusterConfigurations(<Resource Group Name>, <Cluster Name>, "core-site");
foreach (var key in results.Configuration.Keys)
{
Console.WriteLine(String.Format("{0} => {1}", key, results.Configuration[key]));
}
Inviare i processi
Informazioni su come inviare processi per i prodotti seguenti:
- MapReduce: Eseguire esempi mapReduce in HDInsight
- Apache Hive: eseguire query Apache Hive usando .NET SDK
- Apache Sqoop: usare Apache Sqoop con HDInsight
- Apache Oozie: usare Apache Oozie con Hadoop per definire ed eseguire un flusso di lavoro in HDInsight
Caricare dati in Archiviazione BLOB di Azure
Per caricare i dati, vedere Caricare dati in HDInsight.