Hbase学习笔记(七) Hbase与Hive的整合

2020-08-12  本文已影响0人  做个合格的大厂程序员

Hive和Hbase的区别

Hive:

1. 数据仓库

​ Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询

2.用于数据分析、清洗

​ Hive适用于离线的数据分析和清洗,延迟较高

3. 基于HDFS,MapReduce

​ Hive存储的数据依旧在DataNode上,编写的HQL语句终将是转换为MapReduce代码执行。(不要钻不需要执行MapReduce代码的情况的牛角尖)

Hbase:

1. 数据库

​ 是一种面向列存储的非关系型数据库。

2.用于存储结构化和非结构化数据

​ 适用于单表非关系型数据的存储,不适合做关联查询,类似JOIN等操作。

3. 基于HDFS

​ 数据持久化存储的体现形式是Hfile,存放于DataNode中,被ResionServer以region的形式进行管理。

4.延迟较低,接入在线业务使用

​ 面对大量的企业数据,HBase可以直线单表大量数据的存储,同时提供了高效的数据访问速度。

总结:

​ Hive和Hbase是两种基于Hadoop的不同技术,Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到HBase,或者从HBase写回Hive。

整合:

需求一:将hive分析结果的数据,保存到HBase当中去

​ HBase的五个jar包拷贝到hive的lib目录下:

​ hbase-client-1.2.0-cdh5.14.0.jar

​ hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar

​ hbase-hadoop-compat-1.2.0-cdh5.14.0.jar

​ hbase-it-1.2.0-cdh5.14.0.jar

​ hbase-server-1.2.0-cdh5.14.0.jar

可以使用软连接

ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar              /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar             
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar      /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar             
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar       /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar            
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar     /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar               
ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar          /export/servers/hive-1.1.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar  

修改hive的配置文件

cd /export/servers/hive-1.1.0-cdh5.14.0/conf
vim hive-site.xml
        <property>
                <name>hive.zookeeper.quorum</name>
                <value>hadoop01,hadoop02,hadoop03</value>
        </property>

         <property>
                <name>hbase.zookeeper.quorum</name>
                <value>hadoop01,hadoop02,hadoop03</value>
        </property>

修改hive-env.sh下的配置

export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
export HBASE_HOME=/export/servers/hbase-1.2.0-cdh5.14.0
export HIVE_CONF_DIR=/export/servers/hive-1.1.0-cdh5.14.0/conf

在hive中建表加载数据

create database course;
use course;
create external table if not exists course.score(id int,cname string,score int) row format delimited fields terminated by '\t' stored as textfile ;

准备数据

1       zhangsan        80
2       lisi    60
3       wangwu  30
4       zhaoliu 70

进行加载

hive (course)> load data local inpath '/export/hive-hbase.txt' into table score;
hive (course)> select * from score;

创建一个hive管理表与Hbase进行映射

create table course.hbase_score(id int,cname string,score int)  
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
with serdeproperties("hbase.columns.mapping" = "cf:name,cf:score") 
tblproperties("hbase.table.name" = "hbase_score");

通过insert overwrite select 进行插入

insert overwrite table course.hbase_score select id,cname,score from course.score;

在hbase中查看表

hbase(main):024:0> scan 'hbase_score'

需求二:创建hive外部表,映射Hbase当中已有的表模型,直接通过

进入Hbase中创建表并手动加载一些数据

进入Hbase客户端,手动创建一张表,并插入数据

create 'hbase_hive_score',{ NAME =>'cf'}

put 'hbase_hive_score','1','cf:name','zhangsan'
put 'hbase_hive_score','1','cf:score', '95'

put 'hbase_hive_score','2','cf:name','lisi'
put 'hbase_hive_score','2','cf:score', '96'

put 'hbase_hive_score','3','cf:name','wangwu'
put 'hbase_hive_score','3','cf:score', '97'

建立hive外部表,映射Hbase当中的字段

CREATE external TABLE course.hbase2hive(id int, name string, score int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:name,cf:score") TBLPROPERTIES("hbase.table.name" ="hbase_hive_score");
上一篇下一篇

猜你喜欢

热点阅读