代码之家  ›  专栏  ›  技术社区  ›  leeyuiwah

为什么HiveConnection不支持getHoldability()?将C3P0与HiveDriver结合使用

  •  0
  • leeyuiwah  · 技术社区  · 7 年前

    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 ( here )

    /*
     * (non-Javadoc)
     *
     * @see java.sql.Connection#getHoldability()
     */
    
    @Override
    public int getHoldability() throws SQLException {
        // TODO Auto-generated method stub
        throw new SQLFeatureNotSupportedException("Method not supported");
    }   
    

    我的问题:为什么 HIV连接 选择投掷 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 )它成功了。我想不知怎么的 不调用 Connection#getHoldability() 方法

    1 回复  |  直到 7 年前
        1
  •  0
  •   leeyuiwah    7 年前

    (我在这里回答我自己的问题。)

    感谢Mark Rotteveel的建议,我现在也认为这个问题确实是一个bug。我已经提交了一份错误报告HIVE-18082( here )使用Apache。

    在修复错误之前,一个临时的解决方法是使用不同的连接池-- DBCP2 而不是 C3P0 . 出于某种原因,前者没有呼吁 Connection#getHoldability() 因此不受中此错误的影响 HiveConnection