Hadoop大数据生态:hive与hbase整合

简介

  • hive和hbase都是基于hadoop大数据生态而衍生的不同的技术,hbase是一种nosql的key/value数据库,主要用于数据的实时查询,速度比较快,而hive主要使用HQL语言运行MapReduce任务,主要用于统计查询,但速度较慢;
  • 两者属于互补的关系,这两种工具可以同时进行使用,同时操作hadoop底层数据仓库;
  • 环境需求:服务器搭建好hadoop集群、hbase集群以及hive客户端

 

实践

  • 在上一篇博客讲述安装完hive客户端之后,我们还需要将hive和hbase两者整合起来,由于hbase和hadoop同属一个大数据的集群生态,所以,只需要修改hive的配置文件即可完成两者的互通;
  • 切换到hive的配置文件目录:/data/hadoop/hive/hive/conf
  • 主要修改hive-site.xml和hive-env.sh两个文件;
  • 修改hive-site.xml文件:vim hive-site.xml;
<property>
	<name>hive.zookeeper.quorum</name><!--设置zookeeper集群-->
	<value>hadoop-master,hadoop-slave</value>
</property>
<property>
	<name>hive.zookeeper.client.port</name><!--连接zookeeper的端口,默认2181-->
	<value>2181</value>
</property>  

 

  •  修改hive-env.sh文件:vim hive-env.sh
#设置hadoop环境变量根目录
HADOOP_HOME=/data/hadoop/hadoop/hadoop

#设置hbase环境变量根目录
HBASE_HOME=/data/hadoop/hbase/hbase

 

  • 配置完成之后,重启hive,如果没有报错,出现以下界面,则说明启动成功;

Hadoop大数据生态:hive与hbase整合

 

测试

  • 首先在hbase创建表以及插入表数据:
#进入命令行
$ hbase shell

#创建表以及列族
hbase>create 'sixmonth','user'

#插入两行数据以及指定列名
hbase>put 'sixmonth','0001', 'user:name','admin'
hbase>put 'sixmonth','0001', 'user:sex','woman'
hbase>put 'sixmonth','0002', 'user:name','test'
hbase>put 'sixmonth','0002', 'user:sex','man'

#扫描表
hbase>scan 'sixmonth'

Hadoop大数据生态:hive与hbase整合

 

  •  然后,在hive创建相同的表,同时和hbase映射起来;
hive>create external table sixmonth (
	>id string,
	>name string,
	>sex string
	>)
	>STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
	>WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,user:name,user:sex")
	>TBLPROPERTIES("hbase.table.name" = "sixmonth");

 

  • 查询创建表的数据信息,即可获取hbase插入的数据;
hive>select * from sixmonth;

Hadoop大数据生态:hive与hbase整合

 

 总结

  • hive和hbase的互补关系在应用开发的时候起到不可或缺的作用,一般在创建hadoop大数据生态的时候都会将hive和hbase整合起来,两个工具共同使用,用hive进行数据统计,用hbase进行实时查询;
  • 实践是检验认识真理性的唯一标准,自己动手,丰衣足食~~