大数据学习系列之九---- Hive整合Spark和HBase以及相关测试
前言
在之前的大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 中介绍了集群的环境搭建,但是在使用hive进行数据查询的时候会非常的慢,因为hive默认使用的引擎是MapReduce。因此就将spark作为hive的引擎来对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 On Spark 配置 -->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
<property>
<name>spark.master</name>
<value>spark://master:7077</value>
</property>
<property>
<name>spark.home</name>
<value>/opt/spark/spark1.6-hadoop2.4-hive</value>
</property>
<property>
<name>spark.submit.deployMode</name>
<value>client</value>
</property>
<property>
<name>spark.serializer</name>
<value>org.apache.spark.serializer.KryoSerializer</value>
</property>
<property>
<name>spark.eventLog.enabled</name>
<value>true</value>
</property>
<property>
<name>spark.eventLog.dir</name>
<value>hdfs://master:9000/directory</value>
</property>
<property>
<name>spark.executor.memory</name>
<value>10G</value>
</property>
<property>
<name>spark.driver.memory</name>
<value>10G</value>
</property>
成功配置这些之后,进入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进行查询。
后记
其实集群的环境搭建以及整合在我写第一篇大数据学习系列博客的时候就已经搭建好了。至于博客为什么写得这么迟,第一点是当初搭建环境的时候,并没有真正的理解那些配置的作用;第二点是环境搭建有些莫名其妙,经常出现问题,不过大部分问题和解决反感我都记录并写成博客了,所以慢慢写博客其实也是个人知识的重新整理;第三是个人的精力有限,无法一口气将这些都写成博客,毕竟写博客也需要一定时间和精力的。
完成本篇博文之后,暂时先不写大数据这方面的博客了。感觉目前的自己能力还不够,如果就这样勉强的去自学,估计也很难学到知识点,更何况将其写成博客来讲解了。所以目前就先放放,有能力之后再来续写!
大数据学习系列的文章:http://blog.csdn.net/column/details/18120.html
大数据学习系列之九---- Hive整合Spark和HBase以及相关测试的更多相关文章
- 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)
引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...
- 大数据学习系列之五 ----- Hive整合HBase图文详解
引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- 大数据学习系列之六 ----- Hadoop+Spark环境搭建
引言 在上一篇中 大数据学习系列之五 ----- Hive整合HBase图文详解 : http://www.panchengming.com/2017/12/18/pancm62/ 中使用Hive整合 ...
- 大数据学习系列之三 ----- HBase Java Api 图文详解
版权声明: 作者:虚无境 博客园出处:http://www.cnblogs.com/xuwujing CSDN出处:http://blog.csdn.net/qazwsxpcm 个人博客出处:http ...
- 大数据学习系列之—HBASE
hadoop生态系统 zookeeper负责协调 hbase必须依赖zookeeper flume 日志工具 sqoop 负责 hdfs dbms 数据转换 数据到关系型数据库转换 大数据学习群119 ...
- 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法
前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...
- 大数据学习(10)—— Hive进阶
前面提到了Hive的知识点非常零散,我不知道该怎么把这些知识点分类,跟SQL关系没那么大的就放在这一篇吧. Hive Serde 参考Hive Serde Serde是啥 Serde是序列化和反序列化 ...
- 大数据学习系列之Hadoop、Spark学习线路(想入门大数据的童鞋,强烈推荐!)
申明:本文出自:http://www.cnblogs.com/zlslch/p/5448857.html(该博客干货较多) 1 Java基础: 视频方面: 推荐<毕向东JAVA ...
随机推荐
- Eclipse Maven构建WebApp项目资源目录显示不全的原因与解决方式
一.问题展示 1.Eclipse在使用Maven构建WebApp项目的时候,首先Maven的安装和配置都没有问题的,但是构建项目之后,Maven项目要求的几个必须要有的资源目录显示不了: 问题如下图: ...
- ATL环境:设置父窗口激活属性
设置窗口激活属性:窗口A->B->C,这里设置在C对话框显示时A和B都不能操作 LRESULT sindykTools::AttrPOIDlg::OnBatchCreateSubPoint ...
- idea和Webstorm上使用git和github,码云
由于之前一直使用svn,现在项目使用git,顾根据网上找的学习资料,自己梳理了下,收获蛮多,这里做个记录,如果能帮助到您那是最好不过的. 1.大致步骤 使用工具:idea,github,码云 webs ...
- Vue购物车实例
<div class="buyCarBox" id="buyCarBox" v-cloak> <div class="haveClo ...
- 【Zookeeper】源码分析目录
Zookeeper源码分析目录如下 1. [Zookeeper]源码分析之序列化 2. [Zookeeper]源码分析之持久化(一)之FileTxnLog 3. [Zookeeper]源码分析之持久化 ...
- iOS通用链接(Universal Links)突然点击无效的解决方案
接上文<微信中通过页面(H5)直接打开本地app的解决方案>已经把iOS搞定并且已经正常能跑了,突然就再也用不了了... 问题描述 测试告诉我,如果从微信打开App之后,点击App右上角的 ...
- 第四节 mount /who / mkdir /rmdir /rm /cp /mv /touch /cat /tac/head /tail /more /less / chmod /chown /umask /chattr /lsattr /history /echo
***Linux下的文件类型如下: 9 8 7 6 5 4 3 2 1 0- r w x r - x r - x 第9位表示文件类型,可以为p.d.l.s.c.b和-:p表示命名管道文件 -pipe ...
- jamup与gb2i组合
软件一定要开嗓单效果器,最好不要关闭中断软件/声音,每次有重新检测电流必须会有嗓音,最好用ipad ,不然会烦死人.默认delay太长,在DLY面板修改 gb2i 效果还行,他的价值重在使用,让新人使 ...
- 房上的猫:了解java与学习java前的准备
一.java 概述: 1.通常指完成某些事情的一种既定方式和过程 2.程序可以看做对一系列动作执行过程的描述 3.计算机按照某种顺序完成一系列指令的集合称为程序 4.计算机仅识别二进制低级语言 ...
- XCopy命令实现增量备份
xcopy XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件:使用时源盘符.源目标路径名.源文件名至少指定一个:选用/S时对源目录下及其子目录下的所有文件进行C ...