Группы агрегации
Группы агрегации можно настроить в дополнительных настройках Cube Designer. Теоретически N-мерный куб будет строить 2 ^ N кубоидов.С увеличением размеров количество кубоидов будет увеличиваться экспоненциально, пространство для хранения будет увеличиваться, а время строительства увеличится. Цель групп агрегации состоит в том, чтобы сгруппировать измерения и уменьшить количество ненужных комбинаций измерений, тем самым уменьшив количество кубоидов.
Измерение, установленное после группировки, поддерживает три конфигурации: необходимое измерение, иерархическое измерение и объединенное измерение.
Обязательный параметр
Пользователи особенно чувствительны к одному или нескольким измерениям. Если эти измерения GROUP BY существуют во всех запросах, эти измерения можно настроить как необходимые измерения.
Измерения иерархии
Измерение с иерархическими отношениями, например страна, провинция и город. В этих трех измерениях есть три типа запросов:
- group by country
- where country='xxx' group by province
- where country='xxx' and province='zzz' group by city
Совместные размеры
Совместное измерение представляет собой неделимый набор измерений.
Оптимизация строк
Kylin использует HBase в качестве механизма хранения Cube. HBase — это база данных типа "ключ-значение" экосистемы Hadoop. Она поддерживает произвольные запросы и запись по ключу. Этот ключ называется Rowkey в HBase.
Кодировка измерения
Для кодирования измерения значение измерения может быть преобразовано в байты той же длины.Подходящий метод кодирования может эффективно уменьшить занимаемое пространство и повысить эффективность запроса.
-
диктовать Кодирование словаря, которое будет извлекать уникальное значение широты и создавать словарь в памяти. Rowkey использует ключ словаря для замены значения широты. Словарь находится в памяти и мало влияет на запрос, но словарь не может превышать размер кеша, иначе в процессе сборки куба произойдет переполнение кеша. Кардинальность поля кодирования dict по умолчанию равна
5,000,000
внутри, черезkylin.dictionary.max.cardinality
Изменить, в этом случае лучше использовать другие типы кодирования. Словарь dict подходит для средних и низких базовых размеров, таких как информация о регионе, стране, провинции и городе. -
фиксированная длина Используйте фиксированную длину N для хранения значений размеров, и детали, превышающие длину, будут усечены. Если N слишком велико, Rowkey будет слишком длинным, и производительность HBase ухудшится. fixed_length подходит для сверхвысоких базовых сценариев, таких как телефонные номера, IP-адреса и т. д.
-
fixed_length_hex Для размеров, значение которых является шестнадцатеричным, например значение после Base64.
-
целое число Целочисленный тип без преобразования кодировки.
Length
Диапазон длины 1~8, поддерживаемый целочисленный диапазон[-2^(8*N-1) ~ 2^(8*N-1)]
. -
Дата Тип даты. Применяется 3-байтовая кодировка.
-
время Тип Timestamp, миллисекундная часть игнорируется.
-
логический Используйте 1 байт для представления логического значения.
порядок измерения
Данные в HBase хранятся в лексикографическом порядке Rowkey.
- Параметры с высокой частотой запросов помещаются перед низкими
- Высокие базовые размеры помещаются перед низкими базовыми размерами.
Измерение сегментирования Shard By
Ряды могут быть настроены для одного (и не более одного) измеренияShard By
значениеtrue
.
Кубу необходимо распределять данные промежуточной таблицы по узлам HDFS в процессе построения.Режим разделения по умолчанию — случайный. Если размер сегмента указан, размер сегмента используется в качестве раздела. Целью разделения является предотвращение перекоса данных, вызванного разницей в размерах промежуточных таблиц, поэтому в измерении Shard By следует использовать высокое базовое измерение, чтобы степень детализации сегментирования была достаточно малой для ускорения последующих вычислительных задач MR.
Обратите внимание, что измерение раздела отличается от измерения раздела куба.Первое действует на этапе сборки, а второе используется для разделения периодов времени для поддержки добавочных сборок.
Оптимизация словарей Расширенные словари
- Глобальный словарь Словарь, используемый для точного вычисления COUNT DISTINCT, который преобразует нецелое значение в целое для дедупликации растрового изображения. Если столбец, в котором вы хотите вычислить COUNT DISTINCT, уже имеет целочисленный тип, вам не нужно определять глобальный словарь. Глобальный словарь будет использоваться всеми сегментами, поэтому он поддерживает объединение и дедупликацию между сегментами. Обратите внимание, что глобальный словарь может увеличиваться по мере загрузки данных.
- Словарь сегментов Словарь, используемый для точного вычисления COUNT DISTINCT, в отличие от глобального словаря, построен на основе значения сегмента, поэтому агрегированные вычисления по сегментам не поддерживаются. Если ваш куб не разделен или вы можете гарантировать, что весь ваш SQL сгруппирован по partition_column, тогда вам следует использовать «Словарь сегментов» вместо «Глобальный словарь», что может избежать проблемы слишком большого размера одного словаря.
- Повторное использование словаря Если столбец A является подмножеством столбца B, то столбец A может повторно использовать словарь столбца B.
Оптимизация семейства столбцов Advanced ColumnFamily
Kylin по умолчанию помещает все метрики в кластер из 1 столбца в HBase. Каждая мера COUNT DISTINCT использует растровое изображение для хранения подробных данных, и такая мера имеет большое количество элементов. Несколько таких показателей хранятся в одном кластере столбцов. Расчет очень трудоемок, и несколько показателей COUNT DISTINCT или TopN могут быть помещены в несколько кластеров столбцов (разные кластеры столбцов хранятся в разных хранилищах) для оптимизации операций ввода-вывода с помощью HBase. .Обратите внимание, что кластеры столбцов HBase лучше всего контролировать на уровне 2-3.
Обычный столбец VS производный столбец
В LookupTable вы можете установить столбцы какNormal
илиDerived
.
Когда одно или несколько измерений могут быть получены из другого измерения (обычно внешнего ключа к таблице фактов), рассмотрите возможность установки этого столбца в качестве производного столбца. Производные столбцы не участвуют в вычислениях куба.New Model
серединаNew Join Condition
, левая сторона — это внешний ключ таблицы фактов, а правая сторона — это первичный ключ таблицы поиска.
Точная дедупликация Distinct Count
Для поддержки сводной агрегации с произвольной степенью детализации точная дедупликация должна сохранять подробные данные, поэтому используйте Bitmap для сохранения точных данных метрик дедупликации. Kylin использует библиотеку RoaringBitmap. RoaringBitmap поддерживает только данные типа Int, поэтому Kylin вводит глобальный словарь, чтобы гарантировать согласованность отображения из String в Int в разных сегментах. Основной структурой данных глобального словаря является AppendTrieDictionary.
Примерная дедупликация
Приблизительная дедупликация Kylin, основанная на HLL (HyperLogLog)выполнить. Проще говоря, каждое значение, которое необходимо посчитать, будет вычислено определенной хеш-функцией, полученное хэш-значение будет помещено в массив байтов, и, наконец, содержимое байтовых данных будет подсчитано в соответствии с определенным алгоритмом, и приблизительное значение может быть получено тяжелые результаты.
Скорость расширения
Скорость расширения относится к размеру куба/исходному размеру таблицы. Скорость расширения должна контролироваться в пределах 10 раз. Факторы, влияющие на размер куба:
- Количество измерений куба велико, и оптимизация сокращения кубоида не выполняется, что приводит к огромному количеству кубоидов.
- Кубы имеют большие кардинальные измерения, что приводит к очень большим кубам, содержащим такие измерения.
- Есть меры, которые занимают много места, например, COUNT DISTINCT.
Сверхвысокая кардинальная размерность UHC
UHC расшифровывается как Ultra High Cardinality, то есть Ultra High Cardinality. Кардинальность представляет собой количество различных значений для измерения. Обычно мощность измерений колеблется от десятков до миллионов. Если оно превышает миллион, мы называем его сверхбазовым параметром, например: идентификатор пользователя, номер телефона и т. д.
Справочная документация
- Оптимизация Apache Kylin — расширенные настройки куба
- Kylin Combat (4): настройка Rowkey
- Полное руководство по точной дедупликации и глобальным словарям в Apache Kylin
- Демистификация Apache Kylin Exact Counting и Global Dictionary