最近在Hive中使用Spark引擎進行執行時(set hive.execution.engine=spark
),經常遇到return code 30041
的報錯,為了深入探究其原因,閱讀了官方issue、相關博客進行了研究。下面從報錯現象、原因分析、解決方案幾個方面進行介紹,最后做一下小結。
(一)報錯現象
ERROR : FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session 7a817eea-176c-46ba-910e-4eed89d4eb4d
以上是我在使用Hive On Spark
時遇到的報錯信息,且頻繁出現,但每次報錯后重跑hql腳本即可解決,這讓我十分疑惑。
(二)原因分析
相關博客列舉了如下幾個原因:
1、Spark
沒有正常啟動
2、Spark
和Hive
版本不匹配
3、資源不足,導致Hive
連接Spark
客戶端超過設定時長
經過分析,我遇到的現象不屬於1、2
,集群上的Spark作業能正常運行,說明Spark是正常啟動的;另外,由於設置了Hive On Spark
的作業並非永久無法運行成功,而是偶發性失敗,重試可成功執行,說明Spark
與Hive
的版本是匹配的,不存在版本沖突問題。
(三)解決方案
首先,根據mszurap在Re: cant use hive on spark engine cannot create client erorr code 30041上的回答,首先前提是確保以下條件能得到滿足:
1、在
Hive服務>配置
中已啟用Spark服務作為依賴項
2、在Hive服務>配置
中查看與Spark相關的設置
3、您在群集上有足夠的資源,可以提交YARN作業
其次,如果以上條件均已滿足,根據issues.apache.org/jira/browse/SPARK-32345中ZhouDaHong的回答。
如果排除hive
、spark
配置,以及版本沖突等原因。您可以查看隊列資源。
如果隊列資源達到100%,並且沒有釋放的空閑任務資源可在短時間內創建Spark會話,則任務將失敗並且將引發此異常。
解決方案:將Hive客戶端的連接時間間隔增加到5分鍾;
設置hive.spark.client.server.connect.timeout = 300000;
該參數單位為毫秒,默認值為90秒。這里不建議將該參數時間設置過大,因為這將影響作業運行時效。
(四)小結
遇到問題需要通過有條理性的邏輯進行分析,不能按照網上羅列的可能原因進行嵌套,明顯,我遇到的情況不屬於1、Spark沒有正常啟動
,也不屬於2、Spark和Hive版本不匹配
。所以從第三個角度進行考慮。找對了方向之后再參考相關文檔、論壇討論,動手嘗試,一步一步靠近目標。
參考
[1]cant use hive on spark engine cannot create client erorr code 30041[https://community.cloudera.com/t5/Support-Questions/cant-use-hive-on-spark-engine-cannot-create-client-erorr/td-p/240504]
[2]SemanticException Failed to get a spark session: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session[https://issues.apache.org/jira/browse/SPARK-32345]
[3]0514-Hive On Spark無法創建Spark Client問題分析[https://cloud.tencent.com/developer/article/1545722]
[4]hiveonspark不能創建sparksession原因定位[http://blog.sina.com.cn/s/blog_6dd718930102z2un.html]
[5]Failed to create Spark client for Spark session[https://www.cnblogs.com/Sunqi-1997/p/13701837.html]
[6]FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session 7f00ef43-d843-45f5-a425-0995818a608f_0: java.lang.RuntimeException: spark-submit process failed with exit code 1[https://www.itdiandi.net/view/1431]
[7]Hive on Spark[https://issues.apache.org/jira/browse/HIVE-7292]