Gestire cluster Hadoop in HDInsight tramite .NET SDKManage Hadoop clusters in HDInsight by using .NET SDK

Ecco come gestire cluster HDInsight usando HDInsight.NET SDK.Learn how to manage HDInsight clusters using HDInsight.NET SDK.

PrerequisitiPrerequisites

Per eseguire le procedure descritte nell'articolo è necessario:Before you begin this article, you must have the following:

Connettersi ad Azure HDInsightConnect to Azure HDInsight

Sono necessari i pacchetti NuGet seguenti:You need the following NuGet packages:

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.The following code sample shows you how to connect to Azure before you can administer HDInsight clusters under your Azure subscription.

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 AAD 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 verrà visualizzato un prompt dei comandi.You shall see a prompt when you run this program. Per non visualizzare il prompt dei comandi, vedere Creare applicazioni .NET HDInsight di autenticazione non interattive.If you don't want to see the prompt, see Create non-interactive authentication .NET HDInsight applications.

Creare i clusterCreate clusters

Vedere Creare cluster basati su Linux in HDInsight tramite .NET SDKSee Create Linux-based clusters in HDInsight using the .NET SDK

Elencare clusterList clusters

Il frammento di codice seguente elenca i cluster e alcune proprietà:The following code snippet lists clusters and some properties:

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 clusterDelete clusters

Per eliminare un cluster in modo sincrono o asincrono, usare il frammento di codice seguente:Use the following code snippet to delete a cluster synchronously or asynchronously:

_hdiManagementClient.Clusters.Delete("<Resource Group Name>", "<Cluster Name>");
_hdiManagementClient.Clusters.DeleteAsync("<Resource Group Name>", "<Cluster Name>");

Ridimensionare i clusterScale clusters

La funzionalità di scalabilità del cluster consente di modificare il numero di nodi del ruolo di lavoro usati da un cluster in esecuzione in Azure HDInsight senza dover ricreare il cluster.The cluster scaling feature allows you to change the number of worker nodes used by a cluster that is running in Azure HDInsight without having to re-create the cluster.

Nota

Sono supportati solo i cluster con HDInsight versione 3.1.3 o successive.Only clusters with HDInsight version 3.1.3 or higher are supported. Se non si è certi della versione del cluster, è possibile controllare la pagina delle proprietà.If you are unsure of the version of your cluster, you can check the Properties page. Vedere Elencare e visualizzare i cluster.See List and show clusters.

Questa sezione descrive l'impatto della modifica del numero di nodi dati per ogni tipo di cluster supportato da HDInsight:The impact of changing the number of data nodes for each type of cluster supported by HDInsight:

  • HadoopHadoop

    È possibile aumentare facilmente il numero di nodi del ruolo di lavoro in un cluster Hadoop in esecuzione senza conseguenze per eventuali processi in sospeso o in esecuzione.You can seamlessly increase the number of worker nodes in a Hadoop cluster that is running without impacting any pending or running jobs. È inoltre possibile inviare nuovi processi mentre è in corso l'operazione.New jobs can also be submitted while the operation is in progress. Gli errori in un'operazione di scalabilità vengono gestiti in modo che il cluster rimanga sempre in uno stato funzionale.Failures in a scaling operation are gracefully handled so that the cluster is always left in a functional state.

    Quando un cluster Hadoop viene ridimensionato riducendo il numero di nodi dati, alcuni dei servizi del cluster vengono riavviati.When a Hadoop cluster is scaled down by reducing the number of data nodes, some of the services in the cluster are restarted. In questo modo, tutti i processi in esecuzione e in attesa daranno esito negativo dopo il completamento dell'operazione di ridimensionamento.This causes all running and pending jobs to fail at the completion of the scaling operation. È tuttavia possibile inviare nuovamente i processi una volta completata l'operazione.You can, however, resubmit the jobs once the operation is complete.

  • HBaseHBase

    È possibile aggiungere o rimuovere facilmente nodi nel cluster HBase mentre è in esecuzione.You can seamlessly add or remove nodes to your HBase cluster while it is running. I server a livello di area vengono bilanciati automaticamente entro pochi minuti dal completamento dell'operazione di ridimensionamento.Regional Servers are automatically balanced within a few minutes of completing the scaling operation. È tuttavia possibile anche bilanciare manualmente i server a livello di area accedendo al nodo head del cluster ed eseguendo i comandi seguenti da una finestra del prompt dei comandi:However, you can also manually balance the regional servers by logging into the headnode of cluster and running the following commands from a command prompt window:

    >pushd %HBASE_HOME%\bin
    >hbase shell
    >balancer
    
  • StormStorm

    È possibile aggiungere o rimuovere facilmente nodi dati dal cluster Storm mentre è in esecuzione.You can seamlessly add or remove data nodes to your Storm cluster while it is running. Tuttavia, dopo il completamento dell'operazione di ridimensionamento, è necessario bilanciare nuovamente la topologia.But after a successful completion of the scaling operation, you will need to rebalance the topology.

    A tale scopo, è possibile scegliere tra due opzioni:Rebalancing can be accomplished in two ways:

    • Interfaccia utente Web di StormStorm web UI
    • Interfaccia della riga di comando (CLI)Command-line interface (CLI) tool

      Per altre informazioni, fare riferimento alla documentazione su Apache Storm .Please refer to the Apache Storm documentation for more details.

      L'interfaccia utente Web di Storm è disponibile nel cluster HDInsight:The Storm web UI is available on the HDInsight cluster:

      Ribilanciamento di HDInsight Storm

      Di seguito viene fornito un esempio d'uso del comando CLI per ribilanciare la topologia di Storm:Here is an example how to use the CLI command to rebalance the Storm topology:

      ## Reconfigure the topology "mytopology" to use 5 worker processes,
      ## the spout "blue-spout" to use 3 executors, and
      ## the bolt "yellow-bolt" to use 10 executors
      $ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
      

Il frammento di codice seguente indica come ridimensionare un cluster in modo sincrono o asincrono:The following code snippet shows how to resize a cluster synchronously or asynchronously:

_hdiManagementClient.Clusters.Resize("<Resource Group Name>", "<Cluster Name>", <New Size>);   
_hdiManagementClient.Clusters.ResizeAsync("<Resource Group Name>", "<Cluster Name>", <New Size>);   

Concedere/Revocare l'accessoGrant/revoke access

Per i cluster HDInsight sono disponibili i servizi Web HTTP seguenti (tutti con endpoint RESTful):HDInsight clusters have the following HTTP web services (all of these services have RESTful endpoints):

  • ODBCODBC
  • JDBCJDBC
  • AmbariAmbari
  • OozieOozie
  • TempletonTempleton

Per impostazione predefinita, a questi servizi è concesso l'accesso.By default, these services are granted for access. L'accesso può essere revocato/concesso,You can revoke/grant the access. Per revocare:To revoke:

var httpParams = new HttpSettingsParameters
{
    HttpUserEnabled = false,
    HttpUsername = "admin",
    HttpPassword = "*******",
};
_hdiManagementClient.Clusters.ConfigureHttpSettings("<Resource Group Name>, <Cluster Name>, httpParams);

Per concedere:To grant:

var httpParams = new HttpSettingsParameters
{
    HttpUserEnabled = enable,
    HttpUsername = "admin",
    HttpPassword = "*******",
};
_hdiManagementClient.Clusters.ConfigureHttpSettings("<Resource Group Name>, <Cluster Name>, httpParams);

Nota

La concessione/revoca dell'accesso implica la reimpostazione del nome utente e della password del cluster.By granting/revoking the access, you will reset the cluster user name and password.

Questa operazione può essere eseguita anche tramite il portale.This can also be done via the Portal. Vedere l'articolo su come amministrare HDInsight con il portale di Azure.See Administer HDInsight by using the Azure portal.

Aggiornare le credenziali utente HTTPUpdate HTTP user credentials

È la stessa procedura di Concedere/revocare l'accesso HTTP. Se al cluster è stato concesso l'accesso HTTP, è necessario prima revocarlo.It is the same procedure as Grant/revoke HTTP access.If the cluster has been granted the HTTP access, you must first revoke it. E quindi concedere l'accesso con le nuove credenziali utente HTTP.And then grant the access with new HTTP user credentials.

Trovare l'account di archiviazione predefinitoFind the default storage account

Il frammento di codice seguente dimostra come ottenere il nome dell’account di archiviazione predefinito e la chiave dell’account di archiviazione predefinita per un cluster.The following code snippet demonstrates how to get the default storage account name and the default storage account key for a 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 processiSubmit jobs

Inviare processi MapReduceTo submit MapReduce jobs

Vedere Eseguire gli esempi di Hadoop in HDInsight.See Run Hadoop MapReduce samples in HDInsight.

Inviare processi HiveTo submit Hive jobs

Vedere Eseguire query Hive con HDInsight .NET SDKSee Run Hive queries using .NET SDK.

Inviare processi PigTo submit Pig jobs

Vedere Esecuzione di processi Pig con .NET SDK per Hadoop in HDInsightSee Run Pig jobs using .NET SDK.

Inviare processi SqoopTo submit Sqoop jobs

Vedere Usare Sqoop con Hadoop in HDInsight.See Use Sqoop with HDInsight.

Inviare processi OozieTo submit Oozie jobs

Vedere Usare Oozie con Hadoop per definire ed eseguire un flusso di lavoro in HDInsight.See Use Oozie with Hadoop to define and run a workflow in HDInsight.

Caricare dati nell'archivio BLOB di AzureUpload data to Azure Blob storage

VedereCaricare dati in HDInsight.See Upload data to HDInsight.

Vedere ancheSee Also