能否解释一下,HCatalog和HBase之间的关系是什么?
我发现了这些定义:
Apache HCatalog HCatalog是一个元数据抽象层,用于在不使用底层文件名或格式的情况下引用数据。它将用户和脚本与数据的物理存储方式和位置隔离开来。
Apache HBase HBase(Hadoop DataBase)是一个分布式,面向列的数据库。 HBase将HDFS用于底层存储。它支持使用MapReduce和点查询(随机读取)的批处理样式计算。
我们在Hive中使用CREATE TABLE,它在HCatalog中创建表。我只是不明白。为什么不在真正的DATABASE中使用HBase?
HCatalog似乎是所有数据存储的某种metedata存储库。这是否意味着它还在HBase中保存有关数据库和表的信息?
我将很感激解释
此致 的Pawel
答案 0 :(得分:8)
当您在HIVE中创建表时,它会在HCatalog中注册它。 Hive中的表可以是HBase表,但它也可以是HDFS文件和目录之上的抽象
的精彩解释答案 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很舒服。