Hive中MetaStore的主要用途是什么?

时间:2018-01-31 00:46:49

标签: hadoop hive

我对MetaStore的目的有点困惑。在配置单元中创建表时:

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中。

但是存储这个MetaData的目的是什么?

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

  

在HDFS中获取文件的内容并创建它的元数据表单

据我所知,创建表时实际上没有文件被读取。

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