在安装了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图很有用.
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具有数据.
| 归档时间: |
|
| 查看次数: |
24900 次 |
| 最近记录: |