首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Hive连接超长Hbase宽表错误

2013-07-20 
Hive连接超长Hbase宽表异常我们用Hive去连接一个Hbase款表,大概有150多个字段。因此,就报了异常:FAILED: Er

Hive连接超长Hbase宽表异常

我们用Hive去连接一个Hbase款表,大概有150多个字段。

因此,就报了异常:

FAILED: Error in metadata: MetaException(message:javax.jdo.JDODataStoreException: Put request failed : INSERT INTO `SERDE_PARAMS` (`PARAM_VALUE`,`SERDE_ID`,`PARAM_KEY`) VALUES (?,?,?)

NestedThrowables:

org.datanucleus.store.mapped.exceptions.MappedDatastoreException: INSERT INTO `SERDE_PARAMS` (`PARAM_VALUE`,`SERDE_ID`,`PARAM_KEY`) VALUES (?,?,?) )

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

?

后来翻了墙,查了谷歌度娘,发现了原因。

在hive元数据中,存放serde信息的是一个varchar(4000)的字段,为了兼容oracle。

但是超过4000个字段怎么办?

?

目前使用的是mysql数据库,解决方法是将字段扩充成30000如下:

mysql> desc SERDE_PARAMS;

+-------------+---------------+------+-----+---------+-------+

| Field?????? | Type????????? | Null | Key | Default | Extra |

+-------------+---------------+------+-----+---------+-------+

| SERDE_ID??? | bigint(20)??? | NO?? | PRI | NULL??? |?????? |

| PARAM_KEY?? | varchar(256)? | NO?? | PRI | NULL??? |?????? |

| PARAM_VALUE | varchar(4000) | YES? |???? | NULL??? |?????? |

+-------------+---------------+------+-----+---------+-------+

3 rows in set (0.03 sec)

?

mysql> alter table SERDE_PARAMS modify column PARAM_VALUE varchar(30000);

Query OK, 447 rows affected (0.86 sec)

Records: 447? Duplicates: 0? Warnings: 0

?

mysql> desc SERDE_PARAMS;

+-------------+----------------+------+-----+---------+-------+

| Field??? ???| Type?????????? | Null | Key | Default | Extra |

+-------------+----------------+------+-----+---------+-------+

| SERDE_ID??? | bigint(20)???? | NO?? | PRI | NULL??? |?????? |

| PARAM_KEY?? | varchar(256)?? | NO?? | PRI | NULL??? |?????? |

| PARAM_VALUE | varchar(30000) | YES? |???? | NULL??? |?????? |

+-------------+----------------+------+-----+---------+-------+

3 rows in set (0.08 sec)??

?

异常解决。

但是只能暂时解决MySQL库中的问题,加入元数据存在其他库,则还会存在这样的问题。

?

?

热点排行