Real-time сохранение изменяющихся данных в Apache SOLR с помощью Kafka + Lily HBase Batch Indexer
Apache Solr очень хороший инструмент как для поиска так и для аналитики. Но изменение данных является дорогой операцией и желательно это не делать вообще или делать это как можно реже.
Для этого был разработан подход на базе key-value базы HBase которая хорошо работает с обновлением данных. После сохранение обновлений в HBase, данные с помощью Lily HBase Batch Indexer считываются изменения с update log-a в HBase и заливают изменения в индекс Solr.
Для начала создаём таблицу в HBase:
Далее создаём индекс в Solr в который будут сохранятся изменения из HBase:
Далее нам нужно настроить Lily HBase indexer используя утилиту hbase-indexer. Конфигурация происходит xml файле как приведено ниже:
Далее необходимо создать настройки обработки и сохранения данных для morphline:
Строка extractHBaseCells извлекает extracts данные из HBase и трансформирует их в SolrInputDocument.
Стоит заметить, что файл настроек для morphline не должен иметь строку loadSolr. Суть в том, что именно Lily HBase Indexer отвечает за сохранение документов в Solr а не morphline.
Есть нюанс, что файлы с настройками должны быть доступны на всех серверах. Потому файлы предварительно нужно скопировать на все сервера с помощью утилиты scp, rsync или любой другой утилиты.
Осталось только запустить создание индекса в Solr для HBase таблички с помощью hbase-indexer:
Полезные ссылки:
Для этого был разработан подход на базе key-value базы HBase которая хорошо работает с обновлением данных. После сохранение обновлений в HBase, данные с помощью Lily HBase Batch Indexer считываются изменения с update log-a в HBase и заливают изменения в индекс Solr.
Для начала создаём таблицу в HBase:
hbase shell
hbase(main):021:0> create 'table_for_index', {NAME => 'data', REPLICATION_SCOPE => 1}
hbase(main):021:0> put 'table_for_index', 'row1', 'data', 'value'
hbase(main):022:0> put 'table_for_index', 'row2', 'data', 'value2'
Далее создаём индекс в Solr в который будут сохранятся изменения из HBase:
solrctl instancedir --generate $HOME/hbase-index
//Вносим необходимые поля из HBase таблички
vim $HOME/hbase-collection1/conf/schema.xml
solrctl instancedir --create hbase-index $HOME/hbase-index
solrctl collection --create hbase-index
Далее нам нужно настроить Lily HBase indexer используя утилиту hbase-indexer. Конфигурация происходит xml файле как приведено ниже:
cat $HOME/morphline-hbase-index-mapper.xml
<indexer mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper" table="table_for_index">
<!-- Путь к локальному файлу с настроками для morphline. -->
<param name="morphlineFile" value="/etc/hbase-solr/conf/morphlines.conf" />
<!--Указываем morphlineId идентификатор в файле настроек для morphline -->
<param name="morphlineId" value="morphline1"/>
</indexer>
Далее необходимо создать настройки обработки и сохранения данных для morphline:
cat /etc/hbase-solr/conf/morphlines.conf
morphlines : [
{
id : morphline1
importCommands : ["org.kitesdk.morphline.**", "com.ngdata.**"]
commands : [
{
extractHBaseCells {
mappings : [
{
inputColumn : "data:*"
outputField : "data"
type : string
source : value
}
]
}
}
{ logTrace { format : "output record: {}", args : ["@{}"] } }
]
}
]
Строка extractHBaseCells извлекает extracts данные из HBase и трансформирует их в SolrInputDocument.
Стоит заметить, что файл настроек для morphline не должен иметь строку loadSolr. Суть в том, что именно Lily HBase Indexer отвечает за сохранение документов в Solr а не morphline.
Есть нюанс, что файлы с настройками должны быть доступны на всех серверах. Потому файлы предварительно нужно скопировать на все сервера с помощью утилиты scp, rsync или любой другой утилиты.
Осталось только запустить создание индекса в Solr для HBase таблички с помощью hbase-indexer:
hbase-indexer add-indexer -n hbase_indexer_from_table_for_index-to-hbase-indexer \
-c $HOME/morphline-hbase-index-mapper.xml \
-cp solr.zk=127.0.0.1:2181/solr -cp solr.collection=hbase-index
Полезные ссылки:
Коментарі
Дописати коментар