应该如何看待MapReduceIndexerTool的变形线?

时间:2018-03-05 12:35:24

标签: hadoop mapreduce morphline

我希望有效地搜索大量日志(大小约为1 TB,放置在多台计算机上)。

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

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

我知道,一般来说,一个morphline对它所采用的数据执行一系列操作,但是如果我想使用MapReduceIndexerTool,我应该执行哪种操作?

我找不到适合此地图缩减工作的形态线的任何示例。

谢天谢地。

2 个答案:

答案 0 :(得分:1)

Cloudera有guide,其morphline下的用例几乎相似。

enter image description here

  

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

示例中给出的用例是MapReduceIndexerToolApache Flume Morphline Solr SinkApache Flume MorphlineInterceptor以及Morphline Lily HBase Indexer等生产工具作为其操作的一部分运行,如下所述图:

enter image description here

答案 1 :(得分:1)

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

例如,这是我与MapReduceIndexerTools一起使用的moprhline文件,用于将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文档字段,删除所有其他字段,并使用提供的Solr连接详细信息创建索引。它基于this tutorial

这是我用来索引文件并将它们合并到正在运行的集合中的命令:

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。