最近在做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(); }
附:以上引用到源码部分源自hbase client源代码