java Hbase方案设计最佳实践
我最近从rdbms转向Hbase,以处理数百万条记录。。但作为一名新手,我不确定设计Hbase方案的有效方法是什么。事实上,情况是我有文本文件,其中有成百上千万条记录,我必须读取并存储到Hbase中。因此,有两组文本文件(RawData文件、标签文件)彼此链接,因为它们属于同一个用户,对于这些文件,我制作了两个单独的表(RawData和标签),并将它们的信息存储在那里。所以RawData文件和RawData表如下所示:
所以你可以在我的RawData表中看到,我有一个row key,它实际上是文本文件(01-01-All-Data.txt)的文件名,带有文本文件每行的行号。列族只是随机的“r”,列限定符是文本文件的列,值是列的值。这就是我在表中插入记录的方式,我有第三个表(MapFile),其中我将textfile的名称作为行键用户id存储为列限定符,将textfile的记录总数存储为值,如下所示:
01-01-All-Data.txt column=m:1, timestamp=1375189274467, value=146209
我将使用Mapfile表格逐行读取RawData表格
你对这种Hbase模式有什么建议?这样合适吗?或者它在Hbase概念中没有意义
此外,值得一提的是,在Hbase中插入21Mbs、146207行的文件大约需要3分钟
请给出建议
谢谢
# 1 楼答案
虽然我没有发现您当前的模式有任何错误,但是只有在分析您的用例和频繁访问模式之后才能决定它是否合适。正确并不总是合适的,伊姆霍。因为我对这一切一无所知,所以我的建议听起来可能不正确。如果是这样,请告诉我。我会相应地更新答案。好了
只有一个包含3列族的表(记住数据和访问模式)有意义吗
将用户ID用作行键。它将是独一无二的,看起来不会太长。通过这种设计,您可以绕过在获取数据时从一个表转移到另一个表的开销
还有几点建议:
此外,值得一提的是,在Hbase中插入21Mbs、146207行的文件大约需要3分钟
如何插入数据?MapReduce还是普通的Java+HBAse API?你的集群大小是多少?配置和规格
您可能会发现以下链接很有用:
嗯