Condividi tramite


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:

Caricare dati in Archiviazione BLOB di Azure

Per caricare i dati, vedere Caricare dati in HDInsight.