如何让Spark SQL和thift服务器看到相同的Hive Metastore?

时间:2015-07-24 17:31:24

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

使用spark-shellHiveContext,我尝试显示所有配置单元表。但是,当我启动thirft server并使用beeline检查所有表时,它在那里是空的。

在Spark SQL文档中,它说 (1)如果我将hive-site.xml添加到conf/的spark中,saveAsTable DataFrame方法会将表保存到xml文件中指定的配置单元。 (2)如果我将hive-site.xml放入spark conf/thriftServer将连接到xml文件中指定的配置单元。

现在我在conf/中没有任何这样的xml文件,所以我想他们都应该使用默认配置。但显然事实并非如此,任何人都可以帮助指出原因吗?

非常感谢你。

当我使用spark-shell时,我会看到以下行:

INFO Datastore: The class org.apache.hadoop.hive.metastore.model.MFieldSchema" is tagged as "embedded-only" so does not have its own datastore table.

这会导致两个(spark-shellthrift-server)看到不同的 hive Metastore 吗?

我在spark-shell上尝试的代码:

val hc = new org.apache.spark.sql.hive.HiveContext(sc)
val df = hc.sql("show tables")
df.collect()

我在 beeline ;

上尝试了“show tables

1 个答案:

答案 0 :(得分:2)

原来这是因为我对蜂巢知之甚少。

每次运行 HiveQL 时(例如" SHOW TABLES"),如果当前文件夹中没有metastore_db,则会创建一个给我。 metastore_db存储所有表架构,以便可以查询它们。

所以解决方法是,在同一个文件夹中运行所有与hive相关的程序。对于我的情况,我应该在同一个文件夹中运行start-thriftserver.shspark-shell。现在他们都可以共享相同的表。

此外,如果我编辑hive-site.xml以指定 Metastore位置,则Metastore可能始终位于固定位置,我将详细探讨。