在Submitting Applications in the Spark docs, as of 1.6.0 and earlier中,不清楚如何指定--jars参数,因为显然不是冒号分隔的类路径,也不是目录扩展。
文档说:“到包含您的应用程序和所有依赖项的捆绑jar的路径。URL必须在群集内部全局可见,例如,所有节点上都存在hdfs://路径或file://路径。 ”
我问是因为今天在测试--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 在驱动程序运行的Web服务器上可用。我选择本地,如上所述。
似乎我们不需要将主jar放在--jars参数中,我尚未测试最终参数中是否有其他类(每个文档的application-jar arg,即/usr/local/spark/jars/thold-0.0.1-1.jar)已交付给工作人员,或者如果我需要将application-jar放在--jars路径中,以使未以--class命名的类可见。
(并且使用--deploy-mode客户端授予Spark独立模式,您还必须在每个工作程序上放置驱动程序的副本,但是您不知道哪个工作程序将运行该驱动程序)
最佳答案
这样,它很容易工作..而不是分别为每个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 ' ' ',')
关于java - Spark spark-submit --jars参数要使用逗号列表,如何声明jars目录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34738296/