Gerir clusters do Apache Hadoop no HDInsight com o SDK .NET
Saiba como gerir clusters do HDInsight com HDInsight.NET SDK.
Pré-requisitos
Antes de começar este artigo, tem de ter o seguinte:
- Uma subscrição do Azure. Consulte Obter versão de avaliação gratuita do Azure.
Ligar ao Azure HDInsight
Precisa dos seguintes pacotes NuGet:
Install-Package Microsoft.Rest.ClientRuntime.Azure.Authentication -Pre
Install-Package Microsoft.Azure.Management.ResourceManager -Pre
Install-Package Microsoft.Azure.Management.HDInsight
O seguinte exemplo de código mostra-lhe como ligar ao Azure antes de poder administrar clusters do HDInsight na sua subscrição do 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 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");
}
}
}
Verá uma mensagem quando executar este programa. Se não quiser ver o pedido, veja Criar aplicações .NET HDInsight de autenticação não interativa.
Listar clusters
O fragmento de código seguinte lista clusters e algumas propriedades:
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);
}
Eliminar clusters
Utilize o fragmento de código seguinte para eliminar um cluster de forma síncrona ou assíncrona:
_hdiManagementClient.Clusters.Delete("<Resource Group Name>", "<Cluster Name>");
_hdiManagementClient.Clusters.DeleteAsync("<Resource Group Name>", "<Cluster Name>");
Dimensionar clusters
A funcionalidade de dimensionamento do cluster permite-lhe alterar o número de nós de trabalho utilizados por um cluster em execução no Azure HDInsight sem ter de recriar o cluster.
Nota
Apenas são suportados clusters com a versão 3.1.3 ou superior do HDInsight. Se não tiver a certeza da versão do cluster, pode verificar a página Propriedades. Veja Listar e mostrar clusters.
O impacto da alteração do número de nós de dados para cada tipo de cluster suportado pelo HDInsight:
Apache Hadoop
Pode aumentar de forma totalmente integrada o número de nós de trabalho num cluster do Hadoop que está em execução sem afetar quaisquer tarefas pendentes ou em execução. As novas tarefas também podem ser submetidas enquanto a operação estiver em curso. As falhas numa operação de dimensionamento são processadas corretamente para que o cluster fique sempre num estado funcional.
Quando um cluster do Hadoop é reduzido verticalmente ao reduzir o número de nós de dados, alguns dos serviços no cluster são reiniciados. Isto faz com que todas as tarefas em execução e pendentes falhem no final da operação de dimensionamento. No entanto, pode submeter novamente as tarefas assim que a operação estiver concluída.
Apache HBase
Pode adicionar ou remover nós de forma totalmente integrada ao cluster do HBase enquanto está em execução. Os Servidores Regionais são automaticamente equilibrados dentro de alguns minutos após a conclusão da operação de dimensionamento. No entanto, também pode equilibrar manualmente os servidores regionais ao iniciar sessão no nó principal do cluster e executar os seguintes comandos a partir de uma janela da linha de comandos:
>pushd %HBASE_HOME%\bin >hbase shell >balancer
Atualizar credenciais de utilizador HTTP
É o mesmo procedimento que Conceder/revogar o acesso HTTP. Se tiver sido concedido acesso HTTP ao cluster, primeiro tem de o revogar. Em seguida, conceda o acesso com as novas credenciais de utilizador HTTP.
Localizar a conta de armazenamento predefinida
O fragmento de código seguinte demonstra como obter o nome da conta de armazenamento predefinido e a chave de conta de armazenamento predefinida para um 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]));
}
Submeter tarefas
Para submeter tarefas do MapReduce
Veja Executar exemplos do MapReduce no HDInsight.
Para submeter tarefas do Apache Hive
Veja Executar consultas do Apache Hive com o SDK .NET.
Para submeter tarefas do Apache Sqoop
Veja Utilizar o Apache Sqoop com o HDInsight.
Para submeter tarefas do Apache Oozie
Veja Utilizar o Apache Oozie com o Hadoop para definir e executar um fluxo de trabalho no HDInsight.
Carregar dados para o armazenamento de Blobs do Azure
Consulte Upload data to HDInsight (Carregar dados para o HDInsight).
Consulte também
- Documentação de referência do SDK .NET do HDInsight
- Gerir clusters do Apache Hadoop no HDInsight com o portal do Azure
- Administrar o HDInsight com uma interface de linha de comandos
- Criar clusters do HDInsight
- Upload data to HDInsight (Carregar dados para o HDInsight)
- Get started with Azure HDInsight (Introdução ao Azure HDInsight)