Управление кластерами Apache Hadoop в HDInsight с помощью пакета SDK для .NET
Узнайте, как управлять кластерами Azure HDInsight с помощью пакета SDK HDInsight.NET.
Необходимые компоненты
Прежде чем начать эту статью, необходимо:
- Учетная запись Azure с активной подпиской. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Подключение к Azure HDInsight
Необходимо установить следующие пакеты NuGet:
Install-Package Microsoft.Rest.ClientRuntime.Azure.Authentication -Pre
Install-Package Microsoft.Azure.Management.ResourceManager -Pre
Install-Package Microsoft.Azure.Management.HDInsight
В следующем примере кода показано, как подключиться к Azure, прежде чем администрировать кластеры HDInsight в подписке 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");
}
}
}
При запуске этой программы отображается запрос. Если вы не хотите видеть запрос, см. статью "Создание неинтерактивных приложений проверки подлинности .NET HDInsight".
список кластеров
В следующем фрагменте кода перечислены кластеры и некоторые свойства:
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);
}
Удаление кластеров
Для синхронного или асинхронного удаления кластера используйте следующий фрагмент кода:
_hdiManagementClient.Clusters.Delete("<Resource Group Name>", "<Cluster Name>");
_hdiManagementClient.Clusters.DeleteAsync("<Resource Group Name>", "<Cluster Name>");
Масштабирование кластеров
Используйте функцию масштабирования кластера, чтобы изменить количество рабочих узлов, используемых кластером, работающим в HDInsight, без необходимости повторного создания кластера.
Примечание.
Поддерживаются только кластеры HDInsight версии 3.1.3 или более поздней. Если вы не уверены в версии кластера, проверьте страницу "Свойства ". Дополнительные сведения см. в разделе Отображение кластеров.
Эффект изменения количества узлов данных для каждого типа кластера, поддерживаемого HDInsight:
Apache Hadoop. Вы можете легко увеличить количество рабочих узлов в кластере Hadoop, работающем без каких-либо ожидающих или запущенных заданий. Вы также можете отправить новые задания во время выполнения операции. Сбои операции масштабирования обрабатываются корректно, поэтому кластер всегда пребывает в функциональном состоянии.
Если уменьшить масштаб кластера Hadoop, сократив количество узлов данных, некоторые службы в нем будут перезапущены. Все выполняемые и ожидающие задания завершаются завершением операции масштабирования. После завершения операции можно повторно отправить задания.
Apache HBase: вы можете легко добавлять или удалять узлы в кластер HBase во время его работы. Региональные серверы автоматически балансируются в течение нескольких минут после завершения операции масштабирования. Вы также можете сбалансировать региональные серверы вручную. Войдите в головной узел кластера и выполните следующие команды из окна командной строки:
>pushd %HBASE_HOME%\bin >hbase shell >balancer
Обновление учетных данных пользователя HTTP
Процедура обновления совпадает с процедурой обновления, используемой для предоставления или отзыва ДОСТУПА ПО HTTP. Если кластер был предоставлен HTTP-доступ, необходимо сначала отозвать его. Затем вы можете предоставить доступ с новыми учетными данными пользователя HTTP.
Поиск учетной записи хранения по умолчанию
В следующем фрагменте кода показано, как получить имя и ключ учетной записи хранения по умолчанию для кластера.
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]));
}
Отправка заданий
Узнайте, как отправлять задания для следующих продуктов:
- MapReduce: выполнение примеров MapReduce в HDInsight
- Apache Hive: выполнение запросов Apache Hive с помощью пакета SDK для .NET
- Apache Sqoop: использование Apache Sqoop с HDInsight
- Apache Oozie: использование Apache Oozie с Hadoop для определения и запуска рабочего процесса в HDInsight
Отправка данных в Хранилище BLOB-объектов Azure
Сведения о передаче данных см. в статье "Отправка данных в HDInsight".