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

Zjistěte, jak spravovat clustery HDInsight pomocí sady HDInsight.NET SDK.

Požadavky

Je nutné, abyste před zahájením tohoto článku měli tyto položky:

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 před tím, než budete moct 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 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");
        }
    }
}

Při spuštění tohoto programu se zobrazí výzva. Pokud nechcete, aby se výzva zobrazovala, přečtěte si téma Vytváření neinteraktivních aplikací .NET HDInsight pro ověřování.

Výpis clusterů

Následující fragment kódu obsahuje seznam clusterů a některých vlastností:

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ů

Funkce škálování clusteru umožňuje změnit počet pracovních uzlů používaných clusterem, který běží ve službě Azure HDInsight, aniž byste museli cluster znovu vytvářet.

Poznámka

Podporují se pouze clustery s HDInsight verze 3.1.3 nebo vyšší. Pokud si nejste jistí verzí clusteru, můžete se podívat na stránku Vlastnosti. Viz Výpis a zobrazení clusterů.

Dopad změny počtu datových uzlů pro každý typ clusteru podporovaného službou HDInsight:

  • Apache Hadoop

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

    Při vertikálním snížení kapacity clusteru Hadoop snížením počtu datových uzlů se některé služby v clusteru restartují. To způsobí, že všechny spuštěné a čekající úlohy po dokončení operace škálování selžou. Po dokončení operace však můžete úlohy znovu odeslat.

  • Apache HBase

    Uzly můžete do clusteru HBase bez problémů přidávat nebo odebírat, když je spuštěný. Místní servery se automaticky vyrovnávají během několika minut od dokončení operace škálování. Místní servery ale můžete také ručně vyvážit přihlášením k hlavnímu uzlu clusteru a spuštěním následujících příkazů z okna příkazového řádku:

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

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

Je to stejný postup jako Udělení nebo odvolání přístupu HTTP. Pokud je clusteru udělen přístup HTTP, musíte ho nejprve odvolat. A pak udělte přístup s novými přihlašovacími údaji 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 účtu úložiště a výchozí 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]));
}

Odeslat úlohy

Odeslání úloh MapReduce

Viz Spuštění ukázek MapReduce ve službě HDInsight.

Odeslání úloh Apache Hivu

Viz Spouštění dotazů Apache Hive pomocí sady .NET SDK.

Odeslání úloh Apache Sqoop

Viz Použití Apache Sqoop se službou HDInsight.

Odeslání úloh Apache Oozie

Projděte si téma Použití Apache Oozie s Hadoopem k definování a spuštění pracovního postupu ve službě HDInsight.

Nahrání dat do úložiště objektů blob v Azure

Viz Nahrání dat do služby HDInsight.

Viz také