使用spark-shell
和HiveContext
,我试图显示所有的hive表。但是当我启动thirft server
,并使用beeline
检查所有表时,它在那里是空的。
在Spark SQL文档中,它说(1)如果我把hive-site.xml
到conf/
在spark中,DataFrame
的saveAsTable
方法将保存表到xml文件中指定的hive。(2)如果我把hive-site.xml
到conf/
在spark中,thriftServer
将连接到xml文件中指定的hive。
现在我在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()
我试着"show tables
"直线,
原来是因为我对hive了解不够。
每次运行HiveQL(例如"SHOW TABLES
")时,如果当前文件夹中没有metastore_db
,它会为我创建一个。metastore_db
存储所有表模式,以便可以查询它们。
所以解决方案是,在同一个文件夹中运行所有与蜂巢相关的程序。对于我的例子,我应该在同一个文件夹中运行start-thriftserver.sh
和spark-shell
。现在他们俩可以共用一张桌子了。
此外,如果我编辑hive-site.xml
指定亚转移位置,则有可能亚转移始终处于固定位置,这一点我将进一步探讨。