整理下问题集合到简书!从单机版分享出来。
1.只能创建一个SparkContext
Only one SparkContext may be running in this JVM (see SPARK-2243). To ignore this error, set spark.driver.allowMultipleContexts = true. The currently running SparkContext was created at:
问题解决:检查下,是不是创建了两个,包括你得父类,或者本类中创建了多个sc。
2.序列化问题
Caused by: java.io.NotSerializableException: org.apache.spark.SparkContext
Serialization stack:
- object not serializable (class: org.apache.spark.SparkContext, value: org.apache.spark.SparkContext@3f1ed068)
- field (class: com.cfb.bigdata.core.base.BaseJob, name: sc, type: class org.apache.spark.SparkContext)
- object (class com.cfb.bigdata.core.job.WebJobClean, com.cfb.bigdata.core.job.WebJobClean@67514bdd)
1.关于此类问题。首先不用说肯定是序列化问题出了错。首先可能是你在使用map,filter等RDD操作时候因为这是在driver上的操作,所以这些东西不序列化肯定是拿不到的。这是一个问题。
2.第二个可能是你的sparkcontext 在broadcast.value的时候出现,解决方法,就是在你得本class中,重新创建一个val a =broadcast.value,这样的a代替broadcast.value 传入到map或者其他在excutor中操作不会出现问题。
3.其实最好的做法就是把sparkcontext放入一个单独的object中进行使用。你得job只需要引用的时候,直接拿出来,就不会出现这类问题了。一劳永逸。
网友评论