2016-09-27 74 views
10

我们试图使用ThriftServer从spark 2.0.0中的spark temp表中查询数据。以编程方式避免以创建的上下文启动HiveThriftServer2

首先,我们创建了SparkSession并启用了Hive支持。 目前,我们开始ThriftServer与sqlContext这样的:

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构建器中设置此配置属性,但直线没有显示临时表。

+2

回答你的问题之前,我会问一个问题:)你真的需要开始'ThriftServer'“编程”? – user1314742

+0

@ user1314742不,我们不需要(也不想 - 试图避免'HiveThriftServer2.startWithContext(spark.sqlContext());')。我们实际上试图启动'sbin/start-thriftserver。sh'与单一会议,但没有运气。基本上我们需要的是通过Spark JDBC服务器访问'temp'表并且查询'temp'表(从具有'JDBC'连接的不同应用程序)查询 – VladoDemcak

+0

当我们全部使用'master local''时可以看到临时表? – VladoDemcak

回答

5

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

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

直线没有显示临时表。

当您启动独立服务器与sbin/start-thriftserver.sh

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

  • 你开始节俭服务器。
  • client1连接到此服务器并创建临时表foo
  • 客户机程序连接到该服务器,并读取foo
+0

谢谢你的回答,现在我非常感谢你!我在这里还有一个问题。比方说,我希望'client1'作为* spark spark作业*。是否有可能获得'thriftserver session',或者我可以如何将流作业连接到以'sbin/start-thriftserver.sh'开头的运行节点服务器? – VladoDemcak

+0

我不认为这是可能的,但我可能是错的。 – 2016-11-20 13:14:47

+0

@VladoDemcak您是否发现了以编程方式运行HiveThriftServer2的其他方法?我有一个非常相似的用例,不知道我可能在这里只是选错了一个工具。 – Roman