hive on spark與sparkSQl共存

背景

需要使用spark腳本讀寫hive數據
又需要讓hive mr引擎使用spark,從而從kettle入口觸發hive交互時hive能夠用到spark性能

版本依賴

原生apache :

hive 2.3.3
spark 2.1.0
spark 2.1.0-without-hadoop
hadoop 2.6.5

問題所在

因爲sparksql使用hive倉庫需使用到完整的hive,hdfs依賴包,因此需要使用apache預編譯好的hadoop整合包,否則無論在spark-shell環境還是spark-submit提交作業都會報出hive類異常之類的錯誤

Caused by: java.lang.IllegalArgumentException: Unable to instantiate SparkSession with Hive support
Unable to instantiate SparkSession with Hive support because Hive classes are not found

而使用預編譯包,在hive中使用spark引擎的話,又會發生

java.lang.NoSuchFieldError: SPARK_RPC_SERVER_ADDRESS

的錯誤,這個時候需要非預編譯hive的spark工程,相當矛盾。

解決方法

利用spark在driver運行節點classpath下獲取相關jars的原理,在hive運行節點使用spark-without-hadoop包。而在yarn nodemanager節點使用spark預編譯包,sparksql提交的腳本driver也運行於這幾個節點。

節點名稱 節點功能 使用部署包 運行說明
master1 主節點 spark-2.1.0-bin-without-hadoop.tgz
hive-2.3.3.tar
yarn resourcemanager,hive
master2 主節點備用 spark-2.1.0-bin-without-hadoop.tgz
hive-2.3.3.tar
yarn resourcemanager,hive
slave1 運算節點1 spark-2.1.0-bin-hadoop2.6.tgz yarn nodemanager,
使用spark shell/submit
slave2 運算節點2 spark-2.1.0-bin-hadoop2.6.tgz yarn nodemanager,
使用spark shell/submit
slave3 運算節點3 spark-2.1.0-bin-hadoop2.6.tgz yarn nodemanager,
使用spark shell/submit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章