java - 无法使用 JDBC 连接到 Phoenix

标签 java hadoop jdbc jar apache-phoenix

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

我想使用 JDBC 通过 Python 3.x 进行连接,但为了简单的测试目的,我在 Eclipse 中使用 Java 设置了一个连接。

我最初使用 Python 的第 3 方库 (phoenixdb),但我开始使用这个库时出现超时(随着我的数据库的增长)。在此之后,我更改了我的 hbase-site.xml 设置中的一些变量,以避免超时,但出于某种原因,这并没有解决我使用这个第 3 方库的问题。

所以我尝试转向 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 毫秒更改为与使用默认超时(60.000 毫秒)后关闭连接的 phoenixdb 库不同,连接已关闭。

当我使用 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 毫秒超时时间不匹配。但是,当使用 DB_URL1 时,它似乎使用了 client.jar 和我在 .jar 中设置的超时时间(hbase-default .xml),我已将其设置为 300.000 毫秒,只是为了测试使用了哪一个。使用 DB_URL1 我收到以下错误:

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

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

但是我从来没有完全建立过成功的连接,所以我希望有人能对出了什么问题提出一些建议?

最佳答案

感谢@PaulBastide,我设法使用以下链接建立了连接:

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

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

关于java - 无法使用 JDBC 连接到 Phoenix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43251433/

相关文章:

java - 在 Gradle 和 IntelliJ 中设置语言级别

java - 选择后禁用单选按钮的正确语法

hadoop - 将时间戳分类为上午,下午,晚上

jdbc - clojure/java.jdbc 0.3.0 中已弃用的 "with-query-results"函数的替代品是什么?

java - 以 "type safe"方式做某事是什么意思?

javascript - 如何将音频 blob 从 javascript 发送到 java spring 服务器?

java - 从 Java 中的字符串中删除变音符号

java - Spark 作业失败,因为它找不到 hadoop core-site.xml

hadoop - 在cloudera Manager中,如何迁移已删除的datanode数据

java.sql.Timestamp 存储 NanoSeconds 的方式