有人能解释一下spark-submit脚本中的--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 &
另外,如果依赖项在应用程序pom.xml
中,我是否需要--packages
配置?(我这样问是因为我在--packages
中更改了版本,而忘记在pom.xml
中更改了它,这使我的应用程序崩溃了)
如果您执行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不会命中maven,但它会在本地文件系统中搜索指定的jar,它还支持以下URL方案HDFS/HTTP/HTTPS/FTP。
现在回到你们的问题:
另外,如果依赖关系在应用程序pom.xml中,我需要--packages配置吗?
ANS:不,如果您不是直接在jar中导入/使用类,而是需要通过某个类加载器或服务加载器(例如JDBC驱动程序)加载类。是的。否则。
Add-jars-to-a-spark-job-spark-submit
那么需要在命令中做哪些更改来加载包呢? 此包的详细信息显示在https://mvnrepository.com/artifact/cloudant-labs/spark-cloudant/2.0.0-S2.11中
我正在为Spark Streaming作业构建指标系统,在系统中,指标收集在每个执行程序中,因此需要在每个执行程序中初始化指标源(用于收集指标的类)。 度量源被打包在一个jar中,当提交作业时,jar使用参数'--jars'从本地发送到每个执行器,但是,执行器在jar到达之前开始初始化度量源类,因此,它会抛出类未找到异常。 似乎如果执行者可以等到所有资源都准备好,问题就会得到解决,但我真的不知道该
我在使用以下简单示例时遇到了“ClassNotFound”异常的问题: 在本地模式下,按照文档提交会在第31行生成一个“ClassNotFound”异常,其中ClassToRoundTrip对象被反序列化。奇怪的是,前面28行的使用还可以: 但是,提交给本地开发人员主机仍然会产生相同的问题: 我可以从输出中看到JAR文件正在被执行器提取。 下面是其中一个执行程序的日志:
我有一个scala对象文件,它内部查询mysql表,做一个连接,并把数据写到s3,测试了我的代码在本地运行得非常好。但是当我将它提交给集群时,它会在错误下面抛出: 我还尝试了: 但还是没有运气,我在这里错过了什么。
是的...已经讨论了很多了。 但是,有很多不明确的地方,提供了一些答案...包括在jars/executor/driver配置或选项中重复jar引用。 类路径的影响 驱动程序 执行程序(用于正在运行的任务) 两者 一点也不 对于任务(对每个执行者) 用于远程驱动程序(如果在群集模式下运行) 方法 方法 或 或 不要忘记,spark-submit的最后一个参数也是一个.jar文件。 如果我从文档中猜