Compartir a través de


Administrar clústeres de Apache Hadoop en HDInsight con el SDK de .NET

Más información sobre cómo administrar los clústeres de Azure HDInsight con el SDK de .NET para HDInsight.

Requisitos previos

Antes de empezar este artículo, debe tener lo siguiente:

  • Una cuenta de Azure con una suscripción activa. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Conexión a HDInsight de Azure

Necesita los siguientes paquetes NuGet:

Install-Package Microsoft.Rest.ClientRuntime.Azure.Authentication -Pre
Install-Package Microsoft.Azure.Management.ResourceManager -Pre
Install-Package Microsoft.Azure.Management.HDInsight

El ejemplo de código siguiente muestra cómo conectarse a Azure antes de poder administrar clústeres de HDInsight con su suscripción de 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");
        }
    }
}

Verá un mensaje al ejecutar este programa. Si no desea ver el mensaje, consulte Crear aplicaciones .NET para HDInsight de autenticación no interactiva.

Lista de clústeres

El fragmento de código siguiente enumera los clústeres y algunas propiedades:

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);
}

Eliminación de clústeres

Use el siguiente fragmento de código para eliminar un clúster de forma sincrónica o asincrónica:

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

Escalado de clústeres

Use la característica de escalado de clústeres para cambiar el número de nodos de trabajo que usa un clúster que se ejecuta en HDInsight sin tener que volver a crear el clúster.

Nota:

Solo son compatibles los clústeres con la versión 3.1.3 de HDInsight, o superior. Si no está seguro de la versión del clúster, compruebe la página Propiedades. Para obtener más información, consulte Enumeración y visualización de clústeres.

A continuación se muestra el impacto que tiene cambiar la cantidad de nodos de datos de cada tipo de clúster compatible con HDInsight:

  • Apache Hadoop: puede aumentar sin problemas el número de nodos de trabajo de un clúster de Hadoop que se está ejecutando sin afectar a ningún trabajo pendiente o en ejecución. También se pueden enviar trabajos nuevos mientras la operación está en curso. Los errores que puedan surgir en una operación de escalado se enfrentan oportunamente, por lo que el clúster siempre queda en estado funcional.

    Cuando se realiza la reducción vertical de un clúster de Hadoop al disminuir la cantidad de nodos de datos, se reinician algunos de los servicios del clúster. Todos los trabajos en ejecución y pendientes producen un error al finalizar la operación de escalado. Una vez finalizada la operación, puede volver a enviar los trabajos.

  • Apache HBase: puede agregar o quitar nodos sin problemas al clúster de HBase mientras se ejecuta. Los servidores regionales se equilibran automáticamente en unos pocos minutos tras completar la operación de escalado. También puede equilibrar manualmente los servidores regionales. Inicie sesión en el nodo principal de un clúster y ejecute los siguientes comandos desde una ventana del símbolo del sistema:

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

Actualización de las credenciales de usuario HTTP

El procedimiento de actualización es el mismo que el que se usa para conceder o revocar el acceso HTTP. Si al clúster se le concedió acceso HTTP, primero debe revocarlo. A continuación, puede conceder acceso con nuevas credenciales de usuario HTTP.

Búsqueda de la cuenta de almacenamiento predeterminada

En el fragmento de código siguiente se muestra cómo obtener el nombre y la clave de la cuenta de almacenamiento predeterminados para un clúster.

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]));
}

Envío de trabajos

Obtenga información sobre cómo enviar trabajos para los siguientes productos:

Cargar en Azure Blob Storage

Para cargar datos, consulte Carga de datos en HDInsight.