2015-11-27 97 views
1

我在Spark中使用了MongoDB,因此依賴於mongo-hadoop驅動程序。感謝在我原來的問題here上的輸入,我得到了一些工作。通過spark-submit將其他罐子傳遞給Spark

我的Spark工作正在運行,但是,我收到警告,我不明白。當我運行此命令

$SPARK_HOME/bin/spark-submit --driver-class-path /usr/local/share/mongo-hadoop/build/libs/mongo-hadoop-1.5.0-SNAPSHOT.jar:/usr/local/share/mongo-hadoop/spark/build/libs/mongo-hadoop-spark-1.5.0-SNAPSHOT.jar --jars /usr/local/share/mongo-hadoop/build/libs/mongo-hadoop-1.5.0-SNAPSHOT.jar:/usr/local/share/mongo-hadoop/spark/build/libs/mongo-hadoop-spark-1.5.0-SNAPSHOT.jar my_application.py 

它的工作原理,但給了我下面的警告消息

警告:本地罐子 在/ usr/local/share下/蒙戈-的Hadoop /建設/庫/ mongo- hadoop-1.5.0-SNAPSHOT.jar:/usr/local/share/mongo-hadoop/spark/build/libs/mongo-hadoop-spark-1.5.0-SNAPSHOT.jar 不存在,跳過。

當我試圖得到這個工作,如果我在提交作業時忽略了這些路徑,它根本就不會運行。但是,現在,如果我忽略了它運行的那些路徑

$SPARK_HOME/bin/spark-submit my_application.py 

有人能解釋一下這裏發生了什麼嗎?我在這裏查看了類似的問題,並引用了相同的警告,並通過文檔進行了搜索。

通過設置選項一旦它們存儲爲環境變量或什麼?我很高興它有效,但要小心,我不完全明白爲什麼有時而不是其他人。

回答

1

的問題是,CLASSPATH應該冒號隔開,而JARS應該是逗號分隔:

$SPARK_HOME/bin/spark-submit \ 
--driver-class-path /usr/local/share/mongo-hadoop/build/libs/mongo-hadoop-1.5.0-SNAPSHOT.jar:/usr/local/share/mongo-hadoop/spark/build/libs/mongo-hadoop-spark-1.5.0-SNAPSHOT.jar \ 
--jars /usr/local/share/mongo-hadoop/build/libs/mongo-hadoop-1.5.0-SNAPSHOT.jar,/usr/local/share/mongo-hadoop/spark/build/libs/mongo-hadoop-spark-1.5.0-SNAPSHOT.jar my_application.py 
+0

解決了它,謝謝你的幫助。由於我將'JARS'冒號分開,這是否意味着它們沒有正確傳遞。如果是這樣,那麼這個工作怎麼還在繼續,這是否意味着沒有必要使用未被超越的JAR? –

+1

關於第一個問題,答案是肯定的。關於第二個,據我所知它是負面的。它可以以本地模式工作(使用'driver-class-path'設置類路徑),但它不適用於遠程工作者,至少在獨立模式下工作。當然,如果這些罐子已經在工人類路徑上,這並不是必需的。順便說一句,我已經更新了以前的答案和碼頭形象。 – zero323

1

添加上Zero323答案的頂部

我想這樣做的更好的辦法是

$SPARK_HOME/bin/spark-submit \ 
--driver-class-path $(echo /usr/local/share/mongo-hadoop/build/libs/*.jar | tr ' ' ',') \ 
--jars $(echo /usr/local/share/mongo-hadoop/build/libs/*.jar | tr ' ' ',') my_application.py 

在這種方法中,您不會錯過任何類路徑中的錯誤jar,因此不會出現警告。