java.io.IOException:java.lang.ClassCastException:org.apache.hadoop.hbase.client.Result无法强制转换为org.apache.hadoop.io.Writable

时间:2014-02-22 07:25:08

标签: hadoop hive hbase

尝试了一个从hive处理hbase中的表的示例。

CREATE EXTERNAL TABLE命令成功,但select语句给出了类强制转换异常

ENV: 虚拟盒上的hive 0.12.0,hbase 0.96.1,hadoop 2.2,Ubuntu 12.04

hive> SHOW TABLES;                                                                   
OK
hbatablese_myhive
Time taken: 0.309 seconds, Fetched: 1 row(s)
hive> SELECT * FROM hbatablese_myhive;
OK

**因异常而失败

java.io.IOException:java.lang.ClassCastException: org.apache.hadoop.hbase.client.Result cannot be cast to org.apache.hadoop.io.Writable**
Time taken: 1.179 seconds

hive> 

The same table on HBASE console:

hbase(main):002:0> scan 'myhive'
ROW                                   COLUMN+CELL                                                                                           



 row1                                 column=ratings:userid, timestamp=1392886585074, value=user1                                               
 row2                                 column=ratings:userid, timestamp=1392886606457, value=user2                                               
2 row(s) in 0.0520 seconds

1 个答案:

答案 0 :(得分:1)

以前在TableRecordReaderImpl.java的Writables.copyWritable(Result result, Result value)方法的旧版本中调用next(Immutablebyteswritable key, Result value)

copyWritable现已被删除,仅适用于Writable,Writable参数。

要立即复制,您需要使用value.copyFrom(result)。这将从源到目标

执行数据的深层复制

我猜你有一些库不匹配,这使得这些调用发生并试图从Result,Result转换为Writable,Writable