Как должен выглядеть морфлайн для 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.

Другие вопросы по тегам