2010-05-23 35 views
3

我需要一些很好的参考资料才能使用Hadoop作为实时系统,例如搜索响应时间很短。我知道hadoop有hdfs的开销,但是用hadoop做这件事最好的方法是什么。与hadoop实时接近

回答

5

对于这种需求,Hadoop完全是错误的工具。它针对运行几分钟甚至几小时甚至几天的大批量作业进行了明确优化。

FWIW,HDFS与开销无关。事实上,Hadoop作业将jar文件部署到每个节点上,设置工作区,启动每个作业运行,通过计算阶段之间的文件传递信息,与作业运行者沟通进度和状态,等等。

+0

hmmm!那么当查询需要大数据处理时,实现实时搜索体验的选择是什么 – Akhil 2010-05-23 11:48:17

+1

使用像Lucene这样的搜索引擎。 – 2010-05-23 11:51:23

+0

尽管我的代码在后端使用了lucene,但是我的数据非常大,当查询进入时,我在lucene中做了大量文档处理,但这种处理无法事先完成。 所以这个处理需要以分布式的方式完成。 – Akhil 2010-05-24 03:28:18

9

您需要提供更多关于系统目标和挑战的信息以获得良好的建议。也许Hadoop不是你需要的,你只需要一些分布式系统foo? (哦,你完全确定你需要一个分布式系统吗?在一个大型内存机器的顶部有一个复制数据库可以做很多事情)。

对你的问题一无所知,我会给你几个在黑暗中回答的尝试。

  1. 看看HBase,它在HDFS之上提供了一个结构化的可查询数据存储,类似于Google的BigTable。 http://hadoop.apache.org/hbase/
  2. 这可能是因为您只需要一些帮助来管理数据的复制和分片。查看Gizzard,一个中间件可以做到这一点:http://github.com/twitter/gizzard
  3. 处理总是可以事先完成的。如果这意味着你实现了太多的数据,也许像Lucandra可以提供帮助 - 在Cassandra之上运行的Lucene作为后端? http://github.com/tjake/Lucandra

如果你真的真的需要在查询时做严肃处理,做到这一点的方法是运行专用流程,做好特殊类型,你需要计算的,并使用类似节俭发送的计算请求并返回结果。优化它们以获得内存中所有需要的数据。接收查询本身的过程只能将问题分解为片断,将片断发送到计算节点并收集结果。这听起来像Hadoop,但不是因为它是用于计算预加载数据的特定问题,而不是用于任意计算的通用计算模型。

+0

酷!这对我来说似乎是一个好的和新的指针列表。我会看看这些。 – Akhil 2010-05-24 21:25:24

1

此查询是旧的,但它需要一个答案。即使有数百万的文档,但没有像常见问题解答文档那样实时更改,用于分发的Lucene + SOLR应该足以满足需要。 Hathi Trust使用相同的组合来索引数十亿文件。

如果指数实时变化,这是完全不同的问题。即使Lucene在更新索引时也会遇到问题,并且您必须查看实时搜索引擎。有一些尝试实时修改Lucene,也许它应该工作。您还可以看看HSearch,这是一个基于Hadoop和HBase的实时分布式搜索引擎,主机地址为http://bizosyshsearch.sourceforge.net