我想用 C3P0
( com.mchange.v2.c3p0.ComboPooledDataSource
)与 HiveDriver
( org.apache.hive.jdbc.HiveDriver
). 我有个例外:
java.sql.SQLException: Method not supported
at org.apache.hive.jdbc.HiveConnection.getHoldability(HiveConnection.java:924)
at com.mchange.v2.c3p0.impl.NewPooledConnection.<init>(NewPooledConnection.java:106)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:159)
我找到了 HiveConnection
(此处)
/*
* (non-Javadoc)
*
* @see java.sql.Connection#getHoldability()
*/
@Override
public int getHoldability() throws SQLException {
// TODO Auto-generated method stub
throw new SQLFeatureNotSupportedException("Method not supported");
}
我的问题是:为什么 HiveConnection
选择抛出一个 SQLFeatureNotSupportedException
? 而不是仅仅归还其中一个?
ResultSet.HOLD_CURSORS_OVER_COMMIT
ResultSet.CLOSE_CURSORS_AT_COMMIT
这是虫子吗?
通常,是否可以使用连接池,例如 C3P0
与 Hive
(我实际上正在使用 Spark SQL
)?
更新1(2017-11-15)
我只是试过了 dbcp2
( org.apache.commons.dbcp2.BasicDataSource
)而且成功了。我想不知怎么的 dbcp2
不调用 Connection#getHoldability()
方法。
1条答案
按热度按时间ngynwnxp1#
(我在这里回答我自己的问题。)
感谢mark rotteveel的建议,我现在也认为这个问题确实是一个bug。我已经向apache提交了一份错误报告hive-18082(这里)。
在修复错误之前,一个临时解决方法是使用不同的连接池--
DBCP2
而不是C3P0
. 由于某种原因,前者不呼吁Connection#getHoldability()
因此不受HiveConnection