【问题标题】:Running solr index on hadoop在 hadoop 上运行 solr 索引
【发布时间】:2012-07-23 23:33:06
【问题描述】:

我有大量数据需要编制索引,完成这项工作需要 10 多个小时。有没有办法在hadoop上做到这一点?以前有人做过吗?非常感谢!

【问题讨论】:

标签: solr hadoop


【解决方案1】:

您还没有解释 10 小时在哪里?需要提取数据吗?还是只需要索引数据。

如果您需要很长时间进行提取,那么您可以使用 hadoop。 Solr 有一个称为批量插入的功能。因此,在您的地图功能中,您可以一次性累积 1000 条记录并提交索引以获取大量记录。这将大大优化您的表现。

还有你的数据有多大?

您可以在 map/reduce 作业的 reduce 功能中收集大量记录。您必须在地图中生成正确的键,以便大量记录转到单个 reduce 函数。在您的自定义reduce类中,根据您的hadoop版本在setup/configure方法中初始化solr对象,然后在cleanup方法中关闭它。您必须创建一个文档集合对象(在solrNet或solrj中)并将它们全部提交到一个单发。

如果您使用 hadoop,还有其他选项称为 katta。你也可以看看。

【讨论】:

  • 非常感谢,Animesh!时间主要是索引数据,因为我在运行 java 程序通过 http 调用 solr 之前已经处理了数据。该程序与 solr 服务器在同一台机器上运行。也许我应该检查批量插入?...
  • 是的,我以前做过,批量插入确实会减少很多时间。
  • 非常感谢,Animesh!我拥有的数据超过2000万。只是为了确认一下,对于批量插入,您的意思是“继续添加文档”并且一旦达到 1000 条记录,然后进行提交,对吗?
  • 另一个问题,如果我使用hadoop,我应该将它用于对Solr的http调用,然后进行批量提交,然后我就完成了吗?很抱歉询问详细信息,因为我对所有这些事情都是新手。非常感谢您的帮助!! :)
  • 非常感谢您的详细回答。我的同事也提到了 katta,我会调查一下 :) 谢谢!!
【解决方案2】:

您可以在您的 hadoop 集群上编写一个 map reduce 作业,该作业只需获取每条记录并通过 http 将其发送到 solr 以进行索引。 Afaik solr 目前没有针对机器集群的索引,因此如果您想将索引也分布在多个节点上,那么研究一下弹性搜索是值得的。

【讨论】:

    【解决方案3】:

    有一种 SOLR hadoop 输出格式,它在每​​个 reducer 中创建一个新索引 - 因此您可以根据需要的索引分配密钥,然后在事后将 hdfs 文件复制到您的 SOLR 实例中。

    http://www.datasalt.com/2011/10/front-end-view-generation-with-hadoop/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      相关资源
      最近更新 更多