2016-09-16 2 views
0

Можем ли мы определить методологию, с помощью которой мы можем решить, следует ли нам искать брэкетинг или разбиение?Сравнительная разница между разбиением и балансировкой в ​​улье

+4

Возможный дубликат [В чем разница между разделением и балансировкой таблицы в Hive?] (Http://stackoverflow.com/questions/19128940/what-is-the-difference-between-partitioning-and-bucketing- а-таблица в улей) –

ответ

3

Обычно разбиение на разделы в улье предлагает способ разделения данных таблицы улья на несколько файлов/каталогов. Но разделение дает эффективные результаты, когда

  • Есть ограниченное число разделов
  • перегородки сравнительно одинакового размера

Но это не может возможно во всех случаях, как, когда секционирования наших таблиц на основе географических местоположений (в том числе 4-5 стран, которые вносят 70-80% от общего объема данных), где в небольших странах данные будут создавать небольшие перегородки (остальные страны мира могут внести вклад лишь в 20-30 лет) % от общих данных). Итак, в этих случаях разделение не будет идеальным.
Чтобы преодолеть проблему переразделения, Hive предоставляет концепцию Bucketing, еще один способ разложения наборов данных таблицы в более управляемые части. Концепция букетинга основана на (хэш-функции на столбчатой ​​колонке) mod (по общему количеству ковшей). Функция hash_function зависит от типа столбца bucketing.
Записи с одним и тем же столбцом в квадратных скобках всегда будут храниться в одном и том же ковше, и физически каждое ведро будет всего лишь файлом в каталоге таблицы, а нумерация ведра - 1.

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

Смежные вопросы