我有一个应用程序在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服务器。没有关于如何执行查询操作的其他信息。我错过了什么吗?有什么例子我可以看看吗?
提前致谢!
答案 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驱动程序,您可以连接它。