Hive与HBase的对比
Hive的特点
- Hive是数据仓库,数据存储在HDFS上,方便使用HQL去管理。
- Hive适用于离线的数据分析和清洗工作,延迟比较高。
- Hive的语句最后还是转化为MR语句运行。
HBase的特点
- HBase是列式存储非关系型数据库,用于存储结构化和非结构化数据。
- 适用于单表的非关系型数据的存储,不适合做join等连接操作。
- 数据以HFile的方式持久化,存储在HDFS上。以Region的形式被Region Server管理。
- 延迟低,访问速度快,适用于在线业务。
案例1:HBase中无表
目标:
建立Hive表,关联HBase表,插入数据到Hive表的同时能够影响HBase表。
在Hive中创建表,关联HBase
CREATE TABLE hive_hbase_emp_table(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")
TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table");
完成之后,可以分别进入Hive和HBase查看,都生成了对应的表。
注意:Hive和HBase关联的表不能直接load导入数据,要用insert into table … select 这种形式导入数据。
导入数据
-- 导入数据
insert into table hive_hbase_emp_table select * from emp;
案例2:HBase中已有表
目标:
在HBase中已经存储了某一张表hbase_emp_table,然后在Hive中创建一个外部表来关联HBase中的hbase_emp_table这张表,使之可以借助Hive来分析HBase这张表中的数据。
创建外部表
CREATE EXTERNAL TABLE relevance_hbase_emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" =
":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")
TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table");
关联完毕后,就可以使用Hive的函数来操作分析数据。