Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом документе описывается размер кластера интерактивных запросов HDInsight (кластер Hive LLAP) для обычной рабочей нагрузки для достижения разумной производительности. Обратите внимание, что в этом документе приведены общие рекомендации и для конкретных рабочих нагрузок может потребоваться специфичная тонкая настройка.
Типы виртуальных машин Azure по умолчанию для кластера HDInsight Interactive Query (LLAP)
| Тип узла | Экземпляр | Размер |
|---|---|---|
| Голова | D13 v2 | 8 vcpus, 56 ГБ ОЗУ, 400 ГБ SSD |
| Рабочий | D14 v2 |
16 vcpus, 112 ГБ ОЗУ, 800 ГБ SSD |
| ZooKeeper | A4 v2 | 4 , 8 ГБ ОЗУ, 40 vcpusГБ SSD |
Примечание. Все рекомендуемые значения конфигураций основаны на рабочем узле типа D14 версии 2
Конфигурация.
| Ключ конфигурации | Рекомендуемое значение | Описание |
|---|---|---|
| yarn.nodemanager.resource.memory-mb | 102400 (MБ) | Общий объем памяти в МБ, выделенный для всех контейнеров YARN на узле. |
| yarn.scheduler.maximum-allocation-mb | 102400 (MБ) | Максимальное выделение памяти в МБ для каждого запроса контейнера в Resource Manager. Запросы на память выше этого значения не будут выполнены. |
| yarn.scheduler.maximum-allocation-vcores | 12 | Максимальное количество ядер ЦП для каждого запроса контейнера в Resource Manager. Запросы, превышающие это значение, не будут иметь эффекта. |
| yarn.nodemanager.resource.cpu-vcores | 12 | Количество ядер ЦП, которые могут быть выделены на каждый NodeManager для контейнеров. |
| yarn.scheduler.capacity.root.llap.capacity | 85 (%) | Выделение емкости YARN для очереди LLAP |
| tez.am.ресурс.память.мб | 4096 (МБ) | Объем памяти в МБ, используемый Tez AppMaster. |
| hive.server2.tez.sessions.per.default.queue | <количество_рабочих_узлов> | Число сеансов для каждой очереди, заданной в hive.server2.tez.default.queues. Это число соответствует количеству координаторов запросов (менеджеров приложений Tez). |
| hive.tez.container.size | 4096 (МБ) | Заданный размер контейнера Tez в МБ. |
| hive.llap.daemon.num.executors | 19 | Число исполнителей на одну управляющую программу LLAP. |
| hive.llap.io.threadpool.size | 19 | Размер пула потоков для выполнителей. |
| hive.llap.daemon.yarn.container.mb | 81920 (МБ) | Общий объем памяти в МБ, используемый отдельными управляющими программами LLAP (памяти на одну управляющую программу). |
| hive.llap.io.memory.size | 242688 (МБ) | Размер кэша в МБ на одну управляющую программу LLAP при условии, что кэш SSD включен. |
| hive.auto.convert.join.noconditionaltask.size | 2048 (МБ) | Размер памяти в МБ для Map Join |
Архитектура/компоненты LLAP:
Оценка размеров демона LLAP
1. Определение общего выделения памяти YARN для всех контейнеров на узле
Конфигурация: yarn.nodemanager.resource.memory-mb
Это значение указывает максимальный общий объем памяти в МБ, которая может использоваться контейнерами YARN на каждом узле. Указанное значение должно быть меньше, чем общий объем физической памяти на этом узле.
Общий объем памяти для всех контейнеров YARN на узле = (Общий объем физической памяти – память для ОС + другие службы)
Присвойте этому параметру значение около 90 % от всей доступной оперативной памяти.
Для D14 v2 рекомендуется значение 102400 МБ.
2. Определение максимального объема памяти на запрос контейнера YARN
Конфигурация: yarn.scheduler.maximum-allocation-mb
Это значение указывает на максимальное выделение памяти в МБ для каждого запроса контейнера в Resource Manager. Запросы на память выше указанного значения не будут выполнены. Resource Manager может предоставлять память контейнерам в объеме yarn.scheduler.minimum-allocation-mb и не может превышать размер, заданный yarn.scheduler.maximum-allocation-mb. Указанное значение не должно превышать общую память для всех контейнеров на узле, заданную ключом yarn.nodemanager.resource.memory-mb.
Для рабочих узлов D14 v2 рекомендуется значение 102400 МБ
3. Определение максимального количества vcores запросов на контейнер YARN
Конфигурация: yarn.scheduler.maximum-allocation-vcores
Это значение указывает максимальное количество ядер виртуального ЦП для каждого запроса контейнера в диспетчере ресурсов. Запрос числа vcores выше допустимого значения не вступит в силу. Это является глобальным свойством планировщика YARN. Для контейнера управляющей программы LLAP это значение может иметь значение 75 % от общего количества доступных vcores. Оставшиеся 25 % должны быть зарезервированы для NodeManager, DataNode и других служб, работающих на рабочих узлах.
На 16 vcores виртуальных машинах D14 версии 2 и 75 % всего 16 vcores можно использовать контейнером управляющей программы LLAP.
Для D14 v2 рекомендуется значение 12.
4. Количество одновременных запросов
Конфигурация: hive.server2.tez.sessions.per.default.queue
Это значение конфигурации определяет количество сеансов Tez, которые должны быть запущены параллельно. Эти сеансы Tez запускаются для каждой из очередей, указанных в "hive.server2.tez.default.queues". Это соответствует количеству Tez AMs (координаторов запросов). Рекомендуется, чтобы это значение совпадало с количеством рабочих узлов. Число Tez AM может быть выше, чем число узлов управляющей программы LLAP. Основная задача ведущего приложения Tez заключается в координации выполнения запроса и назначении фрагментов плана запроса соответствующим демонам LLAP для выполнения. Сохраните это значение кратным количеству демонов LLAP для достижения более высокой пропускной способности.
Кластер HDInsight по умолчанию имеет четыре управляющие программы LLAP, выполняющиеся на четырех рабочих узлах, поэтому рекомендуемое значение равно 4.
Ползунок пользовательского интерфейса Ambari для переменной конфигурации Hive hive.server2.tez.sessions.per.default.queue:
5. Размер контейнера Tez и главного приложения Tez
Конфигурация: tez.am.resource.memory.mb, hive.tez.container.size
tez.am.resource.memory.mb определяет размер мастер-приложения Tez.
Рекомендуется использовать значение 4096 МБ.
hive.tez.container.size определяет объем памяти, выделяемый контейнеру Tez. Это значение должно быть задано в диапазоне от минимального (yarn.scheduler.minimum-allocation-mb) до максимального (yarn.scheduler.maximum-allocation-mb) размера контейнера YARN. Исполнители управляющей программы LLAP используют это значение для ограничения использования памяти каждым исполнителем.
Рекомендуется использовать значение 4096 МБ.
6. Выделение емкости очереди LLAP
Конфигурация: yarn.scheduler.capacity.root.llap.capacity
Это значение указывает на процент емкости, выделенной для очереди LLAP. Выделенная емкость может отличаться для разных рабочих нагрузок в зависимости от настройки очередей YARN. Если ваша рабочая нагрузка состоит только из операций чтения, то можно задать для нее до 90% вместимости. Однако если рабочая нагрузка объединяет в себе операции обновления, удаления или слияния с помощью управляемых таблиц, рекомендуется предоставить для очереди LLAP 85 % емкости. Оставшиеся 15 % емкости могут использоваться другими задачами, такими как сжатие и т. п., для выделения контейнеров из очереди по умолчанию. Таким образом ресурсы YARN не будут расходоваться на задачи в очереди по умолчанию.
Для рабочих узлов D14v2 рекомендуемое значение для очереди LLAP равно 85.
(Для рабочих нагрузок только чтения, это значение можно увеличить до 90 при условии, что это будет подходяще.)
7. Размер контейнера управляющей программы LLAP
Конфигурация: hive.llap.daemon.yarn.container.mb
Управляющая программа LLAP запускается как контейнер YARN на каждом рабочем узле. Общий объем памяти для контейнера управляющей программы LLAP зависит от следующих факторов:
- конфигурации для размера контейнера YARN (yarn.scheduler.minimum-allocation-mb, yarn.scheduler.maximum-allocation-mb, yarn.nodemanager.resource.memory-mb);
- число мастер-приложений Tez на узле
- общего объема памяти, настроенного для всех контейнеров на узле, и емкости очереди LLAP.
Память, необходимая для мастер-приложений Tez (Tez AM), может быть рассчитана следующим образом.
Tez AM выступает в качестве координатора запросов, и количество Tez AMs должно быть настроено на основе множества параллельных запросов, которые будут обслуживаться. Теоретически мы можем рассмотреть один Tez AM на каждый рабочий узел. Однако возможно, что на рабочем узле может быть больше одного Tez AM. Для целей вычисления предполагается равномерное распределение Tez AM по всем узлам управляющей программы LLAP и рабочим узлам.
Рекомендуется выделить 4 ГБ памяти на каждое приложение-мастер Tez.
Число Tez AM = значение, заданное в файле конфигурации Hive hive.server2.tez.sessions.per.default.queue.
Число узлов управляющей программы LLAP задается переменной среды num_llap_nodes_for_llap_daemons в пользовательском интерфейсе Ambari.
Размер контейнера Tez AM = значение, заданное в файле конфигурации tez.am.resource.memory.mb.
Tez AM memory per node = (ceil(Number of Tez AMs / Number of LLAP daemon nodes)x Tez AM container size****
Для D14 v2 конфигурация по умолчанию включает четыре мастера приложений Tez и четыре демон-узла LLAP.
Память Tez AM на узел = (округление вверх (4/4) x 4 ГБ) = 4 ГБ
Общий объем доступной памяти для очереди LLAP на каждый рабочий узел можно вычислить следующим образом.
Это значение зависит от общего объема памяти, доступного для всех контейнеров YARN на узле (yarn.nodemanager.resource.memory-mb) и процент емкости, настроенной для очереди LLAP(yarn.scheduler.capacity.root.llap.capacity).
Общая память для очереди LLAP на рабочем узле = общая память, доступная для всех контейнеров YARN на узле x Процент емкости для очереди LLAP.
Для D14 v2 это значение составляет (100 ГБ x 0,85) = 85 ГБ.
Размер контейнера управляющей программы LLAP вычисляется следующим образом.
Размер контейнера демона LLAP = (общий объем памяти для очереди LLAP на рабочем узле) — (память Tez AM на узел) — (размер контейнера службы Master)
На кластере, размещенном на одном из рабочих узлов, существует только один Мастер службы (мастер-приложение для LLAP-сервиса). Для целей вычисления мы рассмотрим одну мастер-службу на каждый рабочий узел.
Для рабочего узла D14 v2 с HDI 4.0 рекомендуется значение (85 ГБ – 4 ГБ – 1 ГБ) = 80 ГБ
8. Определение количества исполнителей на управляющей программе LLAP
Конфигурация: hive.llap.daemon.num.executors, hive.llap.io.threadpool.size
hive.llap.daemon.num.executors:
Этот параметр управляет количеством исполнителей, которые могут выполнять задачи параллельно, для каждой управляющей программы LLAP. Это значение зависит от числа виртуальных ядер, объема памяти, использованного каждым исполнителем, и общего объема памяти, доступного для контейнера управляющей программы LLAP. Количество исполнителей может быть увеличено до 120% от доступных виртуальных ядер на каждый рабочий узел. Однако его следует скорректировать, если оно не соответствует требованиям к памяти в зависимости от объема памяти, необходимой для каждого исполнителя и размера контейнера управляющей программы LLAP.
Каждый исполнитель эквивалентен контейнеру Tez и может потреблять 4 ГБ памяти (размер контейнера Tez). Все исполнители в управляющей программе LLAP совместно используют одну и ту же память кучи. Предполагая, что не все исполнители выполняют операции с интенсивным использованием памяти одновременно, можно рассмотреть 75% размера контейнера Tez (4 ГБ) для каждого исполнителя. Таким образом можно увеличить количество исполнителей, предоставив каждому исполнителю меньше памяти (например, 3 ГБ) для повышения параллельности. Однако рекомендуется настроить этот параметр под целевую рабочую нагрузку.
На виртуальных машинах D14 v2 имеется 16 виртуальных ядер. Для D14 версии 2 рекомендуемое значение для числа исполнителей — (16 виртуальных ядер x 120 %) ~= 19 на каждом рабочем узле с учетом 3 ГБ на исполнителя.
hive.llap.io.threadpool.size:
Это значение задает размер пула потоков для исполнителей. Поскольку количество исполнителей фиксировано согласно указанным параметрам, это то же самое, что и количество исполнителей на каждого LLAP-демона.
Для D14 v2 рекомендуется значение 19.
9. Определение размера кэша управляющей программы LLAP
Конфигурация: hive.llap.io.memory.size
Память контейнера управляющей программы LLAP состоит из следующих компонентов:
- запас;
- Память кучи, используемая процессами (Xmx)
- Кэш в оперативной памяти на каждый демон (размер памяти вне кучи, не применяется, если включен кэш SSD).
- пространство для метаданных кэша в памяти (применяется, только если включен кэш SSD).
Размер резервной памяти: этот размер указывает на часть памяти вне кучи, используемую для Java виртуальной машины (метапространство, стек потоков, структуры данных и т. д.). Как правило, на эти служебные данные приходится около 6 % от размера кучи (Xmx). Для большей уверенности это значение можно принять равным 6 % от общего объема памяти управляющей программы LLAP.
Для D14 v2 рекомендуемым значением является ceil(80 ГБ x 0,06) ~= 4 ГБ.
Размер кучи (Xmx): объем памяти кучи, доступный для всех исполнителей.
Общий объем памяти кучи = Количество исполнителей x 3 ГБ
Для D14 v2 это значение составляет 19 x 3 ГБ = 57 ГБ
Ambari environment variable for LLAP heap size:
Если кэш SSD отключен, объем памяти для кэша в памяти составляет оставшееся количество памяти после вычитания размера резервного запаса и размера кучи из общего размера контейнера демона LLAP.
При включенном кэше SSD размер кэша вычисляется иначе.
Задание hive.llap.io.allocator.mmap = true включает кэширование SSD.
Если кэш SSD включен, часть памяти будет использоваться для хранения его метаданных. Метаданные хранятся в памяти, а их объем должен составлять около 8 % от размера кэша SSD.
Размер метаданных кэша SSD в памяти = Размер контейнера управляющей программы LLAP – (Запас + Размер кучи)
Для D14 v2 с HDI 4.0 размер метаданных кэша SSD в памяти = 80 ГБ – (4 ГБ + 57 ГБ) = 19 ГБ
Исходя из размера доступной памяти для хранения метаданных кэша SSD, можно вычислить поддерживаемый размер кэша SSD.
Размер метаданных кэша SSD в памяти = Размер контейнера управляющей программы LLAP – (Запас + Размер кучи) = 19 ГБ
Размер кэша SSD = Размер метаданных в памяти для кэша SSD (19 ГБ) / 0,08 (8 процентов)
Для D14 v2 и HDI 4.0 рекомендуемый размер кэша SSD = 19 ГБ / 0.08 ~= 237 ГБ
10. Настройка памяти для Map Join
Конфигурация: hive.auto.convert.join.noconditionaltask.size
Чтобы этот параметр имел силу, необходимо активировать параметр hive.auto.convert.join.noconditionaltask.
Эта конфигурация определяет порог выбора MapJoin оптимизатором Hive, который учитывает переподписку памяти от других исполнителей, для увеличения места для хеш-таблиц в памяти, чтобы позволить больше преобразований соединений MapJoin. Учитывая 3 ГБ на исполнителя, этот размер может быть превышен до 3 ГБ, но некоторые кучи памяти также могут использоваться для буферов сортировки, буферов перетасовки и т. д. другими операциями.
Поэтому для D14 версии 2 с 3 ГБ памяти на исполнителя рекомендуется задать это значение 2048 МБ.
(Примечание: Возможно, это значение потребуется скорректировать в зависимости от вашей рабочей нагрузки. Установка слишком низкого значения может не позволить использовать функцию автопреобразования, а слишком высокого - привести к ошибкам из-за нехватки памяти или к задержкам в работе сборщика мусора, что может негативно сказаться на производительности.)
11. Количество демонов LLAP
Переменные среды Ambari: num_llap_nodes, num_llap_nodes_for_llap_daemons
num_llap_nodes — указывает количество узлов, используемых службой Hive LLAP, включая узлы под управлением управляющей программы LLAP, мастер-службы LLAP и мастер-приложения Tez (Tez AM).
num_llap_nodes_for_llap_daemons — указанное количество узлов, используемое только для управляющих программ LLAP. Размеры контейнеров демона LLAP устанавливаются таким образом, чтобы занимать максимально допустимый размер узла, что приводит к одному llap демону на каждом узле.
Рекомендуется, чтобы оба значения совпадали с количеством рабочих узлов в кластере интерактивных запросов.
Рекомендации по управлению рабочей нагрузкой
Если вы хотите включить управление рабочей нагрузкой для LLAP, убедитесь, что зарезервировано достаточное количество ресурсов, чтобы управление рабочей нагрузкой выполнялось согласно ожиданиям. Для управления рабочей нагрузкой требуется настройка пользовательской очереди YARN, которая является дополнением к очереди llap. Убедитесь, что общая емкость ресурсов кластера распределяется между llap очередью и очередью для управления рабочими нагрузками в соответствии с вашими требованиями к рабочей нагрузке.
При активации плана ресурсов управление рабочей нагрузкой порождает мастера приложений Tez (Tez AMs).
Примечание.
- Tez AMs, порожденные активацией плана ресурсов, потребляют ресурсы из очереди управления рабочей нагрузкой, как указано в
hive.server2.tez.interactive.queue. - Число Tez AM будет зависеть от значения
QUERY_PARALLELISM, указанного в плане ресурсов. - После активации управления рабочей нагрузкой, Tez AM в очереди LLAP использоваться не будут. Для координации запросов используются только Tez AM из очереди управления рабочей нагрузкой. AM Tez в очереди
llapиспользуются, когда управление рабочей нагрузкой отключено.
Например: общая емкость кластера = 100 ГБ памяти, разделенная между LLAP, управлением рабочей нагрузкой и очередями по умолчанию, следующим образом:
- Емкость очереди LLAP = 70 ГБ
- Емкость очереди управления рабочей нагрузкой = 20 ГБ
- Емкость очереди по умолчанию = 10 ГБ
С 20 ГБ в емкости очереди управления рабочими нагрузками план ресурсов может указать QUERY_PARALLELISM значение как пять, что означает, что управление рабочими нагрузками может запускать пять Tez AM с размером контейнера по 4 ГБ каждый. Если значение QUERY_PARALLELISM превышает емкость, некоторые Tez AM перестанут отвечать в состоянии ACCEPTED. Сервер Hive 2 Interactive не может отправлять фрагменты запросов на виртуальные машины Tez, которые не находятся в RUNNING состоянии.
Дальнейшие действия
Если проблему не удалось устранить путем настройки этих значений, воспользуйтесь следующими ресурсами.
Получите ответы специалистов Azure на сайте поддержки сообщества пользователей Azure.
Подключитесь к @AzureSupport — официальной учетной записи Microsoft Azure, созданной для оптимизации работы клиентов благодаря возможности доступа к ресурсам сообщества Azure, включая ответы на вопросы, поддержку и консультации специалистов.
Если вам нужна дополнительная помощь, отправьте запрос в службу поддержки на портале Azure. Выберите Поддержка в строке меню или откройте центр Справка и поддержка. Дополнительные сведения см. в статье Создание запроса на поддержку Azure. Доступ к управлению подписками и поддержкой выставления счетов уже включен в вашу подписку Microsoft Azure, а техническая поддержка предоставляется в рамках одного из планов Службы поддержки Azure.
Прочие ссылки