我是 phoenix 的新手,hbase.hbase 表和 phoenix View 运行良好,我可以通过 phoenix 获取数据。当我访问 jdbc 到 phoenix 时,它卡住了。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Phoenix {
private static String driver = "org.apache.phoenix.jdbc.PhoenixDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Statement stmt = null;
ResultSet rs = null;
System.out.println("start...");
Connection con = DriverManager.getConnection("jdbc:phoenix:[my_cloud_server_ip]:2181");
System.out.println(con);
con.close();
}
}
(只有一个 zookeeper 服务器有公共(public)互联网 ip,所以我把这个 ip 写在那里,这有关系吗?)
它打印“开始...”并且不再有任何响应
但是当 url 是“jdbc:phoenix:ip:2181”或“jdbc:phoenix:ip:2181/hbase”时
我没有收到回复
当我添加一些其他词时,例如“jdbc:phoenix:ip:2181/balabala”
我得到空指针异常
为什么?
我希望你能明白我说的:)
最佳答案
重现你的例子,我得到一个 java.net.SocketTimeoutException
60 秒后,由 java.net.UnknownHostException: unknown host: <hostname_of_my_zk_server>
引起.但如果您赶时间(或者如果您有自定义 hbase-site.xml
客户端超时时间较长),也许这就是您所谓的“无响应”。
这个错误似乎与 this article 中解释的一样(末尾的 Zookeeper 部分):
As in our case CDH was running in a test VM, we encountered this issue: http://stackoverflow.com/questions/18428722/hbase-java-client-unknown-host-localhost-localdomain
That was worked around by adding localhost.localdomain to the existing /etc/hosts entry for cluster1, which was already pointing to the right IP address.
This answer在 SO 上总结了解决方案。
基本上,您需要在 /etc/hosts
中添加一个条目客户端:
<my_cloud_server_ip> <hostname_of_my_cloud_server_ip>
此外,您需要有一个 hbase-site.xml
客户端(您可以使用服务器上的客户端作为基础)。
关于hadoop - phoenix jdbc 不工作,没有异常并卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51498170/