如何通过eclipse连接到emr上的hive?

fnvucqvd  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(425)

我正试图通过eclipse连接到emr上的hive,但出现了一个错误。

  1. Exception in thread "main" java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:8158: java.net.ConnectException: Connection refused
  2. at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:215)
  3. at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:163)
  4. at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
  5. at java.sql.DriverManager.getConnection(DriverManager.java:664)
  6. at java.sql.DriverManager.getConnection(DriverManager.java:247)
  7. at com.readypulse.sparkanalytics.HiveQLConnector.<init>(HiveQLConnector.java:31)
  8. at com.readypulse.sparkanalytics.HiveQLConnector.main(HiveQLConnector.java:83)
  9. Caused by: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused
pbwdgjma

pbwdgjma1#

你需要一个ssh隧道来戳一个洞给emr主机。然后通过jdbc连接。

  1. private static String driverName = "org.apache.hive.jdbc.HiveDriver";
  2. private static String hiveConnectionString = "jdbc:hive2://localhost:8158";
  3. //Need port forwarding
  4. SparkPortForwarding.portForwardForSpark();
  5. Class c = Class.forName(driverName);
  6. Connection connection = DriverManager.getConnection(hiveConnectionString,
  7. "user", "pwd");
  8. Statement stmt = connection.createStatement();
  9. ResultSet rs = stmt.executeQuery(sql);

您可以通过shell进行端口转发,如下所示:

  1. ssh -i ~/mykey.pem -N -L 8158:<maserhost>:10000 hadoop@<masterhost>

或者可以使用jsch库来使用代码

  1. public static void portForwardForSpark() {
  2. try {
  3. if(session != null && session.isConnected()) {
  4. return;
  5. }
  6. JSch jsch = new JSch();
  7. jsch.addIdentity(PATH_TO_SSH_KEY_PEM);
  8. String host = REMOTE_HOST;
  9. session = jsch.getSession(USER, host, 22);
  10. // username and password will be given via UserInfo interface.
  11. UserInfo ui = new MyUserInfo();
  12. session.setUserInfo(ui);
  13. session.connect();
  14. int assingedPort = session.setPortForwardingL(LPORT, RHOST, RPORT);
  15. System.out.println("Port forwarding done for the post : " + assingedPort);
  16. } catch (Exception e) {
  17. System.out.println(e);
  18. }
  19. }
展开查看全部

相关问题