Проблема с расширением HBase Put - PullRequest
0 голосов
/ 18 марта 2011

У меня проблема при попытке расширить класс HBase Put.

У меня есть такой код

public class HBasePut extends Put {  
    //here i define my own adds because i have only string "keys"  
    //so i dont have to use Bytes.toBytes() every time and so on 
}

Но при тестировании этих классов этот код в порядке:

Put p = new Put(Bytes.toBytes('row'));  
p.add(Bytes.toBytes('cf'), Bytes.toBytes('col'), Bytes.toBytes(1));
users.put(p);

Но это делает исключение после 70 секунд попытки - RetriesExhaustedWithDetailsException

HBasePut p = new HBasePut('row');  
p.add('cf', 'col', 1);
users.put(p);

Итак, я попытался перебрать исключения в RetriesExh ... Он говорит, что есть одно исключение, но оно пустое ...
Я просматривал код Put, HTable и HConnection, но не смог найти никаких зависимостей от написания именно класса Put в HBase, поэтому я не знаю, почему мой HBasePut не работает.

Можно ли как нибудь расширить пут? Спасибо

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Если вы загляните в журналы вашего регион-сервера, вы увидите исключение типа «Не удается найти класс ... HBasePut».Итак, HBase, очевидно, переносит экземпляр Put с клиента на сервер, но сервер не знает о вашем подклассе и не может его обработать.

Я предлагаю воздержаться от подклассов и вместо этого предлагаю кодировать собственный класс Util, который предоставляет статическийМетод add, принимающий экземпляр Put и Strings в качестве аргументов и импортирующий этот метод со статическим импортом.

0 голосов
/ 21 марта 2011

Как сказал zillion1, просто используйте статический метод:

public static void add(Put put, String col, String qual, String data)
{
  put.add(col.getBytes(), qual.getBytes(), data.getBytes());
}
...