Presto Query через ELB ошибка "Простой HTTP-запрос был отправлен HTTPS" - PullRequest
0 голосов
/ 21 ноября 2018

Когда используется AWS ELB (Elastic Load Balancer) с прослушивателем HTTPS, который перенаправляет запрос в кластер presto (0.193), который работает по HTTP, клиенту Java, использующему presto-jdbc (0.213), не удается выполнить запрос выбора из-заОшибка «простой HTTP-запрос был отправлен на порт HTTPS».

Exception in thread "main" java.sql.SQLException: Error executing query
    at com.facebook.presto.jdbc.PrestoStatement.internalExecute(PrestoStatement.java:274)
    at com.facebook.presto.jdbc.PrestoStatement.execute(PrestoStatement.java:227)
    at com.facebook.presto.jdbc.PrestoStatement.executeQuery(PrestoStatement.java:76)
    at com.DpTool.executeJdbcQuerySsl(DpTool.java:332)
    at com.DpTool.prestoJdbcSsl(DpTool.java:315)
    at com.DpTool.main(DpTool.java:520)
Caused by: java.lang.RuntimeException: Error fetching next at http://cluster-elb.mydomain:8443/v1/statement/20181120_215602_00038_57ryf/1 returned an invalid response: JsonResponse{statusCode=400, statusMessage=Bad Request, headers={connection=[close], content-length=[236], content-type=[text/html], date=[Tue, 20 Nov 2018 21:56:02 GMT], server=[awselb/2.0]}, hasValue=false} [Error: <html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
</body>
</html>
]
    at com.facebook.presto.jdbc.internal.client.StatementClientV1.requestFailedException(StatementClientV1.java:436)
    at com.facebook.presto.jdbc.internal.client.StatementClientV1.advance(StatementClientV1.java:383)
    at com.facebook.presto.jdbc.PrestoResultSet.getColumns(PrestoResultSet.java:1742)
    at com.facebook.presto.jdbc.PrestoResultSet.<init>(PrestoResultSet.java:119)
    at com.facebook.presto.jdbc.PrestoStatement.internalExecute(PrestoStatement.java:249)
    ... 5 more

Похоже, что код StatementClientV1.advance пытается посетить "http://cluster -elb.mydomain: 8443 / ... "Это адрес ELB, за исключением того, что он должен быть" https "вместо префикса" http ".Тот же клиентский код прекрасно работает, когда выполняется запрос непосредственно к другому престоб кластеру HTTPS (без ELB).Вот клиентский код Java.URL-адрес "cluster-elb.mydomain: 8443"

Properties properties = new Properties();
properties.setProperty("SSL", "true");
Connection conn = DriverManager.getConnection(url, properties);
Statement stmt = conn.createStatement();
String query = "select cluster, query_text from mytable where ds='2018-10-20' limit 10";
ResultSet rs = stmt.executeQuery(query);

Почему клиентский код presto-jdbc сбит с толку и как заставить работать запрос?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Проблема связана с https://github.com/prestodb/presto/issues/8232, где поле nextUri в QueryStatusInfo неправильно установлено как http вместо https сервером presto (когда клиент общается с presto через elb или proxy).

0 голосов
/ 21 ноября 2018

Это должно работать в более новых версиях Presto.Попробуйте с 0.213.

...