我输了:Hadoop,Hbase,Lucene,Carrot2,Cloudera,Tika,ZooKeeper,Solr,Katta,Cascading,POI ......
当你读到关于那个的时候,你可以确定每个其他工具都会被提及。
我不指望你向我解释每一个工具 - 当然不是。如果你可以帮我缩小这个特定场景的范围,那就太好了。到目前为止,我不确定上述哪一个适合,并且看起来(一如既往)有多种方法可以完成所要做的事。
场景是:500GB - 存储在Hadoop中的大约20 TB的文档。多种格式的文本文档:电子邮件,doc,pdf,odt。有关存储在SQL db中的文档的元数据(发件人,收件人,日期,部门等)。文档的主要来源是ExchangeServer(电子邮件和附件),但不仅如此。现在进行搜索:用户需要能够对这些文档进行复杂的全文搜索。基本上,他将会看到一些搜索配置面板(java桌面应用程序,而不是webapp) - 他将设置日期范围,文档类型,发件人/收件人,关键字等。 - 触发搜索并获取文档的结果列表(以及每个文档信息为什么它包含在搜索结果中,即在文档中找到哪些关键字)。
我应该考虑哪些工具,哪些不是?重点是开发这样的解决方案,只需要最少的“胶水” - 代码。我精通SQLdbs但对Apache和相关技术非常不舒服。
基本工作流程如下所示:ExchangeServer /其他来源 - >从doc / pdf / ...转换 - >重复数据删除 - > Hadopp + SQL(元数据) - >构建/更新索引< - 搜索文档(并快速完成) - >目前的搜索结果
谢谢!
答案 0 :(得分:3)
选择solr是个不错的选择。我已经将它用于上面描述的类似场景。您可以将solr用作真正的大数据作为其分布式索引服务器。
但要获取有关所有这些文档格式的元数据,您应该使用其他一些工具。基本上你的工作流程就是这个。
1)使用hadoop集群来存储数据。
2)使用map / redcue
在hadoop集群中提取数据3)进行文件识别(识别文件类型)
4)从这些文档中提取元数据。
5)solr服务器中的索引元数据,将其他摄取信息存储在数据库中
6)Solr服务器是分布式索引服务器,因此每次摄取都可以创建一个新的分片或索引。
7)当需要搜索时,搜索所有索引。
8)Solr支持所有复杂的搜索,因此您无需创建自己的搜索引擎。
9)它也会为你做分页。
答案 1 :(得分:2)
我们通过使用Solr作为HBase的“二级索引器”,为我们的一些客户完成了这项工作。 HBase的更新将发送到Solr,您可以查询它。通常人们从HBase开始,然后进行移植搜索。听起来你知道从搜索到你想要的搜索是什么,所以你可以从你的HBase管道中嵌入二级索引。
您可能会发现只使用Solr可以完成您需要的一切。
答案 2 :(得分:2)
要看的另一个项目是Lily,http://www.lilyproject.org/lily/index.html,它已经完成了将Solr与分布式数据库集成的工作。
另外,我不明白为什么你不想在这个应用程序中使用浏览器。您正在准确描述分面搜索是什么。虽然您当然可以设置一个与服务器通信的桌面应用程序(解析JSON)并在胖客户端GUI中显示结果,但所有这些工作都已在浏览器中完成。而且,Solr提供了一个免费的分面搜索系统:只需按照教程进行操作。
答案 3 :(得分:1)
作为旁注,您不能说文档存储在Hadoop中,它们存储在分布式文件系统中(很可能是HDFS,因为您提到了Hadoop)。
关于搜索/索引:Lucene是用于您的场景的工具。您可以将它用于索引和搜索。这是一个java库。还有一个关联项目(称为Solr),它允许您通过WebServices访问索引/搜索系统。因此,您还应该看看Solr,因为它允许处理不同类型的文档(Lucene将解释文档(PDF,Word等)的责任放在您的肩膀上,但您可能已经可以这样做了)
答案 4 :(得分:1)
使用Solr(http://lucene.apache.org/solr)是一个很好的解决方案,但要准备好处理一些非显而易见的事情。首先是正确规划您的索引。对于任何合理的性能级别,多个TB的数据几乎肯定需要Solr上的多个分片,您将自己负责管理这些分片。它确实提供了分布式搜索(从多个分片中执行查询),但这只是战斗的一半。
ElasticSearch(http://www.elasticsearch.org/)是另一种流行的选择,但我对它的规模经验不多。它使用相同的Lucene引擎,所以我希望搜索功能集类似。
另一种类型的解决方案类似于SenseiDB - 从LinkedIn开源 - 提供全文搜索功能(也基于Lucene)以及大量数据的可靠规模:
他们肯定在那里做了大量的搜索工作,我随意使用它是非常有前景的。
假设您的所有数据都已在Hadoop中,您可以编写一些自定义MR作业,以一致的架构友好格式将数据提取到SenseiDB中。 SenseiDB已经提供了一个Hadoop MR索引器,您可以查看它。
唯一需要注意的是,它的设置稍微复杂一些,但会为您节省多次扩展问题 - 特别是在索引性能和分面功能方面。如果HA对您很重要,它还提供群集支持 - 对于Solr来说是still in Alpha(Solr 4.x是alpha atm)。
希望有所帮助,祝你好运!
更新
我问过一个比我更熟悉ElasticSearch的朋友,它确实具有基于你拥有的机器和分片的集群和重新平衡的优势。这是对Solr的明确胜利 - 特别是如果你正在处理TB数据。唯一的缺点是ElasticSearch的当前文档状态还有很多不足之处。