Spark spark-submit --jars 参数需要逗号列表,如何声明 jars 目录?

问题描述 投票:0回答:2

在 Spark 文档中提交应用程序,从 1.6.0 及更早版本开始,不清楚如何指定 --jars 参数,因为它显然不是用冒号分隔的类路径,而不是目录扩展。

文档说“捆绑 jar 的路径,包括您的应用程序和所有依赖项。URL 必须在集群内部全局可见,例如,所有节点上都存在的 hdfs:// 路径或 file:// 路径.”

问题:提交类路径的所有选项是什么 --$SPARK_HOME/bin 中的 Spark-submit 脚本中的 jars?有任何未记录的内容可以作为文档的改进提交吗?

我问这个问题是因为当我今天测试 --jars 时,我们必须显式提供每个 jar 的路径:

/usr/local/spark/bin/spark-submit --class jpsgcs.thold.PipeLinkageData ---jars=local:/usr/local/spark/jars/groovy-all-2.3.3.jar,local:/usr/local/spark/jars/guava-14.0.1.jar,local:/usr/local/spark/jars/jopt-simple-4.6.jar,local:/usr/local/spark/jars/jpsgcs-core-1.0.8-2.jar,local:/usr/local/spark/jars/jpsgcs-pipe-1.0.6-7.jar /usr/local/spark/jars/thold-0.0.1-1.jar

我们选择在每个工作进程上使用 /usr/local/spark/jars 中的所有 jar 预填充集群,似乎如果没有提供 local:/ file:/ 或 hdfs: ,则默认为 file: / 并且驱动程序使 jar 在驱动程序运行的网络服务器上可用。我选择本地,如上所述。

而且似乎我们不需要将主 jar 放在 --jars 参数中,我还没有测试最后一个参数中是否有其他类(每个文档的 application-jar arg,即 /usr/local/spark/jars /thold-0.0.1-1.jar) 被运送给工作人员,或者如果我需要将 application-jar 放在 --jars 路径中以获取未以 --class 命名的类。

(并且使用 --deploy-mode 客户端授予 Spark 独立模式,您还必须在每个工作线程上放置驱动程序的副本,但您事先不知道哪个工作线程将运行驱动程序)

java scala jar apache-spark cluster-computing
2个回答
9
投票
通过这种方式,它可以轻松工作..而不是分别指定每个 jar 的版本..

#!/bin/sh # build all other dependent jars in OTHER_JARS JARS=`find ../lib -name '*.jar'` OTHER_JARS="" for eachjarinlib in $JARS ; do if [ "$eachjarinlib" != "APPLICATIONJARTOBEADDEDSEPERATELY.JAR" ]; then OTHER_JARS=$eachjarinlib,$OTHER_JARS fi done echo ---final list of jars are : $OTHER_JARS echo $CLASSPATH spark-submit --verbose --class <yourclass> ... OTHER OPTIONS --jars $OTHER_JARS,APPLICATIONJARTOBEADDEDSEPERATELY.JAR

  • 使用

    tr
     unix 命令也可以提供帮助,如下例所示。

    --jars $(echo /dir_of_jars/*.jar | tr ' ' ',')

    
    

  • 一个父目录和递归目录(每个目录有不同的罐子)...案例

$(find /dir_of_jars -name '*.jar' -print0 | tr '\0' ',' | sed 's/,$//')
    

0
投票
使用 --jars 参数的一种方法(唯一的方法?)是提供以逗号分隔的显式命名的 jar 列表。我想出使用逗号的唯一方法是 StackOverflow 的答案,它让我超越文档而转向命令行:

spark-submit --help

该命令的输出包含:

--jars JARS Comma-separated list of local jars to include on the driver and executor classpaths.

今天,当我测试 --jars 时,我们必须显式提供每个 jar 的路径:

/usr/local/spark/bin/spark-submit --class jpsgcs.thold.PipeLinkageData ---jars=local:/usr/local/spark/jars/groovy-all-2.3.3.jar,local:/usr/local/spark/jars/guava-14.0.1.jar,local:/usr/local/spark/jars/jopt-simple-4.6.jar,local:/usr/local/spark/jars/jpsgcs-core-1.0.8-2.jar,local:/usr/local/spark/jars/jpsgcs-pipe-1.0.6-7.jar /usr/local/spark/jars/thold-0.0.1-1.jar
    
© www.soinside.com 2019 - 2024. All rights reserved.