13

In a cluster having Hive installed, What does the metastore and namenode have? i understand that the Metastore has all the table schema and partition details and metadata. Now what is this metadata? then what does the namenode have? and where is this metastore present in a cluster?

4

4 回答 4

25

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

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

数据库ID

表的 ID

索引的 ID

索引创建时间

表的创建时间

分配给特定用户的角色 ID

用于表格的 InputFormat

用于表格等的输出格式等。

这是你想知道的吗?

并且在集群本身中拥有 Metastore 不是强制性的。任何具有 JDBC 兼容数据库的机器(集群内部或外部)都可以用于元存储。

高温高压

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

于 2013-06-12T13:52:57.303 回答
14

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

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

以下是 Hive 元存储中的表:

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 中“CREATE TABLE xxx (...) PARTITIONED BY (...)”,Hive 分区数据将存储到元存储(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 DataNode 上的HDFS 中,NameNode 将跟踪哪些DataNode 拥有数据。

于 2013-06-12T13:13:18.430 回答
3

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

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

在此处输入图像描述

于 2017-02-16T13:05:04.150 回答
-1

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

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

  1. 在您的 hadoop 环境中没有必要/强制使用 metastore,因为仅当您在 HDFS 集群上使用 HIVE 时才需要它。

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

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

关于Namenode(hadoop -namenode):

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

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

于 2017-10-13T03:24:26.700 回答