2015-06-21 39 views
4

我在python中使用SparkSQL。我创建了一个分区表(〜数百个分区),使用hiveContext将其存储到Hive内部表中。蜂房仓库位于S3。Spark中的metastore是什么?

当我简单地做“df = hiveContext.table(”mytable“)。第一次遍历所有的分区需要一分钟的时间,我以为metastore存储了所有的元数据。通过每个分区?是否有可能避免这一步,所以我的启动可以更快?

+0

那么,如果你在远程机器上有你的数据存储,并且你试图远程访问你的数据到你的群集。它需要时间在您的群集上复制,以便您可以使用它! – eliasah

+0

但我的意思只是行: df = hiveContext.table(“mytable”) 这还没有收藏任何数据。这只是给出一个带有模式信息的数据框。架构信息应该已经存储在Metastore中。 – ChromeHearts

+0

和?你为什么给出这个评论? – eliasah

回答

1

这里的关键是,只需要第一次查询加载文件元数据需要这么长的时间,原因是SparkSQL doesn不会将分区元数据存储在Hive Metastore中,对于Hive分区表,分区信息需要存储在Metastore中,具体取决于表的创建方式将决定其表现如何。一个SparkSQL表。

SparkSQL存储表架构(包括分区信息)和表的根目录,但仍然在运行查询时动态地发现S3上的每个分区目录。我的理解是这是一个折衷,所以无论何时更新表时都不需要手动添加新分区。

相关问题