Hbase Scheme设计 - 最佳实践

时间:2013-07-31 12:07:06

标签: java hadoop nosql hbase

我最近从rdbms切换到Hbase来处理数百万条记录。但作为一个新手,我不确定设计Hbase方案的有效方法是什么。实际上,方案是我有文本文件,我必须阅读并存储到Hbase中的数百,数千和数百万条记录。因此,有两组文本文件(RawData文件,标签文件)由于它们属于同一用户而相互链接,对于这些文件,我已经创建了两个单独的表(RawData和Label),我将它们存储在那里。所以RawData文件和RawData表如下所示:

enter image description here enter image description here

所以你可以在我的RawData表中看到我有行键,它实际上是文本文件的文件名(01-01-All-Data.txt),其中包含每行textfile的行号。列系列只是随机的“r”,列限定符是文本文件的列,值是列的值。这是我在我的表中插入记录的方式,我有第三个表(MapFile),其中我将textfile的名称存储为user的行键用户id作为列限定符,textfile的记录总数作为值,如下所示:< / p>

            01-01-All-Data.txt       column=m:1, timestamp=1375189274467, value=146209  

我将使用Mapfile表来逐行读取RawData表。

您对此类Hbase架构的建议是什么?这是一种正确的方式吗?或者它在Hbase概念中没有意义?

此外,值得一提的是,在Hbase中插入21个mbs文件和146207行需要大约3分钟。

请建议。

由于

1 个答案:

答案 0 :(得分:4)

虽然我没有发现您当前架构有任何问题,但只有在分析了您的用例和频繁访问模式后才能确定是否合适。恕我直言,正确并不总是合适的。由于我对这一切都一无所知,我的建议听起来可能不正确。如果是这种情况,请告诉我。我会相应地更新答案。我们走了,

是否有意义(记住您的数据和访问模式)只有一个包含3个列系列的表:

  • RD - 对于将包含此文件的所有列的RawData文件
  • LF - 对于包含此文件所有列的标签文件,
  • MF - 对于MapFile,其中一列保存文本文件的记录数。

将userid用作rowkey。它将是独一无二的,看起来不是很长。使用此设计,您可以在获取数据时绕过从一个表分流到另一个表的开销。

更多建议:

  • 如果用户ID单调递增,则哈希您的rowkeys,这样您就不会受到 RegionServer Hotspotting 的影响。
  • 您还可以创建预拆分表格,以便更好地分发。
  • 如果可能,请缩短列名称。
  • 保持版本号尽可能低。

此外,值得一提的是,在Hbase中插入21个mbs文件和146207行需要大约3分钟。

您如何插入数据?MapReduce或普通Java + HBAse API?您的群集大小是多少?配置和规格?

您可能会发现这些链接很有用:

HTH