Невозможно соединиться / запросить от Presto на AWS EMR с Java JDBC - PullRequest
1 голос
/ 09 июля 2019

Если я ssh подключусь к главному узлу моего кластера presto emr, я могу выполнять запросы.Однако я хотел бы иметь возможность выполнять запросы из исходного кода Java на моем локальном компьютере, который подключается к кластеру emr.Я настроил свой кластер presto emr с конфигурациями по умолчанию.

Я пробовал переадресацию портов, но она все еще не работает.Когда я создаю соединение, я распечатываю его, и оно «com.facebook.presto.jdbc.PrestoConnection@XXXXXXX», но у меня все еще есть сомнения, действительно ли оно подключено, так как я не могу выполнить какие-либо запросы и оно всегда отключается.

import java.net.URI;
import java.net.URISyntaxException;
import java.sql.*;

public class PrestoJDBC {
    // JDBC driver name and database URL
    static final String JDBC_DRIVER = "com.facebook.presto.jdbc.PrestoDriver";
    //static final String JDBC_DRIVER = "com.teradata.presto.jdbc42.Driver";

    static final String DB_URL = "jdbc:presto://ec2-XX-XX-XXX-XX.us-east-2.compute.amazonaws.com:8889/hive/default";

    //  Database credentials
    static final String USER = "hadoop";
    static final String PASS = "";

    public static void main(String[] args) throws URISyntaxException {
        Connection conn = null;
        Statement stmt = null;
        try{
            //STEP 2: Register JDBC driver
            Class.forName(JDBC_DRIVER);

            //STEP 3: Open a connection
            //conn = DriverManager.getConnection(DB_URL,USER,PASS);
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            //STEP 4: Execute a query

            stmt = conn.createStatement();
            System.out.println(conn);
            String sql;
            sql = "select * from onedaytest where readOnly=true;";
            ResultSet rs = stmt.executeQuery(sql);

            //STEP 5: Extract data from result set
            while(rs.next()){

                //Display values
                System.out.println(rs.getString(3));
            }
            //STEP 6: Clean-up environment
            rs.close();
            stmt.close();

            conn.close();
        }catch(SQLException se){
            se.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                if(stmt!=null)
                    stmt.close();
            }catch(SQLException se2){
            }
            try{
                if(conn!=null)
                    conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("Done");
    }

}

Я получаю java.sql.SQLEXception: ошибка при выполнении запроса и java.net.SocketTimeoutException.Мне было интересно, есть ли какие-либо другие конфигурации или вещи, которые мне нужно настроить, чтобы иметь возможность запрашивать.

...