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

Passing additional jars to Spark via spark-submit

我在 MongoDB 中使用 Spark,因此依赖 mongo-hadoop 驱动程序。由于对我原来的问题 .

的输入,我的工作正常了

我的 Spark 作业是 运行ning,但是,我收到了我不理解的警告。当我运行这个命令

$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

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

Warning: Local 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 does not exist, skipping.

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

$SPARK_HOME/bin/spark-submit  my_application.py

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

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

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

在 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,因此不会出现警告。