2016-04-14 8 views
0

Ich arbeite mit Cloudera Impala Server Version 5.4.7 zuerst um sicherzustellen, dass der Port offen ist, habe ich es mit Telnet validieren.Verbindung zu Cloudera Impala/Hive außerhalb des Clusters

 Class.forName("org.apache.hive.jdbc.HiveDriver"); 
     DriverManager.setLoginTimeout(30); 
try (java.sql.Connection connection = DriverManager.getConnection("jdbc:hive2://12.23.56.789:123456/someName;auth=noSasl")) 
{ System.out.println("connected");  } 

Aber ich nie gelingen

alles, was ich dieser Fehler ist von Timeout erhalten zu verbinden:

, was das Problem sein könnte? ich bin mit der exakt gleichen hive Version als cloudera Version

[14 Apr 2016 06:27:26,797] [ERROR] [main] [org.apache.hive.jdbc.HiveConnection] - Error opening session 
org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out 
    at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129) 
    at org.apache.thrift.transport.TTransport.readAll(TTransport.java:86) 
    at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:429) 
    at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:318) 
    at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:219) 
    at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69) 
    at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:156) 
    at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:143) 
    at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:475) 
    at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:181) 
    at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at com.datorama.core.service.delivery.providers.DatabaseProvider.main(DatabaseProvider.java:330) 
Caused by: java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.socketRead(Unknown Source) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.io.BufferedInputStream.fill(Unknown Source) 
    at java.io.BufferedInputStream.read1(Unknown Source) 
    at java.io.BufferedInputStream.read(Unknown Source) 
    at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:127) 
    ... 13 more 
Exception in thread "main" java.sql.SQLException: Could not establish connection to jdbc:hive2://54.69.2.250:21050/sage_global;auth=noSasl: java.net.SocketTimeoutException: Read timed out 
    at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:486) 
    at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:181) 
    at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at com.datorama.core.service.delivery.providers.DatabaseProvider.main(DatabaseProvider.java:330) 
Caused by: org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out 
    at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:129) 
    at org.apache.thrift.transport.TTransport.readAll(TTransport.java:86) 
    at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:429) 
    at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:318) 
    at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:219) 
    at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69) 
    at org.apache.hive.service.cli.thrift.TCLIService$Client.recv_OpenSession(TCLIService.java:156) 
    at org.apache.hive.service.cli.thrift.TCLIService$Client.OpenSession(TCLIService.java:143) 
    at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:475) 
    ... 5 more 
Caused by: java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.socketRead(Unknown Source) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.io.BufferedInputStream.fill(Unknown Source) 
    at java.io.BufferedInputStream.read1(Unknown Source) 
    at java.io.BufferedInputStream.read(Unknown Source) 
    at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:127) 
    ... 13 more 

Antwort

1

Wir ein gutes Geschäft machen von außerhalb des Clusters von Abfragen mit JDBC. Obwohl ich glaube, dass es möglich ist, den Hive-JDBC-Treiber zu verwenden, müssen Sie in der JDBC-Verbindungszeichenfolge einen korrekten Port festlegen, wahrscheinlich 21050 für Impala. Sie müssen sicherstellen, dass der Hostname (oder die IP-Adresse) auf eine Instanz verweist, auf der der Impala-Daemon ausgeführt wird (für Hive können Sie auf einen Namenknoten verweisen). Meine Vermutung ist, dass die Port-Nummer falsch ist, da es scheint, dass der Fehler einfach darin besteht, keine Top-Verbindung herzustellen.

Wir haben uns entschieden, den spezifischen Treiber von Cloudera für Impala zu verwenden, obwohl dies möglicherweise nicht notwendig ist. Wir haben auch einen Load Balancer eingerichtet, so dass es eine stabile Adresse für direkte Anfragen gibt, anstatt dass der Aufrufer eine bestimmte Impala Instanz auswählen muss. Dadurch wird die Last gleichmäßig verteilt, und wir können Änderungen im Cluster vornehmen, ohne dass externe Anrufer etwas ändern müssen.