hadoop - Hive 中 MetaStore 的主要用途?

标签 hadoop hive hive-metastore

我对 MetaStore 的用途有点困惑。当您在 hive 中创建表时:

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 中的实际信息,而仅包含元数据。那么 Hive 是否只是使用 MetaStore 对 HiveQL 查询进行解析和编译步骤并创建 MapReduce 作业?

最佳答案

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

另请参阅有关 Hive 查询执行流程(高级)的答案:https://stackoverflow.com/a/45587873/2700344

关于hadoop - Hive 中 MetaStore 的主要用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48532787/

相关文章:

hadoop - hive的基于存储的授权和基于标准的授权

hive - 如何使用 Hive HQL 创建分区表 'like' 和未分区表?

python - token 异常配置单元查询不匹配

azure - 获取 Databricks Hive 元存储连接用户名和密码

sql - 在不同组中的数据类型之间进行比较时,如何处理潜在的数据丢失

apache-spark - 如何在Spark中获取hive表的分区信息

java - 为什么我们需要在 MapReduce 作业中显式设置 OutputKey/InputKey 类?

sql - 如何合并配置单元中现有分区中的小文件?

python - 有什么方法可以从 hadoop 流中的 python 脚本中获取信息性错误?

mysql - 如何漂亮地打印 Hive 输出