大数据技术教程(9)Hive整合Spark和HBase以及相关测试
沉沙 2018-10-10 来源 : 阅读 1242 评论 0

摘要:本篇教程探讨了大数据技术教程(9)Hive整合Spark和HBase以及相关测试,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

本篇教程探讨了大数据技术教程(9)Hive整合Spark和HBase以及相关测试,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

<

事前准备

在进行整合之前,首先确保Hive、HBase、Spark的环境已经搭建成功!如果没有成功搭建,具体可以看我之前写的大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 这篇文章。
那么开始将hive、hbase、spark整合吧。
目前集群的配置如下:
这里写图片描述
Hive整合HBase

因为Hive与HBase整合的实现是利用两者本身对外的API接口互相通信来完成的,其具体工作交由Hive的lib目录中的hive-hbase-handler-*.jar工具类来实现。所以只需要将hive的 hive-hbase-handler-*.jar 复制到hbase/lib中就可以了。
切换到hive/lib目录下
输入:

cp hive-hbase-handler-*.jar /opt/hbase/hbase1.2/lib

注: 如果在hive整合hbase中,出现版本之类的问题,那么以hbase的版本为主,将hbase中的jar包覆盖hive的jar包。

至于Hive和HBase之间的相关测试可以查看我之前的大数据学习系列之五 ----- Hive整合HBase图文详解 这篇文章,本篇就不再过多描述了。
Hive整合Spark

其实Hive整合Spark其实就是Hive使用Spark成功编译好的架包,但是Hive整合Spark比较坑的是版本不能随意,必须使用指定的进行编译。当初因为这个问题困扰了很久,最后查阅资料找到了已经编译好的spark和hive的版本,我们只需要将编译好的jar拿过来进行使用就行了。具体使用如下。
hive的配置更改

切换到hive/conf 目录下
编辑 hive-env.sh 文件
添加spark的环境:

export  SPARK_HOME=/opt/spark/spark1.6-hadoop2.4-hive

然后编辑 hive-site.xml 文件
在hive-site.xml 添加 这些配置
这些配置的说明:

hive.execution.engine: 表示 hive 执行的默认引擎是,这里我们填的是spark。如果不想 加这个配置,希望手动使用spark,那么进入hive shell之后,输入:
set hive.execution.engine=spark;

spark.master: spark的主机地址,这里我们填spark的默认地址。
spark.home: spark 的安装路径,写spark的安装路径。
spark.submit.deployMode:spark的提交方式,默认就写client。
spark.serializer: spark 的序列化方式。
spark.eventLog.enabled:是否使用spark的日志,默认true。
spark.eventLog.dir : spark的日志存放路径,注意这个路径要用hadoop创建!
spark.executor.memory:分配给spark的执行内存,根据个人机器来配置。
spark.driver.memory: spark总内存,根据个人机器来配置。

完整配置:


  
    
       hive.execution.engine
        spark
    


     
           spark.master
           spark://master:7077
    


        
        spark.home
        /opt/spark/spark1.6-hadoop2.4-hive
        


        
        spark.submit.deployMode
        client
        


        
           spark.serializer
           org.apache.spark.serializer.KryoSerializer
        


    
       spark.eventLog.enabled
       true
    


    
       spark.eventLog.dir
       hdfs://master:9000/directory
    


   
       spark.executor.memory
       10G
    


   
       spark.driver.memory
       10G
    


成功配置这些之后,进入hive shell中。
简单进行两个表的关联查询
这里写图片描述
可以看到hive已经成功使用spark作为引擎了。
Hive on HBase 使用spark引擎测试

在成功整合环境之后,并且建立了两张hive 外联hbase的表之后。进行数据查询测试。
两张表的创建脚本:

create table t_student(id int,name string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,st1:name") tblproperties("hbase.table.name"="t_student","hbase.mapred.output.outputtable" = "t_student");

create table t_student_info(id int,age int,sex string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,st1:age,st1:sex") tblproperties("hbase.table.name"="t_student_info","hbase.mapred.output.outputtable" = "t_student_info");

然后在两张表中个插入插入100万数据测试
注:我这里是在HBase中直接插入100w数据的,使用HBase的Api完成的,具体可以大数据学习系列之三 ----- HBase Java Api 图文详解这篇博文。

这里写图片描述

成功插入之后,我们在hive shell中来测试查询速度。

条数测试:
这里写图片描述

主键管理查询测试:
这里写图片描述

非主键查询测试:
这里写图片描述

注:其实也是可以使用hive的Api ,就是普通的JDBC连接,只不过连接驱动要换成

Class.forName("org.apache.hive.jdbc.HiveDriver");

具体实现可以看我的github中的代码:https://github.com/xuwujing/pancm_project/blob/master/src/main/java/com/pancm/test/hiveTest/hiveUtil.java

结论: 使用 hive on spark 查询可以看出,如果查询条件是主键,也就是hbase中的rowkey的话,查询100w数据可以在2.3s左右就查出来了(个人感觉打开spark估计就要用2s左右,如果量大的话,速度估计也不会很慢), 但是如果使用非主键的条件去查询,就可以看到速度明显变慢了。
所以在使用 hive on hbase 的时候,尽量使用rowkey进行查询。    

本文由职坐标整理发布,学习更多的大数据技术相关知识,请关注职坐标大技术云计算大技术技术频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程