Spark問題[一]:java.lang.ClassNotFoundException: org.apache.spark.launcher.Main

Spark問題[一]:java.lang.ClassNotFoundException: org.apache.spark.launcher.Main


在開發中,需要使用crontab調度Shell腳本,來執行Spark任務。手動執行腳本沒有問題,但是放到crontab中執行,就報以下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/launcher/Main
Caused by: java.lang.ClassNotFoundException: org.apache.spark.launcher.Main
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:268)

經查得是crontab在運行過程中找不到當前的環境變量,解決方式有2種:
1:在crontab命令中,添加source命令,或在 shell 腳本中添加source命令:

# 在crontab命令行中添加
45 15 * * * source ~/.bash_profile;bash /home/test/test-etl/sbin/crontab_etl.sh

# 在shell腳本的最前面添加
#! /bin/sh
source ~/.bash_profile

2: 通過 which spark-submit 解決,我是通過第2種方式解決的:

SPARK_HOME=`which spark-submit`
$SPARK_HOME --class com.test.etl.job.scala.job.ETLJob
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章