Hive(十三)【Hive on Spark 部署搭建】


Hive on Spark 官網詳情https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started

一.安裝Hive

具體安裝參考:Hive(一)【基本概念、安裝】

安裝和Spark對應版本一起編譯的Hive,當前官網推薦的版本關系如下:

HiveVersion SparkVersion
1.1.x 1.2.0
1.2.x 1.3.1
2.0.x 1.5.0
2.1.x 1.6.0
2.2.x 1.6.0
2.3.x 2.0.0
3.0.x 2.3.0
master 2.3.0

二.安裝Spark

①在Hive所在機器安裝Spark,配置Spark on Yarn模式。

可以將spark的日志,集成到Yarn上

②配置Spark的環境變量。

export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin
source /etc/profile.d/my_env.sh

具體安裝參考:Spark(一)【spark-3.0安裝和入門】

三.向HDFS上傳Spark純凈版jar包

使用不帶hadoop的spark的包:spark-3.0.0-bin-without-hadoop.tgz

①解壓

tar -zxvf /opt/software/spark/spark-3.0.0-bin-without-hadoop.tgz

上傳只HDFS的/spark-jars目錄該目錄在下面需要配置

hadoop fs -put spark-3.0.0-bin-without-hadoop/jars/* /spark-jars

四.修改hive-site.xml文件

添加如下內容

<!--Spark依賴位置,上面上傳jar包的hdfs路徑-->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>
  
<!--Hive執行引擎,使用spark-->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

<!--Hive和spark連接超時時間-->
<property>
    <name>hive.spark.client.connect.timeout</name>
    <value>10000ms</value>
</property>

注意: hive.spark.client.connect.timeout的默認值是1000ms,如果執行hive的insert語句時,拋如下異常,可以調大該參數到10000ms

FAILED: SemanticException Failed to get a spark session: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session d9e0224c-3d14-4bf4-95bc-ee3ec56df48e

五.測試

①啟動hive的metstore服務和hive客戶端

[root@hadoop102 ~]$ hive --service metastore
[root@hadoop102 hive]$ bin/hive

②創建一張測試表

hive (default)> create table student(id int, name string);

③通過insert測試效果

hive (default)> insert into table student values(1,'abc');

若結果如下,則說明配置成功,第一次初始化spark session比較費時間,下次執行就很快了。

hive on spark 的相關原理可參考

Hive on spark的架構與解析SQL的過程

spark任務通過web查看

FAQ

1.執行sql語句,報錯信息。

hive> insert into table student values(1,'abc');
Query ID = atguigu_20200814150018_318272cf-ede4-420c-9f86-c5357b57aa11
Total jobs = 1
Launching Job 1 out of 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Job failed with java.lang.ClassNotFoundException: org.apache.spark.AccumulatorParam
FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the root cause.

原因:由於當前的hive的版本3.1.2,spark版本3.0.0,只能自己編譯。

建議用官方發布的hive+spark版本搭配。

2.啟動hive的metstore服務,不然可能報錯

hive> insert into table student values(1,'abc');
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM