在spark 2.0.0中,我们尝试使用thriftserver从spark temp表中查询数据。
首先,我们创建了启用配置单元支持的sparksession。目前,我们使用sqlcontext启动thriftserver,如下所示:
HiveThriftServer2.startWithContext(spark.sqlContext());
我们有一个注册了临时表“spark\u temp\u table”的spark stream:
StreamingQuery streamingQuery = streamedData.writeStream()
.format("memory")
.queryName("spark_temp_table")
.start();
通过直线,我们可以看到临时表(运行show表);
当我们想用这种方法运行第二个作业(使用第二个sparksession)时,我们必须用不同的端口启动第二个thriftserver。
我有两个问题:
有没有办法让一个thriftserver在一个端口上访问不同sparksessions中的所有临时表? HiveThriftServer2.startWithContext(spark.sqlContext());
注解为 @DeveloperApi
. 有没有什么方法可以用代码中没有的上下文来启动thrift服务器?
我看到有配置 --conf spark.sql.hive.thriftServer.singleSession=true
在启动时传递给thriftserver(sbin/start-thriftserver.sh),但我不明白如何为作业定义这个。我试图在sparksession builder中设置此配置属性,但beeline没有显示临时表。
1条答案
按热度按时间lp0sw83n1#
有没有办法让一个thriftserver在一个端口上访问不同sparksessions中的所有临时表?
不。
ThriftServer
使用特定会话,只能在此会话中访问临时表。这就是为什么:beeline没有显示临时表。
启动独立服务器时
sbin/start-thriftserver.sh
.spark.sql.hive.thriftServer.singleSession
但这并不意味着您可以为多个服务器提供一个会话。它使用相同的会话连接到一个单一的储蓄服务器。可能的用例:你启动了储蓄服务器。
client1连接到此服务器并创建临时表
foo
.client2连接到此服务器并读取
foo