CDH 5.16、oozie、spark2 Integration、SparkMain Class not found。
Cloudera 官方釋出的 Hadoop package 與一般我們在網路上能自行下載的 Hadoop 包有點不一樣。
在 oozie 整合 spark 2 的需求上又是一個坑,剛好在工作上遇到了,花了一些時間解決掉,將設定步驟一一記錄起來供日後參考用。
參考文章:https://blog.csdn.net/qq_24908345/article/details/80017660
問題描述:
原本我們的程式是使用 spark 1.6 做開發,但考量到日後程式的維護與更新,小組成員討論後毅然決然決定用 spark 2 當作日後開發的依據。
不料在我們以 spark 2 為基底將開發的程式包成 jar 檔,想要用 oozie workflow 的方式呼叫時,卻出現了 SparkMain Class not found 的問題。
解決方式:
我們使用的是 CDH 5.16,內建自帶整合 spark 1.6,若要使用 spark 2 進行執行,需額外自行安裝 spark 2 後,做一些設定,經過不斷的嘗試,最後統整步驟如下。
1.建立 spark2 hdfs 資料夾,自行引入 spark2 相關 jar 檔到 oozie 執行參照路徑下
中間有出現日期的資料夾,會依據你建立安裝的時間不同而改變。
hadoop fs -mkdir /user/oozie/share/lib/lib_202011300153041/spark2
hadoop fs -put /opt/cloudera/parcels/SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p01041012/lib/spark2/jars /user/oozie/share/lib/lib_202011300153041/spark2
hadoop fs -cp /user/oozie/share/lib/lib_202011300153041/spark/oozie-sharelib-spark-4.1.0-cdh5.16.2.jar /user/oozie/share/lib/lib_202011300153041/spark2
hadoop fs -cp /user/oozie/share/lib/lib_202011300153041/spark/oozie-sharelib-spark.jar /user/oozie/share/lib/lib_202011300153041/spark2
2.執行 oozie admin -sharelibupdate 更新參照
oozie admin -sharelibupdate
3.執行 oozie admin -shareliblist 確認 spark2 路徑已在參照內
oozie admin -sharelinlist
4.於呼叫 oozie workflow 的程式增加以下設定,告訴 oozie 請用 spark2 執行你的 jar 檔
conf.setProperty("oozie.action.sharelib.for.spark", "spark2")
完成後,程式便可用 oozie workflow 的方式正確執行,又是一次完美的 CDH 填坑行動~