2008-09-07 71 views
19

我正在和一位朋友一起开发一个项目,该项目将利用Hbase存储它的数据。有没有好的查询例子?我似乎在编写大量的Java代码来遍历RowResult的列表,在SQL域中,我可以编写一个简单的查询。我错过了什么吗?或者是Hbase缺少什么?Hbase/Hadoop查询帮助

回答

20

我想你和我们中的许多人一样,正在犯的错误就是将bigtable和HBase当作另一个RDBMS,而实际上它是一个列式存储模型,用于有效存储和检索大量稀疏数据。例如,这意味着在理想情况下存储单行内的多对一关系。您的查询应该返回非常少的行,但包含(可能)很多数据点。

也许如果您告诉我们更多关于您试图存储的内容的信息,我们可以帮助您设计您的模式以匹配bigtable/HBase做事方式。

有关HBase与“传统”RDBMS的不同之处,请查看Bryan Duxbury的这篇精彩文章:Matching Impedance: When to use HBase

+2

Duxbury链接被破坏,但我不会在其他地方找到它。 : - \ – 2013-10-04 15:03:48

1

我看着Hadoop和HBase的和肖恩说,我很快就意识到这并没有给我什么,我其实是想,这是一个聚集JDBC兼容的数据库。

我认为你可以使用类似C-JDBCHA-JDBC的东西,这看起来更像我之后的东西。 (就我个人而言,除了阅读文档之外,我还没有进一步阅读这些文档,所以我无法判断它们哪一个是好的,如果有的话)。

0

感谢您的回复肖恩,并为我晚了抱歉响应。我经常犯这样的错误,就像RDBMS一样对待HBase。事实上,我经常因为它而不得不重写代码!忘掉这是一件很难的事情。

现在我们只有4张桌子。在这种情况下,其中很少考虑我的背景。我只是希望使用的一些 RDBMS功能,同时主要坚持列式存储模型。

1

我推荐看一下Apache Hive项目,它类似于HBase(就是说它是一个分布式数据库),它实现了一个SQL类型的语言。

0

很高兴听到你们正在使用HBase!我不是任何想象力的专家,但是这里有一些可能有用的东西。

  • 的HBase是基于/ BigTable的通过,这恰好通过AppEngine上公开为自己的DB API的启发,所以browsing their docs应帮助很大,如果你在web应用程序的工作。

  • 如果你没有在web应用上工作,那么你所描述的迭代通常通过map/reduce(不要发出你不想要的值)来处理。使用迭代器跳过值实际上可以保证您的应用程序会遇到HBase大小的数据集的瓶颈。如果你发现你还在用SQL思考,请查看cloudera的猪教程和配置单元教程。

  • 基本上整个HBase/SQL心理差异(对于非webapps)归结为“将计算发送到数据,不要将数据发送到计算” - 如果您在考虑时注意“重新编码如果你想使用的查询语言和JDBC驱动程序就可以访问你的HBase会做精:-)

问候,

大卫

2

。 Paul Ambrose在hbql.com发布了一个名为HBQL的库,它可以帮助你做到这一点。我用它做了几个项目,效果很好。您显然无法访问完整的SQL,但它确实使它更容易使用。