Как отправить 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 вы можете подключить его.