7

谁能解释一下,HCatalog 和 HBase 之间的关联是什么?

我找到了这些定义:

Apache HCatalog HCatalog 是一个元数据抽象层,用于在不使用底层文件名或格式的情况下引用数据。它将用户和脚本与数据的物理存储方式和位置隔离开来。

Apache HBase HBase(Hadoop 数据库)是一个分布式的、面向列的数据库。HBase 使用 HDFS 作为底层存储。它支持使用 MapReduce 的批处理式计算和点查询(随机读取)。

当我们在 Hive 中使用 CREATE TABLE 时,它会在 HCatalog 中创建表。我只是不明白。为什么不在 HBase 的真实 DATABASE 中?

HCatalog 似乎是所有数据存储的某种元数据存储库。这是否意味着它还在 HBase 中保留有关数据库和表的信息?

我会很感激解释

问候帕维尔

4

2 回答 2

8

当您在 HIVE 中创建 TABLE 时,它会在 HCatalog 中注册它。Hive 中的表可能是 HBase 表,但它也可以是 HDFS 文件和目录之上的抽象

你可以在 HortonWorks 的网站上找到一个很好的 HCatalog解释

于 2013-11-16T19:30:37.847 回答
1

因为我注意到这个问题很受欢迎,所以我决定回答它,因为自从我提出这个问题以来,我已经很好地解决了这个问题。首先,因为 Hadoop 2.0 HCatalog 和 Hive 被视为一个产品。Hive 默认在 HCatalog 中创建表。这意味着 HCatalog 的自然接口是 Hive。因此,您可以使用所有 SQL-92 DML ( https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML ) 和 DDL ( https://cwiki.apache.org/confluence/display/Hive/LanguageManual +DDL ),从 开始create/alter/drop database,到create/alter/drop table以等结尾select, insert into... 唯一的例外是 insert 仅作为 insert into ... 作为 select from 起作用。对于典型的插入,我们必须使用:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

表可以有分区、索引(但根据我的经验,它不能很好地工作),但你它不是一个关系数据库,所以你不能使用外键。

与 HBase 完全不同。这是 noSQL 数据库之一(但正如在 一篇文章中回答的那样,Hive 可以是 SQL 查询的 HBase 接口)它具有键-> 值组织表。让我们比较一些命令(创建表、插入表、从表中选择、删除表

蜂巢:

create table table_name (
  id                int,
  value1       string,
  value2             string
)
partitioned by (date string)

LOAD DATA INPATH 'filepath' ] INTO TABLE table_name [PARTITION (partcol1=val1, partcol2=val2 ...)]

INSERT INTO table_name as select * from othertable

SELECT * FROM table_name

DROP TABLE table_name

HBase:

hbase> create 'test', 'cf' 

hbase> put 'test', 'row1', 'cf:a', 'value1'

hbase> get 'test', 'row1'

hbase> disable 'test'
hbase> drop 'test'

如您所见,语法完全不同。对于 SQL 用户来说,使用 HCatalog 是很自然的,使用 noSQL 数据库的用户会觉得 HBase 很舒服。

于 2014-08-22T08:19:30.183 回答