Verwalten von Apache Hadoop-Clustern in HDInsight mit dem .NET SDK
Hier erhalten Sie Informationen zum Verwalten von Azure HDInsight-Clustern mithilfe des HDInsight .NET-SDK.
Voraussetzungen
Bevor Sie mit diesem Artikel beginnen können, benötigen Sie Folgendes:
- Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Verbinden mit Azure HDInsight
Sie benötigen die folgenden NuGet-Pakete:
Install-Package Microsoft.Rest.ClientRuntime.Azure.Authentication -Pre
Install-Package Microsoft.Azure.Management.ResourceManager -Pre
Install-Package Microsoft.Azure.Management.HDInsight
Das folgende Codebeispiel veranschaulicht, wie Sie eine Verbindung mit Azure herstellen, bevor Sie HDInsight-Cluster unter Ihrem Azure-Abonnement verwalten können.
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");
}
}
}
Sie sehen eine Eingabeaufforderung, wenn Sie dieses Programm ausführen. Wenn Sie diese Eingabeaufforderung nicht sehen möchten, finden Sie weitere Informationen unter Erstellen von .NET HDInsight-Anwendungen ohne interaktive Authentifizierung.
Auflisten der Cluster
Im folgenden Codeausschnitt sind Cluster und einige Eigenschaften aufgeführt:
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);
}
Löschen von Clustern
Verwenden Sie den folgenden Codeausschnitt, um einen Cluster synchron oder asynchron zu löschen:
_hdiManagementClient.Clusters.Delete("<Resource Group Name>", "<Cluster Name>");
_hdiManagementClient.Clusters.DeleteAsync("<Resource Group Name>", "<Cluster Name>");
Skalieren von Clustern
Verwenden Sie die Clusterskalierung, um die Anzahl der von einem in Azure HDInsight ausgeführten Cluster verwendeten Workerknoten zu ändern, ohne den Cluster neu erstellen zu müssen.
Hinweis
Es werden nur Cluster mit HDInsight-Versionen ab 3.1.3 unterstützt. Überprüfen Sie ggf. auf der Seite Eigenschaften die Version Ihres Clusters. Weitere Informationen finden Sie unter Auflisten und Anzeigen von Clustern.
Auswirkungen der Änderung der Anzahl von Datenknoten für die von HDInsight unterstützten Clustertypen:
Apache Hadoop: Sie können die Anzahl der Workerknoten in einem aktiven Hadoop-Cluster problemlos ohne Auswirkungen auf ausstehende oder aktive Aufträge erhöhen. Sie können auch während des Vorgangs neue Aufträge senden. Fehler bei einer Skalierung werden ordnungsgemäß behandelt, sodass der Cluster immer in einem funktionsfähigen Zustand verbleibt.
Wenn ein Hadoop-Cluster durch Verringern der Anzahl der Datenknoten zentral herunterskaliert wird, werden einige der Dienste im Cluster neu gestartet. Bei Abschluss des Skalierungsvorgangs schlagen alle laufenden und anstehenden Aufträge fehl. Sie können die Aufträge nach Abschluss des Vorgangs erneut senden.
Apache HBase: Sie können Knoten problemlos Ihrem HBase-Cluster während der Ausführung hinzufügen oder aus diesem entfernen. Regionale Server werden innerhalb weniger Minuten nach Abschluss des Skalierungsvorgangs automatisch ausgeglichen. Sie können die regionalen Server auch manuell ausgleichen. Melden Sie sich am Hauptknoten eines Clusters an und führen Sie die folgenden Befehle in einem Befehlszeilenfenster aus:
>pushd %HBASE_HOME%\bin >hbase shell >balancer
Aktualisieren von HTTP-Anmeldeinformationen
Das Aktualisierungsverfahren ist dasselbe wie das, das Sie verwenden, um den HTTP-Zugriff zu gewähren oder zu widerrufen. Wenn dem Cluster der HTTP-Zugriff gewährt wurde, müssen Sie ihn zunächst widerrufen. Sie können anschließend den Zugriff mit den neuen HTTP-Anmeldeinformationen gewähren.
Suchen des Standardspeicherkontos
Der folgende Codeausschnitt veranschaulicht, wie der Name und Schlüssel für einen Cluster abgerufen werden.
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]));
}
Übermitteln von Aufträgen
Erfahren Sie, wie Sie Aufträge für die folgenden Produkte übermitteln können:
- MapReduce: Ausführen von MapReduce-Beispielen in HDInsight
- Apache Hive: Ausführen von Apache Hive-Abfragen mit dem .NET-SDK
- Apache Sqoop: Verwenden von Apache Sqoop mit HDInsight
- Apache Oozie: Verwenden von Oozie mit Hadoop zum Definieren und Ausführen eines Workflows in Linux-basiertem Azure HDInsight
Hochladen von Daten in Azure Blob Storage
Anweisungen hierzu finden Sie unter Hochladen von Daten in HDInsight.