Solr 搜索Hadoop中存储的文档-使用哪种工具?

Solr 搜索Hadoop中存储的文档-使用哪种工具?,solr,hadoop,lucene,cloudera,carrot2,Solr,Hadoop,Lucene,Cloudera,Carrot2,我迷失在:Hadoop,Hbase,Lucene,Carrot2,Cloudera,Tika,ZooKeeper,Solr,Katta,Cascading,POI 当你读到这篇文章时,你可以经常确信其他的每一个工具都会被提及 我不希望你向我解释每一种工具——当然不是。如果你能帮我缩小我的特殊场景的范围,那就太好了。到目前为止,我还不确定上面哪一条适合,看起来(像往常一样)要做的事情不止一种 该场景是:在Hadoop中存储500GB-~20TB的文档。多种格式的文本文档:电子邮件、文档、pdf、o

我迷失在:Hadoop,Hbase,Lucene,Carrot2,Cloudera,Tika,ZooKeeper,Solr,Katta,Cascading,POI

当你读到这篇文章时,你可以经常确信其他的每一个工具都会被提及

我不希望你向我解释每一种工具——当然不是。如果你能帮我缩小我的特殊场景的范围,那就太好了。到目前为止,我还不确定上面哪一条适合,看起来(像往常一样)要做的事情不止一种

该场景是:在Hadoop中存储500GB-~20TB的文档。多种格式的文本文档:电子邮件、文档、pdf、odt。关于存储在SQL db中的文档的元数据(发件人、收件人、日期、部门等)。文档的主要来源将是ExchangeServer(电子邮件和附件),而不仅仅是。现在开始搜索:用户需要能够对这些文档进行复杂的全文搜索。基本上,他将看到一些搜索配置面板(java桌面应用程序,而不是webapp)-他将设置日期范围、文档类型、发件人/收件人、关键字等-启动搜索并获得文档的结果列表(以及每个文档信息为什么包含在搜索结果中,即在文档中找到哪些关键字)

我应该考虑哪些工具,哪些不应该?关键是开发这样的解决方案,只需要最少的“胶水”代码。我精通SQLdbs,但对Apache和相关技术不太熟悉

基本工作流如下所示:ExchangeServer/其他源->从文档转换/pdf/…->重复数据消除->Hadopp+SQL(元数据)->构建/更新索引以显示搜索结果


谢谢大家!

作为旁注,您不能说文档存储在Hadoop中,它们存储在分布式文件系统中(最有可能是HDFS,因为您提到Hadoop)


关于搜索/索引:Lucene是用于您的场景的工具。您可以将其用于索引和搜索。这是一个java库。还有一个相关的项目(称为Solr),它允许您通过Web服务访问索引/搜索系统。因此,您还应该看看Solr,因为它允许处理不同类型的文档(Lucene将解释文档(PDF、Word等)的责任放在您的肩上,但您可能已经可以这样做了)

我们将Solr用作HBase的“二级索引器”,为我们的一些客户做到了这一点。HBase的更新将发送到Solr,您可以对其进行查询。通常人们从HBase开始,然后进行嫁接搜索。听起来您从一开始就知道搜索是您想要的,因此您可能可以将辅助索引嵌入到为HBase提供数据的管道中

您可能会发现,仅仅使用Solr就可以完成您需要的一切。

使用Solr()是一个很好的解决方案,但是要准备好处理一些不明显的事情。首先是正确规划索引。多TB的数据几乎肯定需要Solr上的多个碎片才能获得任何级别的合理性能,您将自己负责管理这些碎片。它确实提供了分布式搜索(通过多个碎片进行查询),但这仅仅是成功的一半

ElasticSearch()是另一种流行的选择,但我对它的规模没有太多经验。它使用相同的Lucene引擎,因此我希望搜索功能集类似

另一种类型的解决方案类似于SenseiDB(开源于LinkedIn),它提供全文搜索功能(也基于Lucene)以及经验证的海量数据规模:

他们肯定在搜索方面做了很多工作,我随意使用它是很有希望的

假设您的所有数据都已经在Hadoop中,您可以编写一些定制的MR作业,以一致的模式友好格式将数据拉入SenseDB。SenseiDB已经提供了一个Hadoop MR索引器,您可以查看它

唯一需要注意的是,它的设置稍微复杂一点,但会多次避免缩放问题,特别是索引性能和刻面功能。如果HA对您很重要的话,它还提供集群支持——这是针对Solr的(Solr4.x是alphaATM)

希望对你有帮助,祝你好运

更新:


我问了一位比我更精通ElasticSearch的朋友,他说ElasticSearch确实具有基于机器和碎片的集群和再平衡的优势。这无疑是对Solr的胜利——尤其是在处理TBs数据时。唯一的缺点是ElasticSearch文档的当前状态还有很多需要改进的地方。

使用solr是一个不错的选择。我已经将其用于上面描述的类似场景。您可以将solr用作真正的海量数据的分布式索引服务器

但是要获得所有这些文档格式的元数据,您应该使用其他工具。基本上你的工作流程就是这样

1) 使用hadoop集群存储数据

2) 使用map/redcue提取hadoop集群中的数据

3) 进行文件标识(标识文件类型)

4) 从这些文档中提取元数据

5) 索引solr服务器中的元数据,将其他摄取信息存储在数据库中

6) Solr服务器是分布式索引服务器,所以对于每次摄取,您都可以创建一个新的碎片或索引

7) 当需要搜索时,搜索所有索引

8) Solr支持所有复杂的搜索,因此您不必创建自己的搜索引擎


9) 它还可以为您进行分页。

另一个项目是Lily,它已经完成了将Solr与分布式数据库集成的工作

另外,我不明白为什么您不想在这个应用程序中使用浏览器。你描述的正是我想要的分面搜索