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:
- MapReduce: Spuštění ukázek MapReduce ve službě HDInsight
- Apache Hive: Spouštění dotazů Apache Hive pomocí sady .NET SDK
- Apache Sqoop: Použití Apache Sqoopu se službou HDInsight
- Apache Oozie: Použití Apache Oozie s Hadoopem k definování a spuštění pracovního postupu ve službě HDInsight
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.