Как должен выглядеть морфлайн для MapReduceIndexerTool?
Я хочу эффективно просматривать множество журналов (размером около 1 ТБ, размещенных на нескольких машинах).
Для этой цели я хочу построить инфраструктуру, состоящую из Flume, Hadoop и Solr. Flume получит журналы с нескольких машин и поместит их в HDFS.
Теперь я хочу иметь возможность индексировать эти журналы, используя работу по сокращению карты, чтобы иметь возможность искать их с помощью Solr. Я обнаружил, что MapReduceIndexerTool делает это для меня, но я вижу, что для этого нужна морфлина.
Я знаю, что морфлайн, в общем, выполняет набор операций с данными, которые он принимает, но какие операции мне следует выполнять, если я хочу использовать MapReduceIndexerTool?
Я не могу найти ни одного примера на морфлине, адаптированном для этой карты.
Спасибо, с уважением.
2 ответа
Cloudera имеет руководство, которое имеет почти аналогичный вариант использования, приведенный в разделе morphline
,
На этом рисунке источник Flume получает события системного журнала и отправляет их в приемник Flume Morphline, который преобразует каждое событие Flume в запись и передает его в команду readLine. Команда readLine извлекает строку журнала и передает ее в команду grok. Команда grok использует сопоставление с шаблоном регулярного выражения для извлечения некоторых подстрок строки. Он передает полученную структурированную запись в команду loadSolr. Наконец, команда loadSolr загружает запись в Solr, обычно это SolrCloud. При этом необработанные данные или полуструктурированные данные преобразуются в структурированные данные в соответствии с требованиями моделирования приложения.
Пример использования, приведенный в примере, - это то, на что похожи производственные инструменты MapReduceIndexerTool
, Apache Flume Morphline Solr Sink
а также Apache Flume MorphlineInterceptor
и Morphline Lily HBase Indexer работают как часть своей работы, как показано на следующем рисунке:
В общем, в Morplhine вам нужно только прочитать ваши данные, преобразовать их в документы Solr и затем вызвать loadSolr
создать индекс.
Например, это файл moprhline, который я использовал с MapReduceIndexerTools для загрузки данных Avro в Solr:
SOLR_LOCATOR : {
collection : collection1
zkHost : "127.0.0.1:2181/solr"
}
morphlines : [
{
id : morphline1
importCommands : ["org.kitesdk.**"]
commands : [
{
readAvroContainer {}
}
{
extractAvroPaths {
flatten : false
paths : {
id : /id
field1_s : /field1
field2_s : /field2
}
}
}
{
sanitizeUnknownSolrFields {
solrLocator : ${SOLR_LOCATOR}
}
}
{
loadSolr {
solrLocator : ${SOLR_LOCATOR}
}
}
]
}
]
При запуске он читает контейнер avro, сопоставляет поля avro с полями документа, удаляет все остальные поля и использует предоставленные данные соединения Solr для создания индекса. Он основан на этом уроке.
Это команда, которую я использую, чтобы проиндексировать файлы и объединить их с запущенной коллекцией:
sudo -u hdfs hadoop --config /etc/hadoop/conf \
jar /usr/lib/solr/contrib/mr/search-mr-job.jar org.apache.solr.hadoop.MapReduceIndexerTool \
--morphline-file /local/path/morphlines_file \
--output-dir hdfs://localhost/mrit/out \
--zk-host localhost:2181/solr \
--collection collection1 \
--go-live \
hdfs:/mrit/in/my-avro-file.avro
Solr должен быть настроен для работы с HDFS, и коллекция должна существовать.
У меня все эти настройки работают с Solr 4.10 на CDH 5.7 Hadoop.