Dela via


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

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

Förutsättningar

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

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

Du får en uppmaning när du kör det här programmet. Om du inte vill se uppmaningen kan du läsa Skapa .NET HDInsight-program med icke-interaktiv autentisering.

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

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

Anteckning

Endast kluster med HDInsight version 3.1.3 eller senare stöds. Om du är osäker på vilken version av klustret du har kan du gå till sidan Egenskaper. Se 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. Nya jobb kan också skickas 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 tjänster i klustret om. Detta gör att alla jobb som körs och väntar misslyckas när skalningsåtgärden har slutförts. Du kan dock skicka jobben igen när åtgärden har slutförts.

  • Apache HBase

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

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

Uppdatera autentiseringsuppgifter för HTTP-användare

Det är samma procedur som bevilja/återkalla HTTP-åtkomst. Om klustret har beviljats HTTP-åtkomst måste du först återkalla det. Och bevilja sedan åtkomst med nya autentiseringsuppgifter för HTTP-användare.

Hitta standardlagringskontot

Följande kodfragment visar hur du hämtar standardnamnet för lagringskontot och standardnyckeln 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

Skicka MapReduce-jobb

Se Köra MapReduce-exempel i HDInsight.

Skicka Apache Hive-jobb

Se Köra Apache Hive-frågor med .NET SDK.

Skicka Apache Sqoop-jobb

Se Använda Apache Sqoop med HDInsight.

Skicka Apache Oozie-jobb

Se Använda Apache Oozie med Hadoop för att definiera och köra ett arbetsflöde i HDInsight.

Ladda upp data till Azure Blob Storage

Mer information finns i Överföra data till HDInsight.

Se även