在安装了Hive的群集中,Metastore和namenode有什么作用?据我所知,Metastore具有所有表模式和分区详细信息以及元数据。现在这个元数据是什么?那么namenode有什么?这个Metastore在集群中的位置在哪里?
答案 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。
答案 3 :(得分:0)
上图非常适合理解Hive和hadoop通信。
关于Hive-Metastore(不是hadoop - Metastore):
在您的hadoop环境中没有必要/必须拥有Metastore,因为只有在HDFS群集上使用HIVE时才需要它。
Metastore仅用于HIVE的元数据存储库,并且仅由HIVE用于存储创建的数据库对象的元信息(不是实际数据,因为HIVE不存储数据,因此已经存在于HDFS中.Hive使用已存储的数据文件系统)
Hive实现需要使用任何RDBMS的Metastore服务。
关于Namenode(hadoop -namenode):
Hadoop的核心部分,其行为类似于群集的Metastore。
不是RDBMS。仅在文件系统中存储文件系统元信息。