扩展HBase Put的问题

时间:2011-03-18 09:56:06

标签: java hadoop hbase

尝试扩展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? 谢谢

2 个答案:

答案 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());
}