Spark 中的元存储有什么用



我在python中使用SparkSQL。 我创建了一个分区表(~几百个分区),使用 hiveContext 将其存储到 Hive 内部表中。 蜂巢仓库位于 S3 中。

当我简单地做"df = hiveContext.table("mytable")时。 第一次遍历所有分区需要一分钟多的时间。 我认为元存储存储了所有元数据。 为什么 Spark 仍然需要通过每个分区? 是否可以避免此步骤,以便我的启动速度更快?

这里的关键是仅在第一次查询时加载文件元数据需要这么长时间。原因是SparkSQL不会将分区元数据存储在Hive元存储中。对于 Hive 分区表,分区信息需要存储在元存储中。根据表的创建方式,将决定其行为方式。从提供的信息来看,听起来你创建了一个SparkSQL表。

SparkSQL 存储表架构(包括分区信息)和表的根目录,但在运行查询时仍会动态发现 S3 上的每个分区目录。我的理解是,这是一种权衡,因此您无需在更新表时手动添加新分区。

相关内容

  • 没有找到相关文章

最新更新