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ředplatné Azure. Viz Získání bezplatné zkušební verze Azure.
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
Nahrání dat do úložiště objektů blob v Azure
Viz Nahrání dat do služby HDInsight.