Как отправить SQL-запрос в SparkSQL из веб-приложения

У меня есть приложение, которое выполняет SQL-запрос на Spark DataFrame следующим образом:

DataFrame sqlDataFrame = sqlContext.createDataFrame(accessLogs, ApacheAccessLog.class);
sqlDataFrame.registerTempTable("logs");
sqlContext.cacheTable("logs");

Row contentSizeStats = sqlContext.sql( "SELECT SUM(contentSize), COUNT(*), MIN(contentSize), MAX(contentSize) FROM logs")
                                 .javaRDD()
                                 .collect()
                                 .get(0);

Я могу подать это заявление в Spark, используя spark-submit, это работает совершенно нормально.

Но теперь я хочу разработать веб-приложение (с использованием Spring или других фреймворков), пользователи пишут SQL-скрипт в интерфейсе, нажимают Query кнопку, а затем веб-сервер отправляет сценарий SQL в Apache Spark для выполнения действия запроса, так же, как spark-submit делал выше. Я надеюсь, что после выполнения SQL Spark сможет отправить результат обратно на веб-сервер.

В официальной документации упоминается, что мы можем использовать Thrift JDBC/ODBC, но в ней только показано, как подключиться к серверу Thrift. Нет другой информации о том, как выполнить действие запроса. Я что-то пропустил? Есть ли какой-нибудь пример, на который я могу взглянуть?

Заранее спасибо!

1 ответ

Да Thrift JDBC/ODBC - лучший вариант. Вы можете использовать сервис HiveServer2

Вот код

HiveContext hiveContext = SparkConnection.getHiveContext();
hiveContext.setConf("hive.server2.thrift.port","10002");
hiveContext.setConf("hive.server2.thrift.bind.host","192.168.1.25");
HiveThriftServer2.startWithContext(hiveContext);

Это откроет порт JDBC. А через драйвер hive jdbc вы можете подключить его.

Другие вопросы по тегам