Zarządzanie klastrami Apache Hadoop w usłudze HDInsight przy użyciu zestawu SDK platformy .NET
Dowiedz się, jak zarządzać klastrami usługi HDInsight przy użyciu zestawu SDK HDInsight.NET.
Wymagania wstępne
Przed rozpoczęciem korzystania z informacji zawartych w tym artykule należy dysponować następującymi elementami:
- Subskrypcja platformy Azure. Zobacz temat Uzyskiwanie bezpłatnej wersji próbnej platformy Azure.
Nawiązywanie połączenia z usługą Azure HDInsight
Potrzebne są następujące pakiety NuGet:
Install-Package Microsoft.Rest.ClientRuntime.Azure.Authentication -Pre
Install-Package Microsoft.Azure.Management.ResourceManager -Pre
Install-Package Microsoft.Azure.Management.HDInsight
Poniższy przykładowy kod pokazuje, jak nawiązać połączenie z platformą Azure, zanim będzie można administrować klastrami usługi HDInsight w ramach subskrypcji platformy 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");
}
}
}
Po uruchomieniu tego programu zostanie wyświetlony monit. Jeśli nie chcesz wyświetlać monitu, zobacz Create non-interactive authentication .NET HDInsight applications (Tworzenie aplikacji usługi HDInsight uwierzytelniania nieinterakcyjnego).
Wyświetlanie listy klastrów
Poniższy fragment kodu zawiera listę klastrów i niektóre właściwości:
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);
}
Usuwanie klastrów
Użyj następującego fragmentu kodu, aby synchronicznie lub asynchronicznie usunąć klaster:
_hdiManagementClient.Clusters.Delete("<Resource Group Name>", "<Cluster Name>");
_hdiManagementClient.Clusters.DeleteAsync("<Resource Group Name>", "<Cluster Name>");
Skalowanie klastrów
Funkcja skalowania klastra umożliwia zmianę liczby węzłów roboczych używanych przez klaster działający w usłudze Azure HDInsight bez konieczności ponownego tworzenia klastra.
Uwaga
Obsługiwane są tylko klastry z usługą HDInsight w wersji 3.1.3 lub nowszej. Jeśli nie masz pewności co do wersji klastra, możesz sprawdzić stronę Właściwości. Zobacz Wyświetlanie listy i pokazywanie klastrów.
Wpływ zmiany liczby węzłów danych dla każdego typu klastra obsługiwanego przez usługę HDInsight:
Apache Hadoop
Możesz bezproblemowo zwiększyć liczbę węzłów procesu roboczego w klastrze hadoop, który działa bez wpływu na oczekujące lub uruchomione zadania. Nowe zadania można również przesyłać, gdy operacja jest w toku. Błędy operacji skalowania są bezpiecznie obsługiwane, aby klaster był zawsze pozostawiony w stanie funkcjonalnym.
Gdy klaster Hadoop jest skalowany w dół przez zmniejszenie liczby węzłów danych, niektóre usługi w klastrze są ponownie uruchamiane. Powoduje to, że wszystkie uruchomione i oczekujące zadania zakończą się niepowodzeniem po zakończeniu operacji skalowania. Można jednak ponownie przesłać zadania po zakończeniu operacji.
Apache HBase
Możesz bezproblemowo dodawać lub usuwać węzły do klastra HBase podczas jego działania. Serwery regionalne są automatycznie zrównoważone w ciągu kilku minut od ukończenia operacji skalowania. Można jednak również ręcznie równoważyć serwery regionalne, logując się do węzła głównego klastra i uruchamiając następujące polecenia w oknie wiersza polecenia:
>pushd %HBASE_HOME%\bin >hbase shell >balancer
Aktualizowanie poświadczeń użytkownika HTTP
Jest to taka sama procedura, jak udzielanie/odwoływanie dostępu HTTP. Jeśli klaster otrzymał dostęp HTTP, należy go najpierw odwołać. A następnie przyznaj dostęp przy użyciu nowych poświadczeń użytkownika HTTP.
Znajdowanie domyślnego konta magazynu
Poniższy fragment kodu pokazuje, jak uzyskać domyślną nazwę konta magazynu i domyślny klucz konta magazynu dla klastra.
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]));
}
Przesyłanie zadań
Aby przesłać zadania MapReduce
Zobacz Uruchamianie przykładów mapreduce w usłudze HDInsight.
Aby przesłać zadania apache Hive
Zobacz Uruchamianie zapytań apache Hive przy użyciu zestawu .NET SDK.
Aby przesłać zadania platformy Apache Sqoop
Zobacz Używanie narzędzia Apache Sqoop z usługą HDInsight.
Aby przesłać zadania apache Oozie
Przekazywanie danych do usługi Azure Blob Storage
Zobacz Przekazywanie danych do usługi HDInsight.
Zobacz też
- Dokumentacja zestawu .NET SDK usługi HDInsight
- Zarządzanie klastrami Apache Hadoop w usłudze HDInsight przy użyciu Azure Portal
- Administrowanie usługą HDInsight przy użyciu interfejsu wiersza polecenia
- Tworzenie klastrów usługi HDInsight
- Przekazywanie danych do usługi HDInsight
- Wprowadzenie do usługi Azure HDInsight