Spark提交---packages vs --jars

时间:2018-07-20 03:51:17

标签: java scala apache-spark cassandra

有人可以在火花提交脚本中解释--packages--jars之间的区别吗?

nohup ./bin/spark-submit   --jars ./xxx/extrajars/stanford-corenlp-3.8.0.jar,./xxx/extrajars/stanford-parser-3.8.0.jar \
--packages datastax:spark-cassandra-connector_2.11:2.0.7 \
--class xxx.mlserver.Application \
--conf spark.cassandra.connection.host=192.168.0.33 \
--conf spark.cores.max=4 \
--master spark://192.168.0.141:7077  ./xxx/xxxanalysis-mlserver-0.1.0.jar   1000  > ./logs/nohup.out &

此外,如果依赖关系在我的应用程序--packages中,我是否需要pom.xml配置? (我之所以问,是因为我只是通过更改--packages中的版本来炸毁我的应用程序,而忘记了在pom.xml中对其进行更改)

我当前使用--jars是因为这些jar很大(超过100GB),因此减慢了阴影jar编译的速度。我承认我不确定为什么要使用--packages,除了因为我在遵循datastax文档

1 个答案:

答案 0 :(得分:8)

如果您执行spark-submit --help,它将显示:

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

--packages                  Comma-separated list of maven coordinates of jars to include
                              on the driver and executor classpaths. Will search the local
                              maven repo, then maven central and any additional remote
                              repositories given by --repositories. The format for the
                              coordinates should be groupId:artifactId:version.

如果是-罐子

  

然后spark不会遇到问题,但它将在本地文件系统中搜索指定的jar,它还支持以下URL方案hdfs / http / https / ftp。

如果是-程序包

  

然后spark将在本地Maven存储库中搜索特定的软件包,然后在Central Maven存储库或--repositories提供的任何存储库中进行搜索,然后将其下载。

现在回到您的问题:

此外,如果依赖项在我的应用程序pom.xml中,我是否需要--packages配置?

答案:否,如果您不是直接在jar中导入/使用类,而是需要由某些类加载器或服务加载器(例如JDBC驱动程序)加载类。否则可以。

顺便说一句,如果您在pom.xml中使用特定版本的jar,那么为什么不制作应用程序的uber / fat jar或在-jars 参数中提供依赖项jar?而不是使用-程序包

链接引用:

spark advanced-dependency-management

add-jars-to-a-spark-job-spark-submit