HBase和HCatalog之间的相关性是什么?

时间:2013-11-15 09:31:50

标签: hive hbase hcatalog

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

我发现了这些定义:

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

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

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

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

我将很感激解释

此致 的Pawel

2 个答案:

答案 0 :(得分:8)

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

您可以找到HCatalog on HortonWorks' site

的精彩解释

答案 1 :(得分: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插入...作为select。 对于典型的插入,我们必须使用:

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

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

与HBase完全不同。这是一个noSQL数据库(但在previous post中回答,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很舒服。