在 Spark 2.0.0 中,我们尝试使用 ThriftServer 从 Spark 临时表中查询数据。
首先,我们创建了启用了 Hive 支持的 SparkSession。
目前,我们使用 sqlContext 启动 ThriftServer,如下所示:
HiveThriftServer2.startWithContext(spark.sqlContext());
我们有带有注册临时表“spark_temp_table”的 Spark 流:
StreamingQuery streamingQuery = streamedData.writeStream()
.format("memory")
.queryName("spark_temp_table")
.start();
使用 beeline 我们可以看到临时表(运行 SHOW TABLES);
当我们想用这种方法运行第二个作业(使用第二个 SparkSession)时,我们必须使用不同的端口启动第二个 ThriftServer。
我在这里有两个问题:
有没有办法让一个端口上的一台 Thrift 服务器能够访问不同 Spark 会话中的所有临时表?
HiveThriftServer2.startWithContext(spark.sqlContext());
注释为@DeveloperApi
。有没有办法以编程方式启动带有上下文而不是代码中的 Thrift 服务器?
我看到有配置--conf spark.sql.hive.thriftServer.singleSession=true
在启动时传递给 ThriftServer (sbin/start-thriftserver.sh),但我不明白如何为作业定义它。我尝试在sparkSession builder中设置此配置属性,但beeline没有显示临时表。
有没有办法让一个端口上的一台 Thrift 服务器能够访问不同 Spark 会话中的所有临时表?
No. ThriftServer
使用特定的会话,临时表只能在该会话内访问。这就是为什么:
beeline 没有显示临时表。
当你启动独立服务器时sbin/start-thriftserver.sh
.
spark.sql.hive.thriftServer.singleSession
并不意味着您可以获得多个服务器的单个会话。它对所有连接使用相同的会话单个 Thrift 服务器。可能的用例:
- 你启动thrift服务器。
- client1 连接到该服务器并创建临时表
foo
.
- client2 连接到该服务器并读取
foo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)