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:
- MapReduce: Ejecutar ejemplos de MapReduce en HDInsight
- Apache Hive: Ejecutar consultas de Apache Hive mediante el SDK de .NET
- Apache Sqoop: Uso de Apache Sqoop con HDInsight
- Apache Oozie: Uso de Apache Oozie con Hadoop para definir y ejecutar un flujo de trabajo en HDInsight
Cargar en Azure Blob Storage
Para cargar datos, consulte Carga de datos en HDInsight.