10

我们正在尝试使用 ThriftServer 从 spark 临时表中查询数据,在 spark 2.0.0 中。

首先,我们创建了启用 Hive 支持的 sparkSession。目前,我们使用 sqlContext 启动 ThriftServer,如下所示:

HiveThriftServer2.startWithContext(spark.sqlContext());

我们有注册临时表“spark_temp_table”的火花流:

StreamingQuery streamingQuery = streamedData.writeStream()
                                             .format("memory")
                                             .queryName("spark_temp_table")
                                             .start();

使用直线,我们可以看到临时表(运行 SHOW TABLES);

当我们想用这种方法运行第二个作业(使用第二个 sparkSession)时,我们必须使用不同的端口启动第二个 ThriftServer。

我在这里有两个问题:

  1. 有什么方法可以在一个端口上拥有一个 ThriftServer 以访问不同 sparkSessions 中的所有临时表?

  2. HiveThriftServer2.startWithContext(spark.sqlContext());用 注释@DeveloperApi。有没有办法以编程方式在代码中没有上下文的情况下启动节俭服务器?
    我看到启动时有配置--conf spark.sql.hive.thriftServer.singleSession=true传递给 ThriftServer(sbin/start-thriftserver.sh),但我不明白如何为作业定义它。我尝试在 sparkSession builder 中设置此配置属性,但直线没有显示临时表。

4

1 回答 1

5

有什么方法可以在一个端口上拥有一个 ThriftServer 以访问不同 sparkSessions 中的所有临时表?

ThriftServer,使用特定会话,临时表只能在此会话中访问。这就是为什么:

直线没有显示临时表。

当您使用sbin/start-thriftserver.sh.

spark.sql.hive.thriftServer.singleSession并不意味着您可以获得多个服务器的单个会话。它对与单个 Thrift 服务器的所有连接使用相同的会话。可能的用例:

  • 你启动节俭服务器。
  • client1 连接到该服务器并创建临时表foo
  • client2 连接到此服务器并读取foo
于 2016-11-20T12:17:27.987 回答