Сценарий раздела Hive и его влияние на производительность - PullRequest
2 голосов
/ 27 октября 2019

Я хочу спросить о количестве разделов улья и о том, как они повлияют на производительность.

позвольте мне отразить это на реальном примере;

У меня есть внешняя таблица, которая ожидает около 500M строк в день из нескольких источников, и она будет иметь 5 столбцов разделов.

в течение одного дня, что привело к 250 разделам и ожиданиесрок годности составляет около 75 тыс., что, как я полагаю, является огромным числом, поскольку при проверке улей может доходить до 10 тыс., но после этого производительность будет плохой ... (и кто-то сказал мне, что разделыне должен превышать 1 КБ на таблицу).

В основном запросы, которые будут выбраны из этой таблицы

50% из них должны использовать точный порядок разделов. 25% должны использовать только 1-3разделы и не используют другие 2. 25% только с использованием 1-го раздела

Так как вы думаете, даже с 1 месяц хранения это может работать хорошо? или может быть достаточно только даты начала ... при условии нормального распределения остальных 4 столбцов (скажем, 500M / 250 разделов, для которых у нас будет 2M строки для каждого раздела).

1 Ответ

0 голосов
/ 28 октября 2019

Я бы пошел с 3 столбцами разделов, так как это а) точно совпадет с ~ 50% ваших профилей запросов, и б) существенно сократит (отрежет) количество отсканированных разделов для остальных 50%. В то же время вам не придется увеличивать объем кучи памяти Hive MetaStore (HMS) и расширять базу данных HMS для эффективной работы с 250 x 364 = 91 000 разделов.

Со времени ограничения 10 КБбыл представлен, значительные усилия были предприняты для улучшения операций, связанных с разделами в HMS. См., Например, JIRA HIVE-13884 , который обеспечивает мотивацию для сохранения этого числа на низком уровне и описывает способ адресации больших чисел:

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

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

...