您的位置:首页 > 其它

Hbase: IllegalArgumentException: No columns to insert

2016-06-13 15:45 483 查看
最近在做hbase数据插入测试时,遇见了此异常,通过跟断点调试发现:

在执行put操作的时候,如果只是实例化了一个Put,却没有给Put添加family(column)。执行就会出现此标题异常。

以下附上调试过程:

HTable在作doPut(Put put)操作时,会验证validatePut(put)

private void doPut(Put put) throws InterruptedIOException, RetriesExhaustedWithDetailsException {
...
this.validatePut(put);
...

}
继续跟断点至validatePut(put),发现isEmpty()的判断

public void validatePut(Put put) throws IllegalArgumentException {
validatePut(put, this.maxKeyValueSize);
}

public static void validatePut(Put put, int maxKeyValueSize) throws IllegalArgumentException {
if(put.isEmpty()) {
throw new IllegalArgumentException("No columns to insert");
} else {
...
}
}
继续查看put.isEmpty(),如下:

public boolean isEmpty() {
return this.familyMap.isEmpty();
}


跟断点到这里就已经很明确了,htable在doPut执行时,会验证当前put的familyMap是否为空。如果为空,就会抛出‘No columns to insert’ 异常

附:以上引用到源码部分源自hbase client源代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: