hive Metastore和name node在集群中做了什么?

时间:2013-06-12 12:35:53

标签: hive

在安装了Hive的群集中,Metastore和namenode有什么作用?据我所知,Metastore具有所有表模式和分区详细信息以及元数据。现在这个元数据是什么?那么namenode有什么?这个Metastore在集群中的位置在哪里?

4 个答案:

答案 0 :(得分:26)

NameNode保留文件系统中所有文件的目录树,并跟踪整个群集中文件数据的保存位置。它还通过心跳机制跟踪所有DataNode(Dead + Live)。它还通过接收请求并将它们重定向到适当的DataNode来帮助客户端进行读/写操作。

Metastore存储的元数据包含以下内容:

数据库ID

表的ID

索引ID

创建索引的时间

创建表的时间

分配给特定用户的角色ID

用于表的输入格式

用于表等的OutputFormat等。

这是你想知道的吗?

并非强制要求群集本身具有Metastore。具有符合JDBC的数据库的任何计算机(集群内部或外部)都可用于Metastore。

HTH

P.S:您可能会发现Metastore E/R diagram有用。

答案 1 :(得分:14)

Hive数据(非元数据)分布在Hadoop HDFS DataNode服务器上。通常,每个数据块存储在3个不同的DataNode上。 NameNode跟踪哪些DataNode具有哪些实际数据块。

对于Hive生产环境,Metastore服务应在隔离的JVM中运行。 Hive进程可以使用Thrift与Metastore服务进行通信。 Hive Metastore数据保存在ACID数据库(如Oracle DB或MySQL)中。您可以使用SQL查找Hive Metastore中的内容:

以下是Hive Metastore中的表格:

SQL> select table_name from user_tables;

DBS
DATABASE_PARAMS
SEQUENCE_TABLE
SERDES
TBLS
SDS
CDS
BUCKETING_COLS
TABLE_PARAMS
PARTITION_KEYS
SORT_COLS
SD_PARAMS
COLUMNS_V2
SERDE_PARAMS

您可以描述每个表的结构:

SQL> describe partition_keys;

TBL_ID                       NUMBER
PKEY_COMMENT                 VARCHAR2(4000)
PKEY_NAME                    VARCHAR2(128)
PKEY_TYPE                    VARCHAR2(767)
INTEGER_IDX                  NUMBER(10)

找到每个表的内容:

SQL> select * from partition_keys;

因此,如果在Hive中你“创建表xxx(...)PARTITIONED BY(...)”,则将Hive分区数据存储到Metastore(Oracle,MySQL ...)数据库中。

例如,在Hive中,如果您创建一个这样的表:

hive> create table employee_table (id bigint, name string) partitioned by (region string);

你会在Metastore中找到它:

SQL> select tbl_id,pkey_name from partition_keys;

TBL_ID PKEY_NAME
------ ---------
     8    region

SQL> select tbl_name from tbls where tbl_id=8;

TBL_NAME
--------
employee_table

当您将数据插入employee_table时,数据将存储在Hadoop DataNodes上的HDFS中,NameNode将跟踪哪些DataNode拥有数据。

答案 2 :(得分:3)

Metastore - 它是一个存储元数据的数据库a.k.a有关您在HIVE中创建的表的所有详细信息。默认情况下,HIVE附带并使用Derby数据库。但您可以使用任何其他数据库,如MySQL或Oracle。

使用Metastore :每当您从Hive CLI触发查询时,执行引擎都会收集有关该表的所有详细信息并创建执行计划(作业)。这些细节来自Metastore。最后,执行引擎将作业发送到Hadoop。从这里开始执行常见的Hadoop Map Reduce Job,并将结果发送回Hive。 Name节点与Execution引擎通信以成功执行MR Job。

enter image description here

答案 3 :(得分:0)

上图非常适合理解Hive和hadoop通信。

关于Hive-Metastore(不是hadoop - Metastore):

  1. 在您的hadoop环境中没有必要/必须拥有Metastore,因为只有在HDFS群集上使用HIVE时才需要它。

  2. Metastore仅用于HIVE的元数据存储库,并且仅由HIVE用于存储创建的数据库对象的元信息(不是实际数据,因为HIVE不存储数据,因此已经存在于HDFS中.Hive使用已存储的数据文件系统)

  3. Hive实现需要使用任何RDBMS的Metastore服务。

  4. 关于Namenode(hadoop -namenode):

    1. Hadoop的核心部分,其行为类似于群集的Metastore。

    2. 不是RDBMS。仅在文件系统中存储文件系统元信息。