Разделение Hadoop. Как эффективно оформить стол Hive/Impala?

Как эффективно составить таблицу Hive/Impala, учитывая следующие факты?

  1. Таблица получает данные инструмента около 100 миллионов строк каждый день. Дата получения данных сохраняется в столбце таблицы вместе с идентификатором инструмента.
  2. Каждый инструмент получает около 500 прогонов в день, что определяется идентификатором прогона колонки. Каждый идентификатор запуска содержит данные размером примерно 1 МБ.
  3. Размер блока по умолчанию составляет 64 МБ.
  4. В таблице можно искать по дате, идентификатору инструмента и идентификатору прогона в этом порядке.

1 ответ

Если вы занимаетесь аналитикой этих данных, то с Impala у вас есть хороший выбор - использовать формат Parquet. Что хорошо для наших пользователей, так это разделение даты по году, месяцу, дню на основе значения даты в записи.

Так, например, CREATE TABLE foo (tool_id int, eff_dt timestamp) раздел (year int, month int, day int) хранится как паркет

При загрузке данных в эту таблицу мы используем нечто подобное для создания динамических разделов:

INSERT INTO foo partition (year, month, day)
SELECT tool_id, eff_dt, year(eff_dt), month(eff_dt), day(eff_dt)
FROM source_table;

Затем вы обучаете своих пользователей тому, что если они хотят лучшей производительности, добавьте в свои ГОД, МЕСЯЦ, ДЕНЬ WHERE пункт, так что он попадает в раздел для лучшей производительности. Затем попросите их добавить eff_dt в SELECT Таким образом, они имеют значение даты в том формате, который им нравится видеть в своих окончательных результатах.

В CDH Parquet хранит данные по умолчанию в блоках по 256 МБ (это настраивается). Вот как это настроить: http://www.cloudera.com/documentation/enterprise/latest/topics/impala_parquet_file_size.html

Другие вопросы по тегам