当前位置: 首页 > 知识库问答 >
问题:

spark-submit--jars参数想要逗号列表,如何声明一个jars目录?

叶嘉颖
2023-03-14

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

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

问题:在$spark_home/bin中的spark-submit脚本中使用--jars提交类路径的所有选项是什么?是否有任何未记录的文件可以作为文档的改进提交?

我这样问是因为当我今天测试--jar时,我们必须明确提供到每个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

我们选择在每个worker上用/usr/local/spark/jar中的所有JAR预先填充集群,如果没有提供local:/file:/或hdfs:,则默认为file:/并且驱动程序使JAR在驱动程序运行的Web服务器上可用。我选择了本地,如上。

而且我们似乎不需要将主jar放在--jars参数中,我还没有测试最后一个参数中的其他类(application-jar arg per docs,即/usr/local/spark/jars/thold-0.0.1-1.jar)是否被发送到workers中,或者我是否需要将application-jar放在--jars路径中以获得不以--class命名的类。

(对于使用部署模式客户端的Spark独立模式,您还必须在每个worker上放置驱动程序的副本,但您不知道哪个worker将运行驱动程序)

共有1个答案

隆宏爽
2023-03-14

这样工作起来很容易。而不是单独指定每个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

>

  • 使用trunix命令也可以提供帮助,如下例所示。

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

  •  类似资料:
    • 我正在为Spark Streaming作业构建指标系统,在系统中,指标收集在每个执行程序中,因此需要在每个执行程序中初始化指标源(用于收集指标的类)。 度量源被打包在一个jar中,当提交作业时,jar使用参数'--jars'从本地发送到每个执行器,但是,执行器在jar到达之前开始初始化度量源类,因此,它会抛出类未找到异常。 似乎如果执行者可以等到所有资源都准备好,问题就会得到解决,但我真的不知道该

    • 我通过python API使用spark V2.4.4 null null null

    • 我使用IntelliJ创建了一个sbt项目。我将所需的jdbc jar复制到项目的文件夹中。成功完成。在Windows上,我通过启动了spark。 但是,以下命令得到了错误。

    • 问题内容: 但是有很多歧义和提供的一些答案…包括在jars / executor / driver配置或选项中复制jar引用。 How ClassPath is affected Driver Executor (for tasks running) Both not at all Separation character: comma, colon, semicolon If provided

    • 问题内容: 我编写了一个pyspark脚本,该脚本读取两个json文件,然后将它们发送到elasticsearch集群。当我在本地运行该文件时,一切都会正常运行(大部分情况下),我下载了和类的jar文件,然后使用pyspark使用参数运行我的工作,并且可以看到在我的Elasticsearch集群中出现的文档。 但是,当我尝试在Spark群集上运行它时,出现此错误: 在我看来,这很清楚:工人无法使用

    • 哪里可以找到的所有调优参数的详尽列表(连同它们的属性名),这些参数可以通过命令传递?