Sdílet prostřednictvím


Správa clusterů Apache Hadoop ve službě HDInsight pomocí sady .NET SDK

Naučte se spravovat clustery Azure HDInsight pomocí sady HDInsight.NET SDK.

Požadavky

Než začnete s tímto článkem, musíte mít:

  • Účet Azure s aktivním předplatným. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Připojení ke službě Azure HDInsight

Potřebujete následující balíčky NuGet:

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

Následující ukázka kódu ukazuje, jak se připojit k Azure, než budete moci spravovat clustery HDInsight v rámci předplatného 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");
        }
    }
}

Při spuštění tohoto programu se zobrazí výzva. Pokud tuto výzvu nechcete zobrazit, přečtěte si téma Vytvoření neinteraktivních aplikací .NET HDInsight.

Výpis clusterů

Následující fragment kódu uvádí clustery a některé vlastnosti:

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

Odstranění clusterů

Pomocí následujícího fragmentu kódu odstraňte cluster synchronně nebo asynchronně:

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

Škálování clusterů

Pomocí funkce škálování clusteru můžete změnit počet pracovních uzlů používaných clusterem spuštěným v HDInsight, aniž byste museli cluster znovu vytvořit.

Poznámka:

Podporují se pouze clustery s HDInsight verze 3.1.3 nebo vyšší. Pokud si nejste jisti verzí clusteru, zkontrolujte stránku Vlastnosti . Další informace najdete v tématu Seznam a zobrazení clusterů.

Vliv změny počtu datových uzlů pro jednotlivé typy clusterů podporovaných službou HDInsight:

  • Apache Hadoop: Můžete bez problémů zvýšit počet pracovních uzlů v clusteru Hadoop, který běží, aniž by to mělo vliv na čekající nebo spuštěné úlohy. Během probíhající operace můžete také odesílat nové úlohy. Selhání v operaci škálování se řádně zpracují, aby cluster zůstal vždy ve funkčním stavu.

    Když se cluster Hadoop škáluje dolů snížením počtu datových uzlů, některé služby v clusteru se restartují. Všechny spuštěné a čekající úlohy selžou při dokončení operace škálování. Po dokončení operace můžete úlohy znovu odeslat.

  • Apache HBase: Během běhu můžete do clusteru HBase bezproblémově přidávat nebo odebírat uzly. Regionální servery se automaticky vyrovnávají během několika minut od dokončení operace škálování. Místní servery můžete vyrovnávat také ručně. Přihlaste se k hlavnímu uzlu clusteru a spusťte z okna příkazového řádku následující příkazy:

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

Aktualizace přihlašovacích údajů uživatele HTTP

Postup aktualizace je stejný jako postup, který používáte k udělení nebo odvolání přístupu HTTP. Pokud byl cluster udělený přístup HTTP, musíte ho nejprve odvolat. Pak můžete udělit přístup pomocí nových přihlašovacích údajů uživatele HTTP.

Vyhledání výchozího účtu úložiště

Následující fragment kódu ukazuje, jak získat výchozí název a klíč účtu úložiště pro cluster.

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

Odesílání úloh

Zjistěte, jak odesílat úlohy pro následující produkty:

Nahrání dat do služby Azure Blob Storage

Pokud chcete nahrát data, přečtěte si téma Nahrání dat do SLUŽBY HDInsight.