Hive与HBase的集成
一、Hive与HBase对比
1. Hive
(1)数据仓库
Hive 的本质其实就相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射关系,以方便使用 HQL 去管理查询。
(2)用于数据分析、清洗
Hive 适用于离线的数据分析和清洗,延迟较高。
(3)基于 HDFS、 MapReduce
Hive 存储的数据依旧在 DataNode 上,编写的 HQL 语句终将是转换为MapReduce 代码执行。
2. HBase
(1)数据库
是一种面向列存储的非关系型数据库。
(2)用于存储结构化和非结构化的数据
适用于单表非关系型数据的存储,不适合做关联查询,类似 JOIN 等操作。
(3)基于 HDFS
数据持久化存储的体现形式是 HFile,存放于 DataNode 中,被 ResionServer以 Region 的形式进行管理。
(4)延迟较低,接入在线业务使用
面对大量的企业数据, HBase 可以直线单表大量数据的存储,同时提供了高效的数据访问速度。
二、Hive与HBase集成使用场景
1.1 将HBase作为Hive数据源
让HBase支持类SQL操作
1.2 将Hive ETL数据存入HBase
便于快速查询
1.3 构建低延时的数据仓库
1) 利用HBase快速读写能力
2) 实现数据实时查询
三、 HBase 与 Hive 集成使用
3.1 Hive 中创建表同时关联 HBase
ps:由Hive的lib目录中hive-hbase-handler-*.jar工具类实现,所有需要将这个jar包导入到HBase中,不拷贝的话有些版本的hive和HBase就不能进行映射
3.1.1 HBase中还没建表
create table emp( ---不能建成外部表
id string,
name string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with
serdeproperties
(
"hbase.columns.mapping"=":key,base:name"
)
tblproperties("hbase.table.name"="emp");
3.1.2 Hbase中有对应的表
create external table customer(
name string,
order_numb string,
order_date string,
addr_city string,
addr_state string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with
serdeproperties
(
"hbase.columns.mapping"=":key,order:numb,order:date,addr:city,addr:state"
--- 映射关系,与上面字段要一一对应
)
tblproperties("hbase.table.name"="customer");
3.2 查看数据
这样就表示成功了~