如何从Web应用程序向SparkSQL发送SQL查询

时间:2015-12-05 13:12:02

标签: spring apache-spark apache-spark-sql spring-jdbc jdbc-odbc

我有一个应用程序在Spark DataFrame上执行SQL查询,如下所示:

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-submit将此应用程序提交给Spark,它完全正常。

但现在我想要开发一个Web应用程序(使用Spring或其他框架),用户在前端编写SQL脚本,单击Query按钮,然后Web服务器将SQL脚本发送到Apache Spark执行查询操作,就像上面spark-submit所做的那样。在SQL执行之后,我希望Spark能够将结果发送回Web服务器。

在官方文档中提到我们可以使用Thrift JDBC / ODBC,但它只介绍了如何连接到Thrift服务器。没有关于如何执行查询操作的其他信息。我错过了什么吗?有什么例子我可以看看吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

是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驱动程序,您可以连接它。