Hive 中 MetaStore 的主要用途?

Main purpose of the MetaStore in Hive?

我对 MetaStore 的用途有点困惑。在配置单元中创建 table 时:

CREATE TABLE <table_name> (column1 data_type, column2 data_type);
LOAD DATA INPATH <HDFS_file_location> INTO table managed_table;

所以我知道这个命令获取HDFS中文件的内容并创建它的MetaData形式并将其存储在MetaStore中(包括列类型,列名,它在HDFS中的位置等) HDFS 文件中的每一行)。它实际上并没有将数据从 HDFS 移动到 Hive。

但是存储这个元数据的目的是什么?

例如,当我使用 Spark SQL 连接到 Hive 时,MetaStore 不包含 HDFS 中的实际信息,而只包含 MetaData。那么,Hive 只是使用 MetaStore 来对 HiveQL 查询执行解析和编译步骤并创建 MapReduce 作业吗?

Metastore 用于存储架构(table 定义,包括 HDFS 中的位置、serde、列、注释、类型、分区定义、视图、访问权限等)和统计信息。没有将数据从 HDFS 移动到 Hive 这样的操作,因为 Hive tables 数据存储在 HDFS(或其他兼容的文件系统,如 S3)中。您可以在 HDFS 中的某个位置之上定义新的 table 甚至几个 table 并将文件放入其中。您可以更改现有 table 位置或分区位置,所有这些信息都存储在 Metastore 中,因此 Hive 知道如何访问数据。 Table 是在 Metastore 中定义的逻辑对象,数据本身只是 HDFS 中某个位置的文件。

另请参阅有关 Hive 查询执行流程(高级)的回答:

Hive 执行读取模式操作,这意味着对于以某种结构化方式处理的数据(即 table 类对象),需要将所述数据的布局总结为关系结构

takes the contents of the file in HDFS and creates a MetaData form of it

据我所知,创建 table 时实际上没有读取任何文件。

SparkSQL 直接连接到 Metastore。 Spark 和 HiveServer 都有自己的查询解析器。它不是元存储的一部分。 MapReduce/Tez/Spark 作业也不由 Metastore 处理。它只是一个关系数据库。如果它是 Mysql、Postgres 或 Oracle,您可以轻松地连接到它并检查内容。默认情况下,Hive 和 Spark 都使用嵌入式 Derby 数据库