Hive on Spark配置


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

參考:https://www.cnblogs.com/wh984763176/p/13503875.html

版本要求:(版本很重要)

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

image

環境要求:三台linux服務器,安裝好spark,並配置好spark on yarn模式。

安裝好hive和metastore。

安裝spark與hive

安裝spark可以參考前面的文章:

Spark集群環境搭建——部署Spark集群:https://www.cnblogs.com/doublexi/p/15624795.html

安裝hive,可以參考:

Hive安裝部署:https://www.cnblogs.com/doublexi/p/15636547.html

配置Hive on Spark

1、查看當前的計算引擎

set hive.execution.engine;

可以看到hive默認的計算引擎為MR,而且有提示,這個配置即將被廢棄了,推薦使用spark或者tez

clipboard

2、在線修改計算引擎為spark

set hive.execution.engine=spark;

clipboard

這種方式只在當前終端有效,終端關閉,再打開又恢復為了mr。

想要永久修改引擎為spark,可以修改配置文件

3、修改hive-site.xml

<!-- 使用spark計算引擎 -->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>
<!-- 這個配置注釋掉,本次不能用
<property>
   <name>spark.master</name>
   <value>spark://dev-spark-master-206:7077</value>
</property>
-->
<property>
    <name>spark.home</name>
    <value>/data/apps/spark-3.1.2/</value>
</property>
<property>
    <name>spark.master</name>
    <value>yarn</value>
</property>
<property>
    <name>spark.eventLog.enabled</name>
    <value>true</value>
</property>
<property>
    <name>spark.eventLog.dir</name>
    <value>hdfs://dev-spark-master-206:8020/spark-eventlog</value>
</property>
<property>
    <name>spark.executor.memory</name>
    <value>512m</value>
</property>
<property>
    <name>spark.driver.memory</name>
    <value>512m</value>
</property>
<property>
    <name>spark.serializer</name>
    <value>org.apache.spark.serializer.KryoSerializer</value>
</property>
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://dev-spark-master-206:8020/spark-jars/*</value>
</property>
<property>
    <name>hive.spark.client.server.connect.timeout</name>
    <value>300000</value>
</property>

4、拷貝jar包和xml配置

將Hive的lib目錄下的指定jar包拷貝到Spark的jars目錄下:

hive-beeline-3.1.2.jar
hive-cli-3.1.2.jar hive-exec-3.1.2.jar
hive-jdbc-3.1.2.jar
hive-metastore-3.1.2.jar


[root@dev-spark-slave-171 hive-3.1.2]# cd /data/apps/hive-3.1.2/lib/
[root@dev-spark-slave-171 lib]# cp hive-beeline-3.1.2.jar hive-cli-3.1.2.jar hive-exec-3.1.2.jar hive-jdbc-3.1.2.jar hive-metastore-3.1.2.jar /data/apps/spark-3.1.2/jars/

將Spark的jars目錄下的指定jar包拷貝到Hive的lib目錄下: (重要)

spark-network-common_2.12-3.1.2.jar
spark-core_2.12-3.1.2.jar
scala-library-2.12.10.jar
chill-java-0.9.5.jar
chill_2.12-0.9.5.jar
jackson-module-paranamer-2.10.0.jar
jackson-module-scala_2.12-2.10.0.jar
jersey-container-servlet-core-2.30.jar
jersey-server-2.30.jar
json4s-ast_2.12-3.7.0-M5.jar 
kryo-shaded-4.0.2.jar minlog-1.3.0.jar
scala-xml_2.12-1.2.0.jar
spark-launcher_2.12-3.1.2.jar
spark-network-shuffle_2.12-3.1.2.jar
spark-unsafe_2.12-3.1.2.jar
xbean-asm7-shaded-4.15.jar

[root@dev-spark-slave-171 hive-3.1.2]# cd /data/apps/spark-3.1.2/jars/
[root@dev-spark-slave-171 jars]# cp spark-network-common_2.12-3.1.2.jar spark-core_2.12-3.1.2.jar scala-library-2.12.10.jar chill-java-0.9.5.jar chill_2.12-0.9.5.jar jackson-module-paranamer-2.10.0.jar jackson-module-scala_2.12-2.10.0.jar jersey-container-servlet-core-2.30.jar jersey-server-2.30.jar json4s-ast_2.12-3.7.0-M5.jar kryo-shaded-4.0.2.jar minlog-1.3.0.jar scala-xml_2.12-1.2.0.jar spark-launcher_2.12-3.1.2.jar spark-network-shuffle_2.12-3.1.2.jar spark-unsafe_2.12-3.1.2.jar xbean-asm7-shaded-4.15.jar /data/apps/hive-3.1.2/lib/

將hadoop中的yarn-site.xml、hdfs-site.xml以及Hive的hive-site.xml放入spark的conf中

cp /data/apps/hadoop-3.2.2/etc/hadoop/hdfs-site.xml /data/apps/hadoop-3.2.2/etc/hadoop/yarn-site.xml /data/apps/hive-3.1.2/conf/hive-site.xml /data/apps/spark-3.1.2/conf/

5、上傳至HDFS

為了使各個節點都能夠使用 Spark 引擎進行計算,需要將Spark的jars目錄下所有依賴包上傳至HDFS

[root@dev-spark-slave-171 jars]# cd /data/apps/spark-3.1.2/jars/
[root@dev-spark-slave-171 jars]# hdfs dfs -put * /spark-yarn/jars/

6、將spark目錄與hive中lib目錄,分發到其余機器,讓三台機器配置同步。

rsync-script /data/apps/spark-3.1.2/
rsync-script /data/apps/hive/lib/

7、重啟spark與hive的metastore

stop-all.sh
start-all.sh

nohup hive --service metastore &
nohup hiveserver2 &

8、測試

再次啟動hive,可以看到默認引擎已經改為了spark了。

clipboard

hive登錄,執行插入的sql

insert into table test.student values(1,'zhouqi',50);

或者聚合計算的sql也行:

select count(1) from test.student;

運行成功后,如下圖:

image

在yarn上,可以看到這個Application,點擊這個Application ID

image

點擊ApplicationMaster

image

在spark上也看到這個任務

image

當你退出hive的時候,這個Application任務也就隨之結束了,可以查看history。


報錯:

如果執行的過程中報錯:

Failed to execute spark task, with exception 'org.apache.hadoop.hive.ql.metadata.HiveException(Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57)'

FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57

clipboard

查看logs/hive.log,發現如下報錯:

2021-12-02T17:30:56,452 ERROR [16d94a1c-186d-4fa5-8b10-4eff1cc22037 main] spark.SparkTask: Failed to execute spark task, with exception 'org.apache.hadoop.hive.ql.metadata.HiveException(Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57)'

org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57

Caused by: java.lang.NoClassDefFoundError: org/apache/spark/SparkConf

Caused by: java.lang.ClassNotFoundException: org.apache.spark.SparkConf

clipboard

執行上述4、5、6、7步驟之后,這個問題消失,變成了一個新的問題:

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.

clipboard

經過,網上查找資料,發現是hive與spark的版本不對應導致的。

目前我們使用的版本為:

hive-3.1.2 + spark-3.1.2 (這個版本搭配不行,有問題)

解決方案:

1、重新編譯hive3.1.2,讓其支持spark-3.1.2。參考:https://forsre.cn/oasis/hive3.1.2%E7%BC%96%E8%AF%91%E6%94%AF%E6%8C%81spark3.0.0/

2、切換版本

我們使用hive-2.3.7+spark-2.4.5,試驗成功。

按照官方對應的版本為:https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started

clipboard

可以按照提示去選擇對應的spark和hive的版本,然后繼續上述步驟操作就可以了。

關於配置Hive on spark,可以參考:https://blog.csdn.net/pucao_cug/article/details/72773564

https://www.cnblogs.com/wh984763176/p/13503875.html


免責聲明!

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



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