Ручное масштабирование кластеров Azure HDInsight

HDInsight обеспечивает гибкость, предоставляя возможность увеличивать и уменьшать количество рабочих узлов в кластерах. Такая эластичность позволяет уменьшать размер кластера в нерабочее время или в выходные дни и расширять его во время пиковых бизнес-нагрузок.

Перед периодической пакетной обработкой увеличьте масштаб кластера, чтобы у кластера было достаточно ресурсов. После завершения обработки и снижения потребления ресурсов уменьшите масштаб кластера HDInsight, сократив количество рабочих узлов.

Вы можете масштабировать кластер вручную с помощью одного из следующих методов. Вы также можете использовать параметры автомасштабирования для автоматического увеличения и уменьшения в зависимости от определенных метрик.

Примечание.

Поддерживаются только кластеры HDInsight версии 3.1.3 или более поздней. Если вы не знаете версию кластера, см. страницу «Свойства».

Служебные программы для масштабирования кластеров

Майкрософт предоставляет следующие служебные программы для масштабирования кластеров.

Utility Description
PowerShell Az Set-AzHDInsightClusterSize -ClusterName CLUSTERNAME -TargetInstanceCount NEWSIZE
PowerShell AzureRM Set-AzureRmHDInsightClusterSize -ClusterName CLUSTERNAME -TargetInstanceCount NEWSIZE
Azure CLI az hdinsight resize --resource-group RESOURCEGROUP --name CLUSTERNAME --workernode-count NEWSIZE
Классический Azure CLI azure hdinsight cluster resize CLUSTERNAME NEWSIZE
Портал Azure Откройте панель кластера HDInsight, в меню слева выберите Размер кластера, затем на панели размера кластера введите число рабочих узлов и нажмите кнопку "Сохранить".

Azure portal scale cluster option.

С помощью любого из этих методов можно увеличивать или уменьшать масштаб кластера HDInsight за считанные минуты.

Внимание

  • Классический интерфейс командной строки Azure устарел, и его следует использовать только с классической моделью развертывания. Для всех других развертываний используйте Azure CLI.
  • Модуль PowerShell AzureRM устарел. По возможности всегда используйте модуль Az.

Влияние операций масштабирования

При добавлении узлов в запущенный кластер HDInsight (увеличение масштаба) задания остаются небезопасными. Во время масштабирования можно безопасно передать новые задания. Если операция масштабирования завершается сбоем, сбой покидает кластер в функциональном состоянии.

Если удалить узлы (уменьшить масштаб), ожидающие или выполняющиеся задания завершаются сбоем при завершении операции масштабирования. Этот сбой вызван тем, что некоторые службы перезапускаются во время процесса уменьшения масштаба. Кластер может зависнуть в защищенном режиме во время операции масштабирования вручную.

Ниже представлены возможности, связанные с изменением количества узлов данных в кластере каждого типа, поддерживаемого в HDInsight:

  • Apache Hadoop

    Вы можете легко увеличивать количество рабочих узлов в работающем кластере Hadoop. Это не повлияет ни на какие задания. В ходе выполнения операции можно также отправлять новые задания. Сбои в операции масштабирования аккуратно обрабатываются. Кластер всегда остается в рабочем состоянии.

    Когда в кластере Hadoop количество узлов данных сокращается, некоторые службы перезапускаются. Это приведет к сбою всех выполняющихся и ожидающих заданий при завершении операции масштабирования. Однако после завершения операции вы можете повторно отправить задания.

  • Apache HBase

    Вы можете с легкостью добавлять и удалять узлы в работающем кластере HBase. Балансировка региональных серверов выполняется автоматически в течение нескольких минут после завершения операции масштабирования. Однако можно вручную сбалансировать региональные серверы. Войдите в кластер головного узла и выполните следующие команды.

    pushd %HBASE_HOME%\bin
    hbase shell
    balancer
    

    Дополнительные сведения об использовании оболочки HBase см. в статье Начало работы с примером Apache HBase в HDInsight.

  • Kafka

    выполните повторную балансировку реплик разделов после масштабирования. Дополнительные сведения см. в документе о высоком уровне доступности данных при использовании Apache Kafka в HDInsight.

  • Apache Hive LLAP

    После масштабирования до N рабочих узлов HDInsight автоматически установите следующие конфигурации и перезапустите Hive.

    • Максимальное число одновременных запросов: hive.server2.tez.sessions.per.default.queue = min(N, 32)
    • Число узлов, используемых Hive LLAP: num_llap_nodes = N
    • Число узлов для запуска управляющей программы Hive LLAP: num_llap_nodes_for_llap_daemons = N

Безопасное уменьшение масштаба кластера

Уменьшение масштаба кластера с выполняющимися заданиями

Существует три способа избежать сбоя выполняющихся заданий во время операции уменьшения масштаба.

  1. Дождитесь завершения заданий, прежде чем уменьшать масштаб кластера.
  2. Завершите задания вручную.
  3. Повторно отправьте задания после завершения операции масштабирования.

Список ожидающих или выполняемых заданий можно просмотреть с помощью пользовательского интерфейса Resource Manager в YARN, выполнив следующие действия.

  1. На портале Azure выберите свой кластер. Кластер откроется на новой странице портала.

  2. В главном представлении последовательно выберите Панели мониторинга кластера>Домашняя страница Ambari. Введите учетные данные кластера.

  3. В пользовательском интерфейсе Ambari выберите YARN в списке служб в меню слева.

  4. На странице YARN выберите Быстрые ссылки и наведите указатель мыши на активный головной узел, а затем щелкните пользовательский интерфейс Resource Manager.

    Apache Ambari quick links Resource Manager UI.

Вы можете открыть пользовательский интерфейс Resource Manager напрямую с помощью https://<HDInsightClusterName>.azurehdinsight.net/yarnui/hn/cluster.

Вы увидите список заданий и их текущее состояние. На снимке экрана видно, что в текущий момент выполняется одно задание:

Resource Manager UI applications.

Чтобы вручную завершить работу запущенного приложения, из оболочки SSH выполните команду ниже:

yarn application -kill <application_id>

Например:

yarn application -kill "application_1499348398273_0003"

Возникла проблема в безопасном режиме

При уменьшении масштаба кластера HDInsight использует интерфейсы управления Apache Ambari для первого списания лишних рабочих узлов. Узлы реплицируют свои блоки HDFS в другие сетевые рабочие узлы. После этого HDInsight безопасно уменьшает масштаб кластера. Во время операции масштабирования HDFS переходит в безопасный режим. Предполагается, что HDFS после завершения масштабирования вернется в нормальный режим. Однако в некоторых случаях HDFS застревает в безопасном режиме во время операции масштабирования из-за блокирования файла при репликации.

По умолчанию HDFS настраивается с параметром dfs.replication, имеющим значение 1. Этот параметр определяет, сколько копий каждого блока файлов доступно. Все копии блока файла хранятся на разных узлах кластера.

Если ожидаемое число копий блока недоступно, HDFS переходит в безопасный режим, а Ambari создает предупреждения. HDFS может переходить в безопасный режим для операции масштабирования. Кластер может застрять в безопасном режиме, если для репликации не обнаружено необходимое количество узлов.

Примеры ошибок, когда включен безопасный режим

org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /tmp/hive/hive/819c215c-6d87-4311-97c8-4f0b9d2adcf0. Name node is in safe mode.
org.apache.http.conn.HttpHostConnectException: Connect to active-headnode-name.servername.internal.cloudapp.net:10001 [active-headnode-name.servername. internal.cloudapp.net/1.1.1.1] failed: Connection refused

Вы можете изучить журналы узла имени в папке /var/log/hadoop/hdfs/ примерно в то же время, когда было выполнено масштабирование кластера, чтобы проследить, когда был активирован безопасный режим. Файлам журнала присвоено имя Hadoop-hdfs-namenode-<active-headnode-name>.*.

Основной причиной была зависимость Hive от временных файлов в HDFS во время выполнения запросов. Когда HDFS переходит в безопасный режим, Hive не может выполнять запросы, так как не удается произвести запись в HDFS. Временные файлы в HDFS находятся на локальном диске, подключенном к виртуальным машинам отдельных рабочих узлов. Файлы реплицируются между другими рабочими узлами как минимум в трех репликах.

Как предотвратить застревание HDInsight в безопасном режиме

Есть несколько способов предотвратить зависание HDInsight в безопасном режиме.

  • Остановите все задания Hive перед уменьшением масштаба HDInsight. Кроме того, можно запланировать операцию уменьшения масштаба, чтобы избежать конфликта с запущенными заданиями Hive.
  • Вручную очистите пустые файлы в каталоге tmp Hive в HDFS, а затем приступите к уменьшению масштаба.
  • Выполните уменьшение масштаба HDInsight как минимум до трех рабочих узлов. Старайтесь избежать масштабирования до одного рабочего узла.
  • При необходимости выполните команду, чтобы отключить безопасный режим.

В разделах ниже описываются эти параметры.

Остановка всех заданий Hive

Остановите все задания Hive перед уменьшением масштаба до одного рабочего узла. Если запланирована рабочая нагрузка, выполните уменьшение масштаба после завершения работы Hive.

Остановите задания Hive перед масштабированием, чтобы свести к минимуму количество цараповых файлов в папке tmp (если таковые есть).

Очистка пустых файлов Hive вручную

Если при работе Hive остались временные файлы, их можно вручную очистить, а затем выполнить уменьшение масштаба, чтобы избежать активации безопасного режима.

  1. Проверьте, какое расположение используется для временных файлов Hive, просмотрев свойство конфигурации hive.exec.scratchdir. Этот параметр задается в /etc/hive/conf/hive-site.xml:

    <property>
        <name>hive.exec.scratchdir</name>
        <value>hdfs://mycluster/tmp/hive</value>
    </property>
    
  2. Остановите службы Hive и убедитесь, что выполнены все задания и запросы.

  3. Получите список содержимого указанного выше вспомогательного каталога hdfs://mycluster/tmp/hive/, чтобы увидеть, содержит ли он какие-либо файлы:

    hadoop fs -ls -R hdfs://mycluster/tmp/hive/hive
    

    Ниже приведен пример выходных данных при наличии файлов:

    sshuser@scalin:~$ hadoop fs -ls -R hdfs://mycluster/tmp/hive/hive
    drwx------   - hive hdfs          0 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c
    drwx------   - hive hdfs          0 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c/_tmp_space.db
    -rw-r--r--   3 hive hdfs         27 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c/inuse.info
    -rw-r--r--   3 hive hdfs          0 2017-07-06 13:40 hdfs://mycluster/tmp/hive/hive/4f3f4253-e6d0-42ac-88bc-90f0ea03602c/inuse.lck
    drwx------   - hive hdfs          0 2017-07-06 20:30 hdfs://mycluster/tmp/hive/hive/c108f1c2-453e-400f-ac3e-e3a9b0d22699
    -rw-r--r--   3 hive hdfs         26 2017-07-06 20:30 hdfs://mycluster/tmp/hive/hive/c108f1c2-453e-400f-ac3e-e3a9b0d22699/inuse.info
    
  4. Если эти файлы обработаны Hive, их можно удалить. Просмотрите страницу пользовательского интерфейса Yarn Resource Manager, чтобы убедиться в отсутствии запущенных запросов Hive.

    Пример командной строки для удаления файлов из HDFS:

    hadoop fs -rm -r -skipTrash hdfs://mycluster/tmp/hive/
    

Масштабирование HDInsight до трех или более рабочих узлов

Если кластеры постоянно задерживаются в безопасном режиме при сокращении количества рабочих узлов до менее трех, следует поддерживать по крайней мере три рабочих узла.

Наличие трех рабочих узлов обходится дороже, чем одного рабочего узла. Однако это действие предотвращает зависание кластера в безопасном режиме.

Уменьшение масштаба HDInsight до одного рабочего узла

Даже если кластер масштабируется до одного узла, рабочий узел 0 по-прежнему сохраняется. Рабочий узел 0 нельзя списать.

Выполнение команды для отключения безопасного режима

Последний вариант — выполнить команду выхода из безопасного режима. Если HDFS вошел в безопасный режим из-за файла Hive в процессе репликации, выполните следующую команду, чтобы выйти из безопасного режима:

hdfs dfsadmin -D 'fs.default.name=hdfs://mycluster/' -safemode leave

Уменьшение масштаба кластера Apache HBase

В течение нескольких минут после завершения операции масштабирования автоматически выполняется балансировка нагрузки на региональные серверы. Чтобы вручную распределить нагрузку между региональными серверами, выполните следующие действия.

  1. Подключитесь к кластеру HDInsight по протоколу SSH. Дополнительные сведения см. в статье Подключение к HDInsight (Hadoop) с помощью SSH.

  2. Запустите оболочку HBase:

    hbase shell
    
  3. Используйте команду ниже, чтобы вручную распределить нагрузку между региональными серверами:

    balancer
    

Следующие шаги

Подробные сведения о масштабировании кластера HDInsight см. в следующих статьях.