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库中的问题,加入元数据存在其他库,则还会存在这样的问题。

 

 

你可能感兴趣的:(Hive,Hbase,元数据)