通过spark-submit将额外的罐子传递给Spark

时间:2015-11-27 16:43:51

标签: mongodb hadoop jar apache-spark apache-spark-1.5

我使用Spark和MongoDB,因此依赖于mongo-hadoop驱动程序。由于对原始问题here的输入,我得到了一些工作。

我的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

它有效,但给了我以下警告信息

  

警告:本地jar   /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   不存在,跳过。

当我试图让这个工作时,如果我在提交工作时遗漏了这些路径,它根本就不会运行。但是,现在,如果我遗漏了那些路径,它就会运行

$SPARK_HOME/bin/spark-submit  my_application.py

有人可以解释一下这里发生了什么吗?我在这里查看了类似的问题,引用了相同的警告,并搜索了文档。

通过设置选项,它们是否存储为环境变量或其他内容?我很高兴它有效,但我担心我不能完全理解为什么有时而不是其他人。

2 个答案:

答案 0 :(得分:2)

问题是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

答案 1 :(得分: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,因此不应该发出警告。