Sollte ich prefixfilter oder rowkey-Bereich scan in HBase
Ich weiß nicht warum, es ist sehr langsam, wenn ich prefixfilter Abfragen. Kann mir jemand erklären, was ist der beste Weg, um Abfrage HBase, danke.
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
- Das problem bei diesem Ansatz ist, dass wenn das Letzte Zeichen ist die maximale Byte-Wert, so können Sie nicht erhöhen Sie um 1. Wenn Sie 0 und dann Erhöhung um 1 die nächste byte-weisen Sie HBase, inklusive dieses Ende-Taste, die nicht das gewünschte Ergebnis
Du musst angemeldet sein, um einen Kommentar abzugeben.
HBase-Filter - auch Zeilenfilter - sind wirklich langsam, da in den meisten Fällen einen kompletten table scan, und dann filter auf diese Ergebnisse. Haben Sie einen Blick auf diese Diskussion: http://grokbase.com/p/hbase/user/115cg0d7jh/very-slow-scan-performance-using-filters
Zeile key range scans sind allerdings in der Tat sehr viel schneller - Sie tun das äquivalent von einer gefilterten Tabelle Scannen. Dies ist, weil die row-keys gespeichert werden, in sortierter Reihenfolge (dies ist eine der grundlegenden Garantien der HBase, was eine BigTable-ähnliche Lösung), so ist die Strecke scans von row keys sind sehr schnell. Weitere Erklärung hier: http://www.quora.com/How-feasible-is-real-time-querying-on-HBase-Can-it-be-achieved-through-a-programming-language-such-as-Python-PHP-or-JSP
[UPDATE 1] stellt sich heraus, dass PrefixFilter macht ein full table scan, bis es übergibt die verwendete Präfix in den filter (wenn er Sie findet). Die Empfehlung für eine schnelle performance mit einem PrefixFilter zu sein scheint, geben Sie eine start_row parameter zusätzlich der PrefixFilter. Sehen Verwandte 2013 Diskussion über die hbase-Anwender-mailing-Liste.
[UPDATE 2 von @aaa90210] In Bezug auf die oben genannten update, gibt es nun eine effiziente Zeile Präfix-filter, der ist viel schneller als PrefixFilter, siehe diese Antwort: https://stackoverflow.com/a/38632100/150050
DATUM: stellt sich heraus, dass PrefixFilter macht ein full table scan, bis es übergibt die verwendete Präfix in den filter (wenn er Sie findet). Die Empfehlung für eine schnelle performance mit einem PrefixFilter zu sein scheint, geben Sie eine start_row parameter zusätzlich zu den PrefixF