Hantera Apache Hadoop-kluster i HDInsight med hjälp av .NET SDK
Lär dig hur du hanterar Azure HDInsight-kluster med hjälp av HDInsight.NET SDK.
Förutsättningar
Innan du börjar den här artikeln måste du ha:
- Ett Azure-konto med en aktiv prenumeration. Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
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 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");
}
}
}
Du ser en uppmaning när du kör det här programmet. Om du inte vill se uppmaningen kan du läsa Skapa icke-interaktiva autentiseringsprogram för .NET HDInsight.
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
Använd funktionen för klusterskalning för att ändra antalet arbetsnoder som används av ett kluster som körs i HDInsight utan att behöva återskapa klustret.
Kommentar
Endast kluster med HDInsight version 3.1.3 eller senare stöds. Om du är osäker på vilken version av klustret du har kontrollerar du sidan Egenskaper . Mer information finns i 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. Du kan också skicka nya jobb 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 av tjänsterna i klustret om. Alla jobb som körs och väntar misslyckas när skalningsåtgärden har slutförts. När åtgärden är klar kan du skicka jobben igen.
Apache HBase: Du kan sömlöst lägga till eller ta bort noder i ditt HBase-kluster när det körs. Regionala servrar balanseras automatiskt inom några minuter efter att skalningsåtgärden har slutförts. Du kan också balansera de regionala servrarna manuellt. Logga in på huvudnoden i ett kluster och kör följande kommandon från ett kommandotolkfönster:
>pushd %HBASE_HOME%\bin >hbase shell >balancer
Uppdatera autentiseringsuppgifter för HTTP-användare
Uppdateringsproceduren är densamma som den du använder för att bevilja eller återkalla HTTP-åtkomst. Om klustret har beviljats HTTP-åtkomst måste du först återkalla det. Sedan kan du bevilja åtkomst med nya autentiseringsuppgifter för HTTP-användare.
Hitta standardlagringskontot
Följande kodfragment visar hur du hämtar standardnamnet och nyckeln 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
Lär dig hur du skickar jobb för följande produkter:
- MapReduce: Kör MapReduce-exempel i HDInsight
- Apache Hive: Kör Apache Hive-frågor med hjälp av .NET SDK
- Apache Sqoop: Använda Apache Sqoop med HDInsight
- Apache Oozie: Använd Apache Oozie med Hadoop för att definiera och köra ett arbetsflöde i HDInsight
Ladda upp data till Azure Blob Storage
Information om hur du laddar upp data finns i Ladda upp data till HDInsight.