尝试扩展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中的异常......它告诉我有一个异常,但它是null ...
我正在查看Put,HTable和HConnection的代码,但是我找不到任何依赖于写出完全放入HBase的类,因此我不知道为什么我的HBasePut无效。
是否有可能以某种方式扩展Put? 谢谢
答案 0 :(得分:1)
如果你查看你的regionserver日志,你会看到一个例外,例如“找不到类...... HBasePut”。因此,HBase显然将Put实例从客户端传输到服务器,但是服务器不知道您的子类并且无法处理它。
我建议不要继承子类,而是建议编写一个自定义的Util类,它提供一个静态的“add”方法,将Put实例和Strings作为args并使用静态导入导入此方法。
答案 1 :(得分:0)
正如zillion1所说,只需使用静态方法:
public static void add(Put put, String col, String qual, String data)
{
put.add(col.getBytes(), qual.getBytes(), data.getBytes());
}