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:

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

Zobacz Definiowanie i uruchamianie przepływu pracy w usłudze HDInsight przy użyciu usługi Apache Oozie z usługą Hadoop.

Przekazywanie danych do usługi Azure Blob Storage

Zobacz Przekazywanie danych do usługi HDInsight.

Zobacz też