我有一个使用HBase和Phoenix设置的Hadoop集群,我尝试使用JDBC连接到Phoenix,但我无法获得成功的连接。无法使用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!");
}
而随着这段代码,似乎我改变了设置,被确认为查询取10分(600.000毫秒client.jar中 - 这就是我在连接关闭之前将其更改为默认值60.000 ms),与使用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毫秒我的超时时间。但是,当使用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。
但是我从来没有完全获得过成功的连接,所以我希望有人会对发生了什么问题有一些建议?
尝试使用瘦客户端驱动程序,您的jdbc url看起来不正确 - 尝试使用瘦 - jdbc:phoenix:thin:url = http:// localhost:8765(thin driver class - org.apache.phoenix.queryserver .client.Driver) –
我可能忘记提及我没有将它连接到本地主机凤凰服务,而是一个远程服务。这就是为什么我没有在问题中编写IP的原因,而是使用了'xx.xx.xx.xx'。使用你的方法我得到'java.lang.RuntimeException:java.net.MalformedURLException:没有协议::8765' –
Zeliax
@PaulBastide但是,如果我添加__http__到URL我得到'java.lang.RuntimeException:org.apache.phoenix .shaded.com.fasterxml.jackson.core.JsonParseException:意外字符('o'(代码111)):期望的空间分隔根级值。这意味着我使用的URL是'jdbc:phoenix:thin:url = http://xx.xx.xx.xx:8765 /',驱动程序是'org.apache.phoenix.queryserver.client。驱动程序' – Zeliax