【问题标题】:What is the metastore for in Spark?Spark 中的元存储有什么用?
【发布时间】:2016-10-10 22:28:18
【问题描述】:

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

当我简单地执行“df = hiveContext.table(“mytable”)。第一次遍历所有分区需要一分钟多的时间。我以为 Metastore 存储了所有元数据。为什么 spark 仍然需要遍历每个分区?是否可以避免这一步,以便我的启动更快?

【问题讨论】:

  • 如果您的数据存储在远程计算机上,并且您正尝试将数据远程访问到您的集群。需要时间将其复制到您的集群上,以便您可以使用它!
  • 但我的意思只是这一行: df = hiveContext.table("mytable") 这还没有收集任何数据。这只是给出了一个带有模式信息的数据框。架构信息应该已经存储在 Metastore 中。
  • 和?你为什么发表这样的评论?
  • 抱歉,不小心提交了评论。请刷新。
  • 如果数据没有加载到集群上,如何获取schema信息?

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多