小乙shine 2018-10-14 09:18 采纳率: 50%
浏览 3710

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条回答

  • huwao 2018-10-15 03:25
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站