我最近从rdbms切换到Hbase来处理数百万条记录。但作为一个新手,我不确定设计Hbase方案的有效方法是什么。实际上,方案是我有文本文件,我必须阅读并存储到Hbase中的数百,数千和数百万条记录。因此,有两组文本文件(RawData文件,标签文件)由于它们属于同一用户而相互链接,对于这些文件,我已经创建了两个单独的表(RawData和Label),我将它们存储在那里。所以RawData文件和RawData表如下所示:
所以你可以在我的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分钟。
请建议。
由于
答案 0 :(得分:4)
虽然我没有发现您当前架构有任何问题,但只有在分析了您的用例和频繁访问模式后才能确定是否合适。恕我直言,正确并不总是合适的。由于我对这一切都一无所知,我的建议听起来可能不正确。如果是这种情况,请告诉我。我会相应地更新答案。我们走了,
是否有意义(记住您的数据和访问模式)只有一个包含3个列系列的表:
将userid用作rowkey。它将是独一无二的,看起来不是很长。使用此设计,您可以在获取数据时绕过从一个表分流到另一个表的开销。
更多建议:
此外,值得一提的是,在Hbase中插入21个mbs文件和146207行需要大约3分钟。
您如何插入数据?MapReduce或普通Java + HBAse API?您的群集大小是多少?配置和规格?
您可能会发现这些链接很有用:
HTH