使用spark-shell
和HiveContext
,我尝试显示所有配置单元表。但是,当我启动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-shell
和thrift-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
”
答案 0 :(得分:2)
原来这是因为我对蜂巢知之甚少。
每次运行 HiveQL 时(例如" SHOW TABLES
"),如果当前文件夹中没有metastore_db
,则会创建一个给我。 metastore_db
存储所有表架构,以便可以查询它们。
所以解决方法是,在同一个文件夹中运行所有与hive相关的程序。对于我的情况,我应该在同一个文件夹中运行start-thriftserver.sh
和spark-shell
。现在他们都可以共享相同的表。
此外,如果我编辑hive-site.xml
以指定 Metastore位置,则Metastore可能始终位于固定位置,我将详细探讨。