如果将ssh放入presto emr群集的主节点上,则可以运行查询。但是,我希望能够在连接到emr群集的本地计算机上从Java源代码运行查询。我使用默认配置设置了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。我想知道是否还有其他配置或需要设置才能查询的东西。
答案 0 :(得分:0)
这可能是由于防火墙所致,它可能不允许您连接到服务器。您必须在“主”组中创建一个入站规则。
再试一次。会的!!