我下面的蜂巢JDBC教程。 我无法得到它的工作。 当设法得到它只是挂起的连接。 它没有任何报告任何错误。 我敢肯定,蜂巢服务器正在运行。 任何帮助吗?
public class HiveJdbcClient {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
public static void main(String[] args){
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
try{
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
System.out.println("got the connection");
}catch(SQLException e){
e.printStackTrace();
}
}
}
使用netstat的输出:
$ sudo netstat -anlp | grep 10000
Password:
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 27738/java
tcp 107 0 127.0.0.1:10000 127.0.0.1:45910 ESTABLISHED 27738/java
tcp 0 0 127.0.0.1:33665 127.0.0.1:10000 ESTABLISHED 24475/java
tcp 0 0 127.0.0.1:45910 127.0.0.1:10000 ESTABLISHED 7445/java
tcp 107 0 127.0.0.1:10000 127.0.0.1:33665 ESTABLISHED 27738/java
纳雷什:尝试停止triffserver,然后移动到HIVE_HOME / bin目录从你的终端,然后使用./hive --service hiveserver 10000&命令启动蜂巢TRIFT服务器。 然后尝试运行该程序。 做一个创建表按照蜂巢客户维基例子。 然后做下一步演出表查询。 让我们知道结果一旦这个步骤之后。 我们可以以后讨论。
你可以做下面的准确判断挂起正在发生的事情。 这里是我做了跟踪它在我的破蜂巢JDBC连接的例子。 请注意,这不是一个具体的解决方案,以任何普通蜂巢连接吊错误。
这是一个问题的答案:“我怎么能找出我的JDBC连接蜂巢挂?”
是什么让这个苦苦追寻的是JDBC动态调用。 相反,你可以手动createa HiveConnection()类。 这允许你添加一些跟踪到代码直接,看到这里的窍门正在发生的事情。
我已经通过执行以下追查这一点。
*使用LOG4J *
节俭和其他JDBC蜂巢类连接时使用的log4j,如果打开调试日志记录上,可以看到细粒度的错误。 您可以通过添加很容易做到这一点
BasicConfigurator.configure()
为了您的客户端应用程序。 在任何情况下,这样做使我发现,这似乎SASL传输层中被拖延。 我想这可能是与安全相关的,但我会假设一个安全错误仍然会返回,而不是挂。所以我觉得这可能是值得JIRA的。 我贴一个跟进的问题:
如何跟踪失败OT TSaslTransport(蜂巢相关)
*另一种方法*
1)你可以抓住从GitHub,或其它地方的“HiveConnection”类的副本,并实例化一个新问题:
String url=String.format("jdbc:hive2://%s:%s/default", server, port) Properties p = new Properties(); p.setProperty("host", con); Connection jdbc = new HiveConnection(url,p);
然后,您可以将您的调试器挂钩或日志报表的HiveConnection()类。
Ulitmately,当我有这个错误,我把它上溯到:
openTransport
最终创建一个
org.apache.thrift.transport.TSaslClientTransport
实例。
和恒发生在这个代码块:
try { System.out.println(".....1 carrying on... attempting to open. " + transport.getClass().getName()); transport.open(); System.out.println("done open."); } catch (TTransportException e) { System.out.println("2 fail ."); e.printStackTrace(); throw new SQLException("Could not establish connection to " + uri + ": " + e.getMessage(), " 08S01"); }
FYI我已跟进有关为什么我的连接失败。 它可能与你以及... 如何跟踪失败OT TSaslTransport(蜂巢相关)
我有同样的问题/选中此PARAMS:
driverName = "org.apache.hive.jdbc.HiveDriver"
con = DriverManager.getConnection("jdbc:hive2://192.168.1.93:10000/default", "", "");