【问题标题】:Passing additional jars to Spark via spark-submit通过 spark-submit 将额外的 jars 传递给 Spark
【发布时间】:2016-03-01 21:51:13
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 解决了,感谢您的帮助。由于我将JARS 冒号分开,这是否意味着它们没有被正确传递。如果是这样,为什么作业仍然运行,这是否意味着根本不需要未通过的 JAR?
    • 关于第一个问题,答案是肯定的。至于第二个,据我所知是负面的。它可以在本地模式下工作(使用driver-class-path 设置类路径),但它不适用于远程工作者,至少在独立模式下是这样。当然,如果这些 jars 已经在 worker 类路径上,则不需要。顺便说一句,我已经更新了之前的答案和 docker 图像。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 2017-03-24
      • 2020-03-23
      • 2016-06-03
      相关资源
      最近更新 更多