我有一个很大的索引,需要对其执行近实时更新和全文搜索,但是我还希望能够对该数据运行map-reduce作业。是否可以这样做而不必维护数据的两个单独副本? (例如,在Solr中一个副本,在HDFS中另一个副本)。

它看起来像Solr can be configured to use HDFS for storage,但它似乎不适用于map-reduce,因为它只是以很难从Hadoop map-reduce读取的方式将索引存储在HDFS中。

对于ElasticSearch,有es-hadoop,但这是为了从Hadoop内部读写ElasticSearch而设计的,但是似乎并不能解决近乎实时地将数据放入HDFS或避免拥有两个数据副本的问题。

有没有人遇到过类似的问题,或者可能找到了其他有助于解决该问题的工具?还是为 map 减少作业单独拥有数据副本是标准做法?

谢谢!

最佳答案

如果您正在谈论将来可以选择存储在hdfs(运行映射减少)中,然后使用solr执行索引编制,那么我认为,您可以按照以下步骤进行操作

对于实时流(例如Twitter),您需要将它们实时存储在db中。一种选择是将它们发送到kakfka并利用 Storm 。从那里,您可以将其存储在hdfs和并行的solr中。他们有 bolt 的概念,将发挥相同的作用。一旦是hdfs,就可以使用map reduce。进入Solr后,您将执行搜索。如果要使两个数据同步,则可以尝试一些事件处理,以侦听将数据插入HDFS(或其堆栈)并在Solr中执行索引。请仔细阅读kafka( Storm 文档)以了解基本知识。替代品可以是Flume或Spark。不知道这些。

08-28 03:42