Dela via


Hantera Apache Hadoop-kluster i HDInsight med hjälp av .NET SDK

Lär dig hur du hanterar Azure HDInsight-kluster med hjälp av HDInsight.NET SDK.

Förutsättningar

Innan du börjar den här artikeln måste du ha:

  • Ett Azure-konto med en aktiv prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

Ansluta till Azure HDInsight

Du behöver följande NuGet-paket:

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

Följande kodexempel visar hur du ansluter till Azure innan du kan administrera HDInsight-kluster under din Azure-prenumeration.

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

Du ser en uppmaning när du kör det här programmet. Om du inte vill se uppmaningen kan du läsa Skapa icke-interaktiva autentiseringsprogram för .NET HDInsight.

Lista kluster

Följande kodfragment visar kluster och vissa egenskaper:

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

Ta bort kluster

Använd följande kodfragment för att ta bort ett kluster synkront eller asynkront:

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

Skala kluster

Använd funktionen för klusterskalning för att ändra antalet arbetsnoder som används av ett kluster som körs i HDInsight utan att behöva återskapa klustret.

Kommentar

Endast kluster med HDInsight version 3.1.3 eller senare stöds. Om du är osäker på vilken version av klustret du har kontrollerar du sidan Egenskaper . Mer information finns i Lista och visa kluster.

Effekten av att ändra antalet datanoder för varje typ av kluster som stöds av HDInsight:

  • Apache Hadoop: Du kan sömlöst öka antalet arbetsnoder i ett Hadoop-kluster som körs utan att påverka väntande eller pågående jobb. Du kan också skicka nya jobb medan åtgärden pågår. Fel i en skalningsåtgärd hanteras korrekt så att klustret alltid lämnas i ett funktionellt tillstånd.

    När ett Hadoop-kluster skalas ned genom att minska antalet datanoder startas vissa av tjänsterna i klustret om. Alla jobb som körs och väntar misslyckas när skalningsåtgärden har slutförts. När åtgärden är klar kan du skicka jobben igen.

  • Apache HBase: Du kan sömlöst lägga till eller ta bort noder i ditt HBase-kluster när det körs. Regionala servrar balanseras automatiskt inom några minuter efter att skalningsåtgärden har slutförts. Du kan också balansera de regionala servrarna manuellt. Logga in på huvudnoden i ett kluster och kör följande kommandon från ett kommandotolkfönster:

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

Uppdatera autentiseringsuppgifter för HTTP-användare

Uppdateringsproceduren är densamma som den du använder för att bevilja eller återkalla HTTP-åtkomst. Om klustret har beviljats HTTP-åtkomst måste du först återkalla det. Sedan kan du bevilja åtkomst med nya autentiseringsuppgifter för HTTP-användare.

Hitta standardlagringskontot

Följande kodfragment visar hur du hämtar standardnamnet och nyckeln för lagringskontot för ett kluster.

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

Skicka jobb

Lär dig hur du skickar jobb för följande produkter:

Ladda upp data till Azure Blob Storage

Information om hur du laddar upp data finns i Ladda upp data till HDInsight.