溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

大數(shù)據(jù)學(xué)習(xí)系列之九---- Hive整合Spark和HBase以及相關(guān)測(cè)試

發(fā)布時(shí)間:2020-04-14 05:47:56 來(lái)源:網(wǎng)絡(luò) 閱讀:846 作者:虛無(wú)境 欄目:大數(shù)據(jù)

前言

在之前的大數(shù)據(jù)學(xué)習(xí)系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 中介紹了集群的環(huán)境搭建,但是在使用hive進(jìn)行數(shù)據(jù)查詢的時(shí)候會(huì)非常的慢,因?yàn)閔ive默認(rèn)使用的引擎是MapReduce。因此就將spark作為hive的引擎來(lái)對(duì)hbase進(jìn)行查詢,在成功的整合之后,我將如何整合的過(guò)程寫(xiě)成本篇博文。具體如下!

事前準(zhǔn)備

在進(jìn)行整合之前,首先確保Hive、HBase、Spark的環(huán)境已經(jīng)搭建成功!如果沒(méi)有成功搭建,具體可以看我之前寫(xiě)的大數(shù)據(jù)學(xué)習(xí)系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 這篇文章。
那么開(kāi)始將hive、hbase、spark整合吧。
目前集群的配置如下:
大數(shù)據(jù)學(xué)習(xí)系列之九---- Hive整合Spark和HBase以及相關(guān)測(cè)試

Hive整合HBase

因?yàn)镠ive與HBase整合的實(shí)現(xiàn)是利用兩者本身對(duì)外的API接口互相通信來(lái)完成的,其具體工作交由Hive的lib目錄中的hive-hbase-handler-*.jar工具類來(lái)實(shí)現(xiàn)。所以只需要將hive的 hive-hbase-handler-*.jar 復(fù)制到hbase/lib中就可以了。
切換到hive/lib目錄下
輸入:

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

: 如果在hive整合hbase中,出現(xiàn)版本之類的問(wèn)題,那么以hbase的版本為主,將hbase中的jar包覆蓋hive的jar包。

至于Hive和HBase之間的相關(guān)測(cè)試可以查看我之前的大數(shù)據(jù)學(xué)習(xí)系列之五 ----- Hive整合HBase圖文詳解 這篇文章,本篇就不再過(guò)多描述了。

Hive整合Spark

其實(shí)Hive整合Spark其實(shí)就是Hive使用Spark成功編譯好的架包,但是Hive整合Spark比較坑的是版本不能隨意,必須使用指定的進(jìn)行編譯。當(dāng)初因?yàn)檫@個(gè)問(wèn)題困擾了很久,最后查閱資料找到了已經(jīng)編譯好的spark和hive的版本,我們只需要將編譯好的jar拿過(guò)來(lái)進(jìn)行使用就行了。具體使用如下。

hive的配置更改

切換到hive/conf 目錄下
編輯 hive-env.sh 文件
添加spark的環(huán)境:

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

然后編輯 hive-site.xml 文件
在hive-site.xml 添加 這些配置
這些配置的說(shuō)明:

hive.execution.engine: 表示 hive 執(zhí)行的默認(rèn)引擎是,這里我們填的是spark。如果不想 加這個(gè)配置,希望手動(dòng)使用spark,那么進(jìn)入hive shell之后,輸入:
set hive.execution.engine=spark;

spark.master: spark的主機(jī)地址,這里我們填spark的默認(rèn)地址。
spark.home: spark 的安裝路徑,寫(xiě)spark的安裝路徑。
spark.submit.deployMode:spark的提交方式,默認(rèn)就寫(xiě)client。
spark.serializer: spark 的序列化方式。
spark.eventLog.enabled:是否使用spark的日志,默認(rèn)true。
spark.eventLog.dir : spark的日志存放路徑,注意這個(gè)路徑要用hadoop創(chuàng)建!
spark.executor.memory:分配給spark的執(zhí)行內(nèi)存,根據(jù)個(gè)人機(jī)器來(lái)配置。
spark.driver.memory: spark總內(nèi)存,根據(jù)個(gè)人機(jī)器來(lái)配置。

完整配置:

<!--  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>

成功配置這些之后,進(jìn)入hive shell中。
簡(jiǎn)單進(jìn)行兩個(gè)表的關(guān)聯(lián)查詢
大數(shù)據(jù)學(xué)習(xí)系列之九---- Hive整合Spark和HBase以及相關(guān)測(cè)試
可以看到hive已經(jīng)成功使用spark作為引擎了。

Hive on HBase 使用spark引擎測(cè)試

在成功整合環(huán)境之后,并且建立了兩張hive 外聯(lián)hbase的表之后。進(jìn)行數(shù)據(jù)查詢測(cè)試。
兩張表的創(chuàng)建腳本:

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");

然后在兩張表中個(gè)插入插入100萬(wàn)數(shù)據(jù)測(cè)試
注:我這里是在HBase中直接插入100w數(shù)據(jù)的,使用HBase的Api完成的,具體可以大數(shù)據(jù)學(xué)習(xí)系列之三 ----- HBase Java Api 圖文詳解這篇博文。

大數(shù)據(jù)學(xué)習(xí)系列之九---- Hive整合Spark和HBase以及相關(guān)測(cè)試

成功插入之后,我們?cè)趆ive shell中來(lái)測(cè)試查詢速度。

條數(shù)測(cè)試:
大數(shù)據(jù)學(xué)習(xí)系列之九---- Hive整合Spark和HBase以及相關(guān)測(cè)試

主鍵管理查詢測(cè)試:
大數(shù)據(jù)學(xué)習(xí)系列之九---- Hive整合Spark和HBase以及相關(guān)測(cè)試

非主鍵查詢測(cè)試:
大數(shù)據(jù)學(xué)習(xí)系列之九---- Hive整合Spark和HBase以及相關(guān)測(cè)試

注:其實(shí)也是可以使用hive的Api ,就是普通的JDBC連接,只不過(guò)連接驅(qū)動(dòng)要換成

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

具體實(shí)現(xiàn)可以看我的github中的代碼:https://github.com/xuwujing/pancm_project/blob/master/src/main/java/com/pancm/test/hiveTest/hiveUtil.java

結(jié)論: 使用 hive on spark 查詢可以看出,如果查詢條件是主鍵,也就是hbase中的rowkey的話,查詢100w數(shù)據(jù)可以在2.3s左右就查出來(lái)了(個(gè)人感覺(jué)打開(kāi)spark估計(jì)就要用2s左右,如果量大的話,速度估計(jì)也不會(huì)很慢), 但是如果使用非主鍵的條件去查詢,就可以看到速度明顯變慢了。
所以在使用 hive on hbase 的時(shí)候,盡量使用rowkey進(jìn)行查詢。

后記

其實(shí)集群的環(huán)境搭建以及整合在我寫(xiě)第一篇大數(shù)據(jù)學(xué)習(xí)系列博客的時(shí)候就已經(jīng)搭建好了。至于博客為什么寫(xiě)得這么遲,第一點(diǎn)是當(dāng)初搭建環(huán)境的時(shí)候,并沒(méi)有真正的理解那些配置的作用;第二點(diǎn)是環(huán)境搭建有些莫名其妙,經(jīng)常出現(xiàn)問(wèn)題,不過(guò)大部分問(wèn)題和解決反感我都記錄并寫(xiě)成博客了,所以慢慢寫(xiě)博客其實(shí)也是個(gè)人知識(shí)的重新整理;第三是個(gè)人的精力有限,無(wú)法一口氣將這些都寫(xiě)成博客,畢竟寫(xiě)博客也需要一定時(shí)間和精力的。
完成本篇博文之后,暫時(shí)先不寫(xiě)大數(shù)據(jù)這方面的博客了。感覺(jué)目前的自己能力還不夠,如果就這樣勉強(qiáng)的去自學(xué),估計(jì)也很難學(xué)到知識(shí)點(diǎn),更何況將其寫(xiě)成博客來(lái)講解了。所以目前就先放放,有能力之后再來(lái)續(xù)寫(xiě)!
大數(shù)據(jù)學(xué)習(xí)系列的文章:http://blog.csdn.net/column/details/18120.html

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI