1

我想有效地搜索大量日志(大约 1 TB 大小,放置在多台机器上)。

为此,我想构建一个由 Flume、Hadoop 和 Solr 组成的基础架构。Flume 将从几台机器获取日志并将它们放入 HDFS。

现在,我希望能够使用 map reduce 作业索引这些日志,以便能够使用 Solr 搜索它们。我发现MapReduceIndexerTool为我做了这个,但我发现它需要一个morphline

我知道吗啉通常会对它所获取的数据执行一组操作,但是如果我想使用 MapReduceIndexerTool,我应该执行什么样的操作?

我在适用于此地图缩减作业的 morphline 上找不到任何示例。

恭敬地谢谢你。

4

2 回答 2

1

Cloudera 有一个指南,该指南在morphline.

在此处输入图像描述

在此图中,Flume Source 接收 syslog 事件并将它们发送到 Flume Morphline Sink,Flume Morphline Sink 将每个 Flume 事件转换为记录并将其通过管道传输到 readLine 命令。readLine 命令提取日志行并将其通过管道传输到 grok 命令中。grok 命令使用正则表达式模式匹配来提取该行的一些子字符串。它将生成的结构化记录通过管道传输到 loadSolr 命令中。最后,loadSolr 命令将记录加载到 Solr,通常是 SolrCloud。在此过程中,原始数据或半结构化数据根据应用建模要求转化为结构化数据。

示例中给出的用例是生产工具MapReduceIndexerTool,如Apache Flume Morphline Solr SinkApache Flume MorphlineInterceptorMorphline Lily HBase Indexer 作为其操作的一部分运行,如下图所示:

在此处输入图像描述

于 2018-03-05T16:21:06.190 回答
1

一般来说,在 morplhine 中,您只需要读取数据,将其转换为 solr 文档,然后调用loadSolr创建索引。

例如,这是我使用 MapReduceIndexerTools 将 Avro 数据上传到 Solr 的 moprhline 文件:

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 文档字段,删除所有其他字段并使用提供的 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 一起使用,并且应该存在集合。

所有这些设置都适用于 CDH 5.7 Hadoop 上的 Solr 4.10。

于 2018-11-21T20:54:20.880 回答