无法从直线访问 Spark 2.0 临时表

Posted

技术标签:

【中文标题】无法从直线访问 Spark 2.0 临时表【英文标题】:Can't access Spark 2.0 Temporary Table from beeline 【发布时间】:2016-09-27 18:50:33 【问题描述】:

使用 Spark 1.5.1,我已经能够使用 Thrift Server 从 Beeline 访问 spark-shell 临时表。通过阅读 *** 上相关问题的答案,我已经能够做到这一点。

但是,升级到 Spark 2.0 后,我无法再看到 Beeline 的临时表,这是我正在执行的步骤。

我正在使用以下命令启动 spark-shell:

./bin/spark-shell --master=myHost.local:7077 —conf spark.sql.hive.thriftServer.singleSession=true

一旦 spark shell 准备好,我输入以下几行来启动 thrift 服务器并从一个数据帧创建一个临时视图,该数据帧将其源存储在一个 json 文件中

import org.apache.spark.sql.hive.thriftserver._

spark.sqlContext.setConf("hive.server2.thrift.port","10002")
HiveThriftServer2.startWithContext(spark.sqlContext)
val df = spark.read.json("examples/src/main/resources/people.json")
df.createOrReplaceTempView("people")
spark.sql("select * from people").show()

最后一条语句显示表格,运行良好。

但是,当我启动 beeline 并登录到我的 thrift 服务器实例时,我看不到任何临时表:

show tables;
+------------+--------------+--+
| tableName  | isTemporary  |
+------------+--------------+--+
+------------+--------------+--+
No rows selected (0,658 seconds)

我是否错过了有关我从 1.5.1 升级到 2.0 的 spark 的某些内容,如何才能访问我的临时表?

【问题讨论】:

【参考方案1】:

升级到 spark 2.0.1 后这对我有用

 val sparkConf = 
        new SparkConf()
            .setAppName("Spark Thrift Server Demo")
            .setMaster(sparkMaster)
            .set("hive.metastore.warehouse.dir", hdfsDataUri + "/hive")

      val spark = SparkSession
      .builder()
      .enableHiveSupport()
      .config(sparkConf)
      .getOrCreate()

  val sqlContext = new org.apache.spark.sql.SQLContext(spark.sparkContext) 
      HiveThriftServer2.startWithContext(sqlContext)

【讨论】:

以上是关于无法从直线访问 Spark 2.0 临时表的主要内容,如果未能解决你的问题,请参考以下文章

使用 spark-sql 缓存临时表

Spark:通过对临时表执行 sql 查询来创建临时表

Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?

Spark JDBC 找不到临时表

无法从 plpgsql 函数中的动态命名临时表运行“选择进入”

无法从临时表中删除?