======
Этот проект написан полностью на Java и совместим с Apache HBase 0.94.8. Проект открытый и распространяется под лицензией ASL.
Следующие возможности поддерживаются в настоящее время.
Вторичный индекс HBase представляет собой серверную реализацию с использованием ко-процессоров, которая хранит данные индекса в отдельной таблице. Индексация осуществляется на уровне регионов, а пользовательский балансировщик ко-локаций регионов индексированной таблицы с регионами фактической таблицы.
Сервер считывает спецификацию индекса, переданную при создании таблицы, и создаёт индексированную таблицу. Для каждой пользовательской таблицы будет создана одна индексированная таблица, где все данные индекса для этой таблицы будут храниться.## Операция записи (Put) При записи строки в таблицу HBase (пользовательскую таблицу), ко-процессоры подготовят и запишут информацию об индексе в соответствующую индексированную таблицу. Ключ строки индексированной таблицы = начало ключа региона + имя индекса + значение индексируемого столбца + ключ строки пользовательской таблицыПример:
Таблица -> tab1, семейство колонок -> cf
Индекс -> idx1, cf1:c1 и idx2, cf1:c2
Индексированная таблица -> tab1_idx (имя пользовательской таблицы с суффиксом "_idx")
Для сканирования пользовательской таблицы, ко-процессор создаёт сканнер на индексированной таблице, сканирует данные индекса и переходит к конкретным строкам в пользовательской таблице. Эти переходы на HFiles основываются на ключах строк, полученных из данных индекса. Это позволяет пропустить блоки, где данные отсутствуют, и иногда даже пропускать полные HFiles.
Клиентам необходимо передать IndexedHTableDescriptor с указанием имени индекса и колонок при создании таблицы
IndexedHTableDescriptor htd = new IndexedHTableDescriptor(usertableName);
IndexingSpecification iSpec = new IndexingSpecification(indexName);
HColumnDescriptor hcd = new HColumnDescriptor(columnFamily);
iSpec.addIndexColumn(hcd, columnQualifier, ValueType.String, 10);
htd.addFamily(hcd);
htd.addIndex(iSpec);
Таблица -> tab1, семейство колонок -> cf
Индекс -> idx1, cf1:c1 и idx2, cf1:c2
Индексированная таблица -> tab1_idx (имя пользовательской таблицы с суффиксом "_idx")
Для сканирования пользовательской таблицы, ко-процессор создаёт сканнер на индексированной таблице, сканирует данные индекса и переходит к конкретным строкам в пользовательской таблице. Эти переходы на HFiles основываются на ключах строк, полученных из данных индекса. Это позволяет пропустить блоки, где данные отсутствуют, и иногда даже пропускать полные HFiles.
Клиентам необходимо передать IndexedHTableDescriptor с указанием имени индекса и колонок при создании таблицы
IndexedHTableDescriptor htd = new IndexedHTableDescriptor(usertableName);
IndexingSpecification iSpec = new IndexingSpecification(indexName);
HColumnDescriptor hcd = new HColumnDescriptor(columnFamily);
iSpec.addIndexColumn(hcd, columnQualifier, ValueType.String, 10);
htd.addFamily(hcd);
htd.addIndex(iSpec);
``` admin.createTable(htd);
Не требуется никаких изменений со стороны клиентских Put и Delete операций, так как операции с индексами выполняются внутренне с помощью ко-процессоров. Не требуется указывать индексы(ы), которые будут использоваться. Реализация вторичного индекса автоматически находит лучший индекс для скана путём анализа применяемых фильтров к запросу.## Исходники
Этот репозиторий содержит исходные коды для поддержки вторичных индексов в Apache HBase 0.94.8.
## Сборка с исходников и тестирование
Процедура сборки с исходников аналогична сборке исходников HBase и требует:
- Java 1.6 или более позднюю версию
- Maven 3.X
Отдельные тестовые исходники (secondaryindex/src/test/java/) доступны для выполнения тестов на вторичных индексах.
## Примечание
Настройте следующие конфигурации в hbase-site.xml для использования вторичных индексов.
**Свойство**
- **Имя** - *hbase.use.secondary.index*
- **Значение** - *true*
- **Описание** - *Активировать это свойство при использовании вторичных индексов*
**Свойство**
- **Имя** - *hbase.coprocessor.master.classes*
- **Значение** - *org.apache.hadoop.hbase.index.coprocessor.master.IndexMasterObserver*
- **Описание** - *Комма-разделённый список org.apache.hadoop.hbase.coprocessor.MasterObserver coprocessors, которые загружаются по умолчанию на активный процесс HMaster. Для любых реализованных методов coprocessor, перечисленные здесь классы будут вызываться последовательно. После реализации своего собственного MasterObserver просто поместите его в classpath HBase и добавьте полностью квалифицированное имя класса здесь.*
*org.apache.hadoop.hbase.index.coprocessor.master.IndexMasterObserver - определяет hook coprocessor для поддержки операций вторичных индексов на мастере.***Свойство**
- **Имя** - *hbase.coprocessor.region.classes*
- **Значение** - *org.apache.hadoop.hbase.index.coprocessor.regionserver.IndexRegionObserver*
- **Описание** - *Комма-разделённый список копроцессоров, которые загружаются по умолчанию на всех таблицах. Для любых переопределённых методов копроцессора, эти классы будут вызываться последовательно. После реализации своего собственного копроцессора просто поместите его в classpath HBase и добавьте полностью квалифицированное имя класса здесь. Копроцессор также может быть загружен по требованию, установив HTableDescriptor.*
*org.apache.hadoop.hbase.index.coprocessor.regionserver.IndexRegionObserver – определяет хук копроцессора для поддержки операций вторичных индексов на регионе.*
__Свойство__
- __Имя__ - *hbase.coprocessor.wal.classes*
- __Значение__ - *org.apache.hadoop.hbase.index.coprocessor.wal.IndexWALObserver*
- __Описание__ - *Классы, определяющие хуки копроцессора для поддержки операций с журналом транзакций (WAL).
org.apache.hadoop.hbase.index.coprocessor.wal.IndexWALObserver — класс, определяющий хуки копроцессора для поддержки операций с журналом транзакций вторичных индексов.*
## Будущие работы
- Динамическое добавление/удаление индекса
- Интеграция управления вторичными индексами в HBase Shell
- Оптимизация сценариев диапазонной выборки
- Поддержка инструмента HBCK для таблиц вторичных индексов
- Оптимизация WAL для записей вторичных индексов
- Реализация плuggable системы для интеллектуальной оценки сканов
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )