Hantera Apache Hadoop-kluster i HDInsight med hjälp av .NET SDK
Lär dig hur du hanterar HDInsight-kluster med hjälp av HDInsight.NET SDK.
Förutsättningar
Innan du påbörjar den här artikeln måste du ha:
- En Azure-prenumeration. Se Hämta en kostnadsfri utvärderingsversion av Azure.
Ansluta till Azure HDInsight
Du behöver följande NuGet-paket:
Install-Package Microsoft.Rest.ClientRuntime.Azure.Authentication -Pre
Install-Package Microsoft.Azure.Management.ResourceManager -Pre
Install-Package Microsoft.Azure.Management.HDInsight
Följande kodexempel visar hur du ansluter till Azure innan du kan administrera HDInsight-kluster under din Azure-prenumeration.
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");
}
}
}
Du får en uppmaning när du kör det här programmet. Om du inte vill se uppmaningen kan du läsa Skapa .NET HDInsight-program med icke-interaktiv autentisering.
Lista kluster
Följande kodfragment visar kluster och vissa egenskaper:
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);
}
Ta bort kluster
Använd följande kodfragment för att ta bort ett kluster synkront eller asynkront:
_hdiManagementClient.Clusters.Delete("<Resource Group Name>", "<Cluster Name>");
_hdiManagementClient.Clusters.DeleteAsync("<Resource Group Name>", "<Cluster Name>");
Skala kluster
Med funktionen för klusterskalning kan du ändra antalet arbetsnoder som används av ett kluster som körs i Azure HDInsight utan att behöva återskapa klustret.
Anteckning
Endast kluster med HDInsight version 3.1.3 eller senare stöds. Om du är osäker på vilken version av klustret du har kan du gå till sidan Egenskaper. Se Lista och visa kluster.
Effekten av att ändra antalet datanoder för varje typ av kluster som stöds av HDInsight:
Apache Hadoop
Du kan sömlöst öka antalet arbetsnoder i ett Hadoop-kluster som körs utan att påverka väntande eller pågående jobb. Nya jobb kan också skickas medan åtgärden pågår. Fel i en skalningsåtgärd hanteras korrekt så att klustret alltid lämnas i ett funktionellt tillstånd.
När ett Hadoop-kluster skalas ned genom att minska antalet datanoder startas vissa tjänster i klustret om. Detta gör att alla jobb som körs och väntar misslyckas när skalningsåtgärden har slutförts. Du kan dock skicka jobben igen när åtgärden har slutförts.
Apache HBase
Du kan sömlöst lägga till eller ta bort noder i HBase-klustret medan det körs. Regionala servrar balanseras automatiskt inom några minuter efter att skalningsåtgärden har slutförts. Men du kan också balansera de regionala servrarna manuellt genom att logga in på huvudnoden för klustret och köra följande kommandon från ett kommandotolksfönster:
>pushd %HBASE_HOME%\bin >hbase shell >balancer
Uppdatera autentiseringsuppgifter för HTTP-användare
Det är samma procedur som bevilja/återkalla HTTP-åtkomst. Om klustret har beviljats HTTP-åtkomst måste du först återkalla det. Och bevilja sedan åtkomst med nya autentiseringsuppgifter för HTTP-användare.
Hitta standardlagringskontot
Följande kodfragment visar hur du hämtar standardnamnet för lagringskontot och standardnyckeln för lagringskontot för ett kluster.
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]));
}
Skicka jobb
Skicka MapReduce-jobb
Se Köra MapReduce-exempel i HDInsight.
Skicka Apache Hive-jobb
Se Köra Apache Hive-frågor med .NET SDK.
Skicka Apache Sqoop-jobb
Se Använda Apache Sqoop med HDInsight.
Skicka Apache Oozie-jobb
Se Använda Apache Oozie med Hadoop för att definiera och köra ett arbetsflöde i HDInsight.
Ladda upp data till Azure Blob Storage
Mer information finns i Överföra data till HDInsight.