相关疑难解决方法(0)

使用HBase shell扫描过滤器

有人知道如何根据某些扫描过滤器扫描记录,即:

column:something = "somevalue"

这样的东西,但来自HBase shell?

hbase nosql

43
推荐指数
5
解决办法
7万
查看次数

我应该在HBase中使用prefixfilter或rowkey范围扫描

如果我使用prefixfilter进行查询,我不知道为什么它会很慢.有人可以解释一下查询HBase的最佳方法,谢谢.

hbase(main):002:0> scan 'userlib',{FILTER=>org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes('0000115831F8'))}
ROW               COLUMN+CELL                                                                                                                                
0000115831F8001   column=track:aid, timestamp=1339121507633, value=aaa                                                                                       
1 row(s) in 41.0700 seconds

hbase(main):002:0> scan 'userlib',{STARTROW=>'0000115831F8',ENDROW=>'0000115831F9'}                                                                                        
ROW               COLUMN+CELL                                                                                                                                
0000115831F8001   column=track:aid, timestamp=1339121507633, value=aaa                                                                                       
1 row(s) in 0.1100 seconds
Run Code Online (Sandbox Code Playgroud)

performance hbase filter database-scan

8
推荐指数
1
解决办法
2万
查看次数

有效地查询Hbase

我正在使用Java作为查询Hbase的客户端.

我的Hbase表设置如下:

ROWKEY     |     HOST     |     EVENT
-----------|--------------|----------
21_1465435 | host.hst.com |  clicked
22_1463456 | hlo.wrld.com |  dragged
    .             .             .
    .             .             .
    .             .             .
Run Code Online (Sandbox Code Playgroud)

我需要做的第一件事是让所有的清单ROWKEYshost.hst.com与它相关联.

我可以在Column上创建一个扫描器,host对于每个行值,column value = host.hst.com我将添加相应ROWKEY的列表.看起来效率很高.O(n)获取所有行.

现在是困难的部分.对于ROWKEY列表中的每一个,我需要得到相应的EVENT.

如果我使用普通GET命令来获取单元格(ROWKEY, EVENT),我相信会创建一个扫描程序EVENT,需要O(n)时间才能找到正确的单元格并返回值.这对每个人来说都是非常糟糕的时间复杂性ROWKEY.结合这两者给了我们O(n^2).

有没有更有效的方法来解决这个问题?

非常感谢您提前帮助!

java hadoop hbase mapreduce hadoop2

5
推荐指数
1
解决办法
2616
查看次数

Google Cloud Bigtable:查询部分键

因此,如果我在Bigtable中有以下数据:

DEL_6878 .....
DEL_6879 .....
BOM_5876 .....
SFO_8686 .....
SFO_8687 .....
Run Code Online (Sandbox Code Playgroud)

我如何查询SFO *记录?我阅读了文档;我知道如何获得单行;类似于以下内容:

table.get("SFO_8686");
Run Code Online (Sandbox Code Playgroud)

或如何获得范围;之类的东西getRows("SFO_8686", "SFO _8687")接受startKeyand endKey,但是我读了文档,使我相信一个人可以获得以前缀开头的记录。SFO *示例。我怎么做?

google-cloud-bigtable

5
推荐指数
1
解决办法
1563
查看次数

如何使用startrow和stoprow不会导致HBase中的全表扫描?

通常建议使用范围扫描,startrowstoprow不是Rowkey Prefix Filter(例如,这里).这样做的原因是因为Rowkey Prefix Filter导致对行键进行全表扫描,而范围扫描通过startrow并且stoprow不会导致全表扫描.为什么不呢?大多数人都说"因为rowkey以字典顺序存储",这当然不能解释为什么 Rowkey Prefix Filter不能利用这个.

在任何情况下,范围扫描的确切方式是什么,startrowstoprow不是导致rowkey的全表扫描?

以python中的这个小例子来说明为什么我不理解rowkeys的lexagraphical排序在避免全表扫描方面意味着什么:

rowkeys = ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']

def range_scan(startrow, stoprow):
    is_found = False
    for rowkey in rowkeys:
        if startrow <= rowkey < stoprow:
            is_found = True
            yield rowkey
        else:
            if is_found:
                raise StopIteration()
Run Code Online (Sandbox Code Playgroud)

显然,HBase算法与此不同.怎么做的?

TLDR:在使用startrow和stoprow进行范围扫描时,HBase究竟是如何避免全表扫描的?

hadoop hbase

3
推荐指数
1
解决办法
854
查看次数