Java 向Hbase表插入数据报错(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apa)

时间:2022-03-01 08:27:29

在用JAVA代码向Hbase表插入数据的时候,跳出org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apache.hadoop.hbase.client.HTable错误,刚接触大数据开发,当然得记录一下.

Java 向Hbase表插入数据报错(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apa)

从上面可以看出HTablePool 转化为HTable类型了出错.查看getTable()方法.

Java 向Hbase表插入数据报错(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apa)

原来,getTable返回的类型是HTableInterface类型,知道原因就好办了.


原代码:

public static void insertData1(String tableName) {
System.out.println("start insert data ......");
HTablePool pool = new HTablePool(configuration, 1000);
HTable table = (HTable) pool.getTable(tableName);
Put put = new Put("112233bbbcccc".getBytes());// 一个PUT代表一行数据,再NEW一个PUT表示第二行数据,每行一个唯一的ROWKEY,此处rowkey为put构造方法中传入的值
put.add("column1".getBytes(), null, "aaa".getBytes());// 本行数据的第一列
put.add("column2".getBytes(), null, "bbb".getBytes());// 本行数据的第三列
put.add("column3".getBytes(), null, "ccc".getBytes());// 本行数据的第三列
try {
table.put(put);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("end insert data ......");
}


解决方法:

table.put(put); 换成 

pool.getTable(tName).put(put);


修改后的代码:

**
* 插入数据
* @param tableName
*/
public static void insertData(String tableName) {
System.out.println("start insert data ......");
HTablePool pool = new HTablePool(configuration, 1000);
Put put = new Put("112233bbbcccc".getBytes());// 一个PUT代表一行数据,再NEW一个PUT表示第二行数据,每行一个唯一的ROWKEY,此处rowkey为put构造方法中传入的值

put.add("column1".getBytes(), null, "aaa".getBytes());// 本行数据的第一列
put.add("column2".getBytes(), null, "bbb".getBytes());// 本行数据的第三列
put.add("column3".getBytes(), null, "ccc".getBytes());// 本行数据的第三列

try {
//如今应用的api版本中pool.getTable返回的类型是HTableInterface ,无法强转为HTable
pool.getTable(tableName).put(put);

}catch (Exception e){

}
System.out.println("end insert data ......");
}