无法使用JDBC连接到Phoenix

时间:2017-04-06 09:42:41

标签: java hadoop jdbc jar phoenix

我有一个使用HBase和Phoenix设置的Hadoop集群,我正在尝试使用JDBC连接到Phoenix,但我无法成功连接。

我想使用JDBC来使用Python 3.x进行连接,但出于简单的测试目的,我在Eclipse中使用Java建立连接。

我最初在Python上使用第三方库(phoenixdb),但是我开始使用这个库获得超时(随着我的数据库的增长)。在此之后,我在 hbase-site.xml 的设置中更改了一些变量,以避免超时,但由于某些原因导致使用此第三方库无法解决问题。

所以我尝试转而使用JDBC和Java项目 - 至少是为了测试。

我有以下Java代码:

public class PhoenixTest {

    static final String JDBC_DRIVER = "org.apache.phoenix.jdbc.PhoenixDriver";
    static final String DB_URL1 = "jdbc:phoenix:https://xx.xx.xx.xx:8765/";
    static final String DB_URL2 = "jdbc:phoenix:xx.xx.xx.xx:8765/";

    public static void main(String[] args) {
        Connection conn = null;
        Statement st = null;

        try {
            Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");

            System.out.println("Connecting to database..");

            conn = DriverManager.getConnection(DB_URL);
            st = conn.createStatement();

            st.close();
            conn.close();

        } catch (SQLException se) {
            se.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (st != null)
                    st.close();
            } catch (SQLException se2) {
            }
            try {
                if (conn != null)
                    conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
    }
    System.out.println("Finished!");
}

使用这段代码和client.jar,似乎我更改的设置被识别为查询需要10分钟(600.000毫秒 - 这是我将其从默认的60.000毫秒更改为)之前连接已关闭,与使用phoenixdb库不同,在使用默认超时(60.000 ms)后关闭连接。

当我使用DB_URL2时,我收到以下错误:

java.sql.SQLException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Thu Apr 06 11:13:35 CEST 2017, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=80236: row 'SYSTEM:CATALOG,,' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=hadoopslave,16020,1490706604328, seqNum=0

这与600.000 ms的超时时间不符。但是当使用DB_URL1时,它似乎使用client.jar以及我在.jar(hbase-default.xml)中设置的超时时间,我将其设置为300.000 ms,只是为了测试使用哪一个。使用DB_URL1我收到以下错误:

java.sql.SQLException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations

我认为这意味着它无法找到IP。

但是我从来没有完全成功连接,所以我希望有人会对出错的地方提出一些建议?

1 个答案:

答案 0 :(得分:1)

感谢@PaulBastide,我设法使用以下链接获得连接:

jdbc:phoenix:thin:url=http://<query_server>:<port>;serializa‌​tion=PROTOBUF

我还使用了与Phoenix发行版一起发现的瘦客户端。