避免以编程方式使用创建的上下文启动HiveThriftServer2

时间:2016-09-27 07:50:36

标签: hadoop apache-spark hive apache-spark-sql apache-spark-2.0

我们正在尝试使用ThriftServer从spark 2.0.0中的spark temp表中查询数据。

首先,我们创建了启用了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。有没有办法以编程方式在代码中启动带有上下文的thrift服务器? 我看到在启动时将配置--conf spark.sql.hive.thriftServer.singleSession=true传递给ThriftServer(sbin / start-thriftserver.sh),但我不明白如何为作业定义它。我试图在sparkSession构建器中设置此配置属性,但beeline没有显示临时表。

1 个答案:

答案 0 :(得分:5)

  

有没有办法让一个端口上有一个ThriftServer可以访问不同sparkSessions中的所有临时表?

没有。 ThriftServer使用特定会话,只能在此会话中访问临时表。这就是原因:

  

beeline没有显示临时表。

使用sbin/start-thriftserver.sh启动独立服务器时。

spark.sql.hive.thriftServer.singleSession并不代表您为多台服务器获得单个会话。对于单个Thrift服务器的所有连接,它使用相同的会话。可能的用例:

  • 你开始节俭服务器。
  • client1连接到此服务器并创建临时表foo
  • client2连接到此服务器并读取foo