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

Dre*_*ose 13 hive

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

Tar*_*riq 26

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

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

数据库的ID

表的ID

索引的ID

创建索引的时间

创建表的时间

分配给特定用户的角色的ID

用于表的InputFormat

用于表等的OutputFormat等.

这是你想知道的吗?

并且在集群本身中不必具有Metastore.具有符合JDBC的数据库的任何计算机(集群内部或外部)都可用于Metastore.

HTH

PS:您可能会发现Metast 的E/R图很有用.

  • 所以基本上...... Metastore不知道HDFS在哪里存在数据.它将使用表或索引的ID并在namenode中搜索,namenode将告诉哪个块具有数据.我对吗? (2认同)
  • 不,不是..对于downvoter ..我总是觉得很奇怪,当人们在没有说明原因的情况下投票问题/答案.无论如何,这无济于事.如果有人真的觉得某些事情不正确,他/她应该让用户知道,这样他们就可以纠正错误. (2认同)

Jef*_*lor 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
Run Code Online (Sandbox Code Playgroud)

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

SQL> describe partition_keys;

TBL_ID                       NUMBER
PKEY_COMMENT                 VARCHAR2(4000)
PKEY_NAME                    VARCHAR2(128)
PKEY_TYPE                    VARCHAR2(767)
INTEGER_IDX                  NUMBER(10)
Run Code Online (Sandbox Code Playgroud)

并找到每个表的内容:

SQL> select * from partition_keys;
Run Code Online (Sandbox Code Playgroud)

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

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

hive> create table employee_table (id bigint, name string) partitioned by (region string);
Run Code Online (Sandbox Code Playgroud)

你会在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
Run Code Online (Sandbox Code Playgroud)

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