Мне сложно работать с HBase FuzzyRowFilter
.HBase FuzzyRowFilter не возвращает результатов
Я следующий тест таблицы:
hbase(main):014:0> scan 'test'
ROW COLUMN+CELL
row-01 column=colfam1:col1, timestamp=1481193793338, value=value1
row-02 column=colfam1:col1, timestamp=1481193799186, value=value2
row-03 column=colfam1:col1, timestamp=1481193803941, value=value3
row-04 column=colfam1:col1, timestamp=1481193808209, value=value4
row-05 column=colfam1:col1, timestamp=1481193812737, value=value5
5 row(s) in 0.0200 seconds
Здесь мой Java-код (я начал с Scala, но результаты не совпадают - нет):
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "localhost:2182");
conf.set("hbase.master", "localhost:60000");
conf.set("hbase.rootdir", "/hbase");
try {
Scan scan = new Scan();
scan.setCaching(5);
byte[] rowKeys = Bytes.toBytesBinary("???-01");
byte[] fuzzyInfo = {0x01,0x01,0x01,0x00,0x00,0x00};
FuzzyRowFilter fuzzyFilter = new FuzzyRowFilter(
Arrays.asList(
new Pair<byte[], byte[]>(
rowKeys,
fuzzyInfo)));
System.out.println("### fuzzyFilter: " + fuzzyFilter.toString());
scan.addFamily(Bytes.toBytesBinary("colfam1"));
scan.setStartRow(Bytes.toBytesBinary("row-01"));
scan.setStopRow(Bytes.toBytesBinary("row-05"));
scan.setFilter(fuzzyFilter);
Connection conn = ConnectionFactory.createConnection(conf);
Table table = conn.getTable(TableName.valueOf("test"));
ResultScanner results = table.getScanner(scan);
int count = 0;
int limit = 100;
for (Result r : results) {
System.out.println("" + r.toString());
if (count++ >= limit) break;
}
} catch (Exception e) {
e.printStackTrace();
}
Я просто не получить любые результаты с сервера. Если я закомментируйте строку scan.setFilter(fuzzyFilter);
, я получаю exepcted результаты:
keyvalues={row-01/colfam1:col1/1481193793338/Put/vlen=6/seqid=0}
keyvalues={row-02/colfam1:col1/1481193799186/Put/vlen=6/seqid=0}
keyvalues={row-03/colfam1:col1/1481193803941/Put/vlen=6/seqid=0}
keyvalues={row-04/colfam1:col1/1481193808209/Put/vlen=6/seqid=0}
я делаю что-то не так? Есть ли ошибка в HBase (версия 1.2.2)? Я использую версию, установленную через Homebrew на последней версии Mac OS Sierra.
Обновление
В кластере Cloudera Hadoop под управлением CDH 5.7 с HBase 1.2.0-cdh5.7.0, я получить желаемый выход для RowKey row-01
. Ошибка должна быть связана с моей локальной настройкой.
Решение
Действительно, проблема заключалась в том, что Hbase установки сервера и клиента JAR версии не совпадают. В моем случае, я использовал артефакты
- HBase-общие
- HBase-клиент
- HBase-сервер
с версией 1.2.0-cdh5.7.0
вместо 1.2.2
.
Моя ошибка предполагала, что незначительные различия в версии не будут иметь большого влияния, но, по-видимому, Cloudera применил некоторые существенные изменения в своих версиях относительно официальной базы кода. Переход на официальную версию 1.2.2
сделал FuzzyRowFilter
работы должным образом.
Помогло ли downvoter объяснить, почему (а) он отказался от моего вопроса?Я считаю, что в нем четко говорится о проблеме и моих предыдущих попытках ее решения. – pederpansen