Hadoop 3 中的 Spark 和 Hive:metastore.catalog.default 和 spark.sql.catalogImplementation 之间的区别

Spark and Hive in Hadoop 3: Difference between metastore.catalog.default and spark.sql.catalogImplementation

我正在使用 Hadoop 3 开发 Hadoop 集群 (HDP)。还安装了 Spark 和 Hive。

由于 Spark 和 Hive 目录是分开的,所以有时会有点困惑,不知道如何以及在何处保存 Spark 应用程序中的数据。

我知道,属性 spark.sql.catalogImplementation 可以设置为 in-memory(使用基于 Spark 会话的目录)或 hive(使用 Hive 目录)用于持久元数据存储 -> 但元数据仍与 Hive DB 和表分开)。

我想知道 属性 metastore.catalog.default 的作用。当我将其设置为 hive 时,我可以看到我的 Hive 表,但是由于这些表存储在 HDFS 的 /warehouse/tablespace/managed/hive 目录中,所以我的用户无权访问该目录(因为 hive 当然是所有者).

那么,如果我无法从 Spark 访问表,为什么还要设置 metastore.catalog.default = hive?跟Hortonwork的Hive Warehouse Connector有关系吗?

感谢您的帮助。

目录实施

有两个目录实现:

  • in-memory 在内存中创建 tables 仅在 Spark 会话中可用,
  • hive 使用外部 Hive Metastore 创建持久性 tables。

更多详情here

Metastore 目录

在同一个Hive Metastore 中可以同时存在多个目录。 例如,从 3.1.0 到 3.1.4 的 HDP 版本使用不同的目录来保存 Spark tables 和 Hive tables.
您可能希望使用 metastore.catalog.default=hive 使用 Spark API 读取 Hive 外部 tables。用户 运行 Spark 应用程序必须可以访问 HDFS 中的 table 位置。

HDP 3.1.4 文档

您可以在以下链接中根据 Hive table 类型、read/write 功能和安全要求获取有关访问模式的信息: