Spark提交作业为什么一定要conf.setJars(),它的具体作用到底是什么?

代码如下:

package wordcount

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.rdd.RDD

object WordCount extends App {
  val conf = new SparkConf()
    //就是这里,为什必须要有它,它的具体作用到底是啥?
  .set("spark.jars", "src/main/resources/sparkcore.jar,")  
  .set("spark.app.name", "WordCount")
  .set("spark.master", "spark://master:7077")
  .set("spark.driver.host", "win")
  .set("spark.executor.memory", "512M")
  .set("spark.eventLog.enabled", "true")
  .set("spark.eventLog.dir", "hdfs://master:9000/spark/history")

  val sc=new SparkContext(conf) 
  val lines:RDD[String]=sc.textFile("hdfs://master:9000/user/dsf/wordcount_input")
  val words:RDD[String]=lines.flatMap(_.split(" "))
  val wordAndOne:RDD[(String,Int)]=words.map((_,1))
  val reduce:RDD[(String,Int)]=wordAndOne.reduceByKey(_+_)
  val sorted:RDD[(String,Int)]=reduce.sortBy(_._2, ascending=false,numPartitions=1)
  sorted.saveAsTextFile("hdfs://master:9000/user/dsf/wordcount_output")

  println("\ntextFile:    "+lines.collect().toBuffer)
  println("flatMap:     "+words.collect().toBuffer)
  println("map:         "+wordAndOne.collect().toBuffer)
  println("reduceByKey: "+reduce.collect().toBuffer)
  println("sortBy:      "+sorted.collect().toBuffer)

  sc.stop()
} 

/**
在Linux终端运行此应用的命令行:
spark-submit \
--master spark://master:7077 \
--class wordcount.WordCount \
sparkcore.jar
*/

如果没有.set("spark.jars", "src/main/resources/sparkcore.jar,")这段代码,它会报这个异常:

Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 6, 192.168.1.15, executor 0): java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.List$SerializationProxy to field org.apache.spark.rdd.RDD.org$apache$spark$rdd$RDD$$dependencies_ of type scala.collection.Seq in instance of org.apache.spark.rdd.MapPartitionsRDD

这是我在Spark官网找到的:

翻译过来是:
spark.jars: 以逗号分隔的本地jar列表,包含在驱动程序和执行程序类路径中。

按照官网的意思,是Driver和Excutor都应该有程序的jar包,可我不明白它的具体原理,哪位好心人给讲解一下,谢谢!

1个回答

设置主函数的位置,给spark-core的jar一个主函数位置。驱动器和执行器中的确有spark-core的核心jar包,但是你手动设置了很多本地设置,可能需要设置设置本地执行主函数的jar包
试着如下设置:图片说明
我平时没有像你那麽设置,我这样的配置也可以,不过需要在打包时设置一下主函数。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

1
spark on yarn 8088界面只有一个程序是Running状态,其他都是ACCEPTED状态
4
spark--java.lang.ArrayIndexOutOfBoundsException: 10582
0
用spark提供的java API写的程序怎么远程提交到集群上运行。
0
webpack4在webpack.base.conf.js配置如下,main.js内容是第二张图片,index.html导入main.js然后报错:
0
pyspark spark2.3.3 hadoop2.7 py4j.protocol.Py4JJavaError
1
flume开启报错java.lang.SecurityException: sealing violation: package org.apache.flume.conf is sealed
0
nginx: [emerg] unknown directive "ngx_fastdfs_module" in /usr/local/nginx/conf/nginx.conf:50
3
运行报错,大佬们帮忙看看什么原因java.util.concurrent.ExecutionException
0
spark在yarn集群上执行client模式代码
2
Ubuntu16.04下可以ping通baidu,但Firefox打不开任何网页
1
spark 读取不到hive metastore 获取不到数据库
1
spring boot 集成spark 初始化spark context 报错,"datanucleus" yet this has not been found
3
Windows中有没有linux上ld.so.conf.d的替代品?
1
java 如何访问远程 linux 服务器下利用docker容器建立的hbase集群
1
mapreduce计算的数据导入mysql出错,导入到本地都ok,哪位路过的大佬能帮忙看下
1
hadoop机架感知不能加载类
2
k8s 集群 The connection to the server localhost:8080 was refused - did you specify the right host or port?
3
tomcat启动后过了几秒钟控制台输出localhost-startStop-1的字样,然后用浏览器访问出现404,请问出现这样的错误是由于localhost-startStop-1引起的吗?
2
请问Linux中:该如何命令?
1
spring-ws发布的webservice默认url是http://xx:xx/xxx.wsdl,不符合常规的http://xx:xx/xxx?wsdl格式,利用urlrewritefilter去做一下转发没有效果