1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-hindex

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Вторичный индекс для HBase

======

Этот проект написан полностью на Java и совместим с Apache HBase 0.94.8. Проект открытый и распространяется под лицензией ASL.

Следующие возможности поддерживаются в настоящее время.

  • множественные индексы на таблице,
  • многострочные индексы,
  • индекс на основе части значения столбца,
  • поиск с использованием условий равенства и диапазона через индекс,
  • массовая загрузка данных в индексированную таблицу (индексация выполняется при массовой загрузке).

Как это работает

Вторичный индекс HBase представляет собой серверную реализацию с использованием ко-процессоров, которая хранит данные индекса в отдельной таблице. Индексация осуществляется на уровне регионов, а пользовательский балансировщик ко-локаций регионов индексированной таблицы с регионами фактической таблицы.

si1

Сервер считывает спецификацию индекса, переданную при создании таблицы, и создаёт индексированную таблицу. Для каждой пользовательской таблицы будет создана одна индексированная таблица, где все данные индекса для этой таблицы будут храниться.## Операция записи (Put) При записи строки в таблицу HBase (пользовательскую таблицу), ко-процессоры подготовят и запишут информацию об индексе в соответствующую индексированную таблицу. Ключ строки индексированной таблицы = начало ключа региона + имя индекса + значение индексируемого столбца + ключ строки пользовательской таблицыПример:

Таблица -> tab1, семейство колонок -> cf

Индекс -> idx1, cf1:c1 и idx2, cf1:c2

Индексированная таблица -> tab1_idx (имя пользовательской таблицы с суффиксом "_idx")

si2

Операция сканирования (Scan)

Для сканирования пользовательской таблицы, ко-процессор создаёт сканнер на индексированной таблице, сканирует данные индекса и переходит к конкретным строкам в пользовательской таблице. Эти переходы на HFiles основываются на ключах строк, полученных из данных индекса. Это позволяет пропустить блоки, где данные отсутствуют, и иногда даже пропускать полные HFiles.

si5

si4

Использование

Клиентам необходимо передать 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")

si2

Операция сканирования (Scan)

Для сканирования пользовательской таблицы, ко-процессор создаёт сканнер на индексированной таблице, сканирует данные индекса и переходит к конкретным строкам в пользовательской таблице. Эти переходы на HFiles основываются на ключах строк, полученных из данных индекса. Это позволяет пропустить блоки, где данные отсутствуют, и иногда даже пропускать полные HFiles.

si5

si4

Использование

Клиентам необходимо передать 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 )

Вы можете оставить комментарий после Вход в систему

Введение

hindex — это разработанный компанией Huawei чисто Java-написанный вторичный индекс для HBase, совместимый с Apache HBase 0.94.8. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-hindex.git
git@api.gitlife.ru:oschina-mirror/mirrors-hindex.git
oschina-mirror
mirrors-hindex
mirrors-hindex
master