避免用编程方式创建的上下文启动hivethriftserver2

ruarlubt  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(368)

在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没有显示临时表。

lp0sw83n

lp0sw83n1#

有没有办法让一个thriftserver在一个端口上访问不同sparksessions中的所有临时表?
不。 ThriftServer 使用特定会话,只能在此会话中访问临时表。这就是为什么:
beeline没有显示临时表。
启动独立服务器时 sbin/start-thriftserver.sh . spark.sql.hive.thriftServer.singleSession 但这并不意味着您可以为多个服务器提供一个会话。它使用相同的会话连接到一个单一的储蓄服务器。可能的用例:
你启动了储蓄服务器。
client1连接到此服务器并创建临时表 foo .
client2连接到此服务器并读取 foo

相关问题