Udostępnij za pośrednictwem


Zarządzanie klastrami Apache Hadoop w usłudze HDInsight przy użyciu zestawu SDK platformy .NET

Dowiedz się, jak zarządzać klastrami usługi Azure HDInsight przy użyciu zestawu SDK HDInsight.NET.

Wymagania wstępne

Przed rozpoczęciem tego artykułu musisz mieć następujące elementy:

  • Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

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

Po uruchomieniu tego programu zostanie wyświetlony monit. Jeśli nie chcesz wyświetlać monitu, zobacz Create noninteractive authentication .NET HDInsight applications (Tworzenie aplikacji usługi HDInsight uwierzytelniania nieinteraktywnego).

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 uruchomiony w usłudze 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, sprawdź stronę Właściwości . Aby uzyskać więcej informacji, zobacz Wyświetlanie i wyświetlanie 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 roboczych w klastrze usługi Hadoop, który działa bez wpływu na oczekujące lub uruchomione zadania. Możesz również przesłać nowe zadania, gdy operacja jest w toku. Błędy w 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. Wszystkie uruchomione i oczekujące zadania kończą się niepowodzeniem po zakończeniu operacji skalowania. Po zakończeniu operacji można ponownie przesłać zadania.

  • 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 również ręcznie zrównoważyć serwery regionalne. Zaloguj się do węzła głównego klastra i uruchom następujące polecenia w oknie wiersza polecenia:

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

Aktualizowanie poświadczeń użytkownika HTTP

Procedura aktualizacji jest taka sama jak ta, której używasz do udzielania lub odwoływanie dostępu HTTP. Jeśli klaster otrzymał dostęp HTTP, należy go najpierw odwołać. Następnie możesz udzielić dostępu przy użyciu nowych poświadczeń użytkownika HTTP.

Znajdowanie domyślnego konta magazynu

Poniższy fragment kodu pokazuje, jak uzyskać domyślną nazwę i 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ń

Dowiedz się, jak przesyłać zadania dla następujących produktów:

Przekazywanie danych do usługi Azure Blob Storage

Aby przekazać dane, zobacz Przekazywanie danych do usługi HDInsight.