Failed to create Spark client for Spark session


最近在hive里將mr換成spark引擎后,執行插入和一些復雜的hql會觸發下面的異常:

org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException Failed to get a spark session: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session c5924990-6187-4a15-a760-ec3b1afbc199

 

未能創建spark客戶端的原因有這幾個:

1,spark沒有打卡

2,spark和hive版本不匹配

3,hive連接spark客戶端時長過短

 

解決方案:

1,在進入hive之前,需要依次啟動hadoop,spark,hiveservice,這樣才能確保hive在啟動spark引擎時能成功

spark啟動:

cd /opt/spark
./sbin/start-all.sh

 

2,版本問題是最常見也是出現最多的問題,我用的版本依次為hadoop3.3.0,hive3.1.2,spark2.4.7,之前測試過spark3.0.1,發現和hive不兼容

這里還需要注意Apache官網的提供了如圖所示的幾個spark包版本:

 

但在集成hive時spark本身不能自帶hive配置,所以只有第三個是可以用的,但是我測試了一下在我的電腦上還是報錯,所以我選擇了自己編譯,下載最后一個源碼包,解壓后進入spark目錄

輸入命令:

./dev/make-distribution.sh --name without-hive --tgz -Pyarn -Phadoop-3.3 -Dhadoop.version=3.3.0 -Pparquet-provided -Porc-provided -Phadoop-provided

但是發現編譯卡住了,原來編譯會自動下載maven,scala,zinc,存放在build目錄下,如圖:

 

 由於下載過於緩慢,這里直接將這三個包放在build目錄下,解壓好,編譯時會自動識別,可以省去很多時間,快速進入編譯,需要壓縮包的可以關注公眾號:Tspeaker97  給我發消息找我要

編譯過程比較慢,我花了30分鍾才將spark編譯好,中間還網絡斷流卡住失敗了一次,如果不能訪問外網的,建議將maven鏡像改為阿里雲。

 

 

編譯完成后在spark目錄下就可以看到編譯出的tgz包,解壓到對應目錄:

vim spark-env.sh
插入如下代碼:
export SPARK_DIST_CLASSPATH=$(hadoop classpath)

 

接下來就是hive的設置,這里我用的是公司編譯好的版本,大小比Apache官網大一點,想要可以微信扣我

進入hive/conf目錄:

vim spark-defaults.conf
插入如下代碼:
spark.master                             yarn
spark.eventLog.enabled                   true
spark.eventLog.dir                       hdfs://hadoop01:9820/spark-history
spark.executor.memory                    2g

 

在hdfs創建對應目錄並拷貝jar包:

hadoop fs -mkdir /spark-history
hadoop fs -mkdir /spark-jars
hadoop fs -put /opt/spark/jars/* /spark-jars

 

在hive/conf/hive-site.xml中增加:(這里特地延長了hive和spark連接的時間,可以有效避免超時報錯)

<!--Spark依賴位置-->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hadoop01:9820/spark-jars/*</value>
</property>
  
<!--Hive執行引擎-->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

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

 

 然后啟動spark服務,hive服務,並進入hive客戶端,執行hql:

set hive.exec.mode.local.auto=true;

create table visit(user_id string,shop string) row format delimited fields terminated by '\t';

load data local inpath '/opt/hive/datas/user_id' into table visit;

SELECT t1.shop,
       t1.user_id,
       t1.count,
       t1.rank
FROM
  (SELECT shop,
          user_id,
          count(user_id) COUNT,
          rank() over(partition BY shop ORDER BY count(user_id) DESC) rank
   FROM visit
   GROUP BY user_id,
            shop
   ORDER BY shop ASC, COUNT DESC ) t1
WHERE rank <4;

 

spark引擎成功啟動:

 

 

如果有其他問題,歡迎叨擾:

 


免責聲明!

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



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