Apache Hadoop-clusters in HDInsight beheren met behulp van de .NET-SDK

Meer informatie over het beheren van HDInsight-clusters met behulp van HDInsight.NET SDK.

Vereisten

Voordat u dit artikel gaat lezen, moet u beschikken over het volgende:

Verbinding maken met Azure HDInsight

U hebt de volgende NuGet-pakketten nodig:

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

In het volgende codevoorbeeld ziet u hoe u verbinding maakt met Azure voordat u HDInsight-clusters kunt beheren onder uw Azure-abonnement.

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

U ziet een prompt wanneer u dit programma uitvoert. Als u de prompt niet wilt zien, raadpleegt u .NET HDInsight-toepassingen voor niet-interactieve verificatie maken.

Clusters weergeven

Het volgende codefragment bevat clusters en enkele eigenschappen:

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

Clusters verwijderen

Gebruik het volgende codefragment om een cluster synchroon of asynchroon te verwijderen:

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

Clusters schalen

Met de functie clusterschalen kunt u het aantal werkknooppunten wijzigen dat wordt gebruikt door een cluster dat wordt uitgevoerd in Azure HDInsight zonder dat u het cluster opnieuw hoeft te maken.

Notitie

Alleen clusters met HDInsight versie 3.1.3 of hoger worden ondersteund. Als u niet zeker bent van de versie van uw cluster, kunt u de pagina Eigenschappen controleren. Zie Clusters weergeven en weergeven.

De impact van het wijzigen van het aantal gegevensknooppunten voor elk type cluster dat wordt ondersteund door HDInsight:

  • Apache Hadoop

    U kunt het aantal werkknooppunten in een Hadoop-cluster dat wordt uitgevoerd naadloos verhogen zonder dat dit van invloed is op in behandeling zijnde of actieve taken. Nieuwe taken kunnen ook worden ingediend terwijl de bewerking wordt uitgevoerd. Fouten in een schaalbewerking worden probleemloos verwerkt, zodat het cluster altijd functioneel blijft.

    Wanneer een Hadoop-cluster omlaag wordt geschaald door het aantal gegevensknooppunten te verminderen, worden sommige services in het cluster opnieuw opgestart. Dit zorgt ervoor dat alle actieve en in behandeling zijnde taken mislukken bij het voltooien van de schaalbewerking. U kunt de taken echter opnieuw indienen zodra de bewerking is voltooid.

  • Apache HBase

    U kunt naadloos knooppunten toevoegen aan of verwijderen uit uw HBase-cluster terwijl het wordt uitgevoerd. Regionale servers worden automatisch verdeeld binnen een paar minuten na het voltooien van de schaalbewerking. U kunt de regionale servers echter ook handmatig verdelen door u aan te melden bij het hoofdknooppunt van het cluster en de volgende opdrachten uit te voeren vanuit een opdrachtpromptvenster:

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

HTTP-gebruikersreferenties bijwerken

Dit is dezelfde procedure als HTTP-toegang verlenen/intrekken. Als aan het cluster HTTP-toegang is verleend, moet u deze eerst intrekken. Vervolgens verleent u de toegang met nieuwe HTTP-gebruikersreferenties.

Het standaardopslagaccount zoeken

In het volgende codefragment ziet u hoe u de standaardnaam van het opslagaccount en de standaardsleutel van het opslagaccount voor een cluster kunt ophalen.

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

Taken verzenden

MapReduce-taken verzenden

Zie MapReduce-voorbeelden uitvoeren in HDInsight.

Apache Hive-taken verzenden

Zie Apache Hive-query's uitvoeren met behulp van .NET SDK.

Apache Sqoop-taken verzenden

Zie Apache Sqoop gebruiken met HDInsight.

Apache Oozie-taken verzenden

Zie Apache Oozie gebruiken met Hadoop om een werkstroom in HDInsight te definiƫren en uit te voeren.

Gegevens uploaden naar Azure Blob Storage

Zie Gegevens uploaden naar HDInsight.

Zie ook