无法使用 JDBC 连接到 Phoenix
Unable to connect to Phoenix using JDBC
我有一个使用 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 更改为ms) 在关闭连接之前与使用 phoenixdb 库不同,在使用默认超时(60.000 毫秒)后关闭连接。
当我使用 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 ms,只是为了测试使用哪个。使用 DB_URL1
我得到以下错误:
java.sql.SQLException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations
我认为这意味着它找不到 IP。
但是我从来没有完全建立成功的连接,所以我希望有人能对出了什么问题提出一些建议?
感谢@PaulBastide,我设法使用以下 link 建立了连接:
jdbc:phoenix:thin:url=http://<query_server>:<port>;serialization=PROTOBUF
我还使用了与 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 更改为ms) 在关闭连接之前与使用 phoenixdb 库不同,在使用默认超时(60.000 毫秒)后关闭连接。
当我使用 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 ms,只是为了测试使用哪个。使用 DB_URL1
我得到以下错误:
java.sql.SQLException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations
我认为这意味着它找不到 IP。
但是我从来没有完全建立成功的连接,所以我希望有人能对出了什么问题提出一些建议?
感谢@PaulBastide,我设法使用以下 link 建立了连接:
jdbc:phoenix:thin:url=http://<query_server>:<port>;serialization=PROTOBUF
我还使用了与 Phoenix 发行版一起找到的瘦客户端。