Spark工作陷入本地模式

时间:2018-03-15 20:40:18

标签: apache-spark

我正面临着一个问题,即当我在IntelliJ创意中运行时,我的火花工作卡在本地。我的工作一直持续到完成200个工作岗位中的199个或完成3个任务中的1个并且卡在那里。

我试着在IDE中使用evaluate表达式查看发生了什么,并注意到一个奇怪的问题。如果我正在使用myDf.rdd.map(r => r).cache()我得到了

java.io.IOException: Class not found
at org.apache.xbean.asm5.ClassReader.a(Unknown Source)
at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
at org.apache.spark.util.ClosureCleaner$.getClassReader(ClosureCleaner.scala:40)
at org.apache.spark.util.ClosureCleaner$.getInnerClosureClasses(ClosureCleaner.scala:81)
at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:187)
at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:122)
at org.apache.spark.SparkContext.clean(SparkContext.scala:2067)
at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:324)
at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:323)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:111)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:316)
at org.apache.spark.rdd.RDD.map(RDD.scala:323)
at org.apache.spark.sql.DataFrame.map(DataFrame.scala:1410)
at com.marin.jobcoordinator.spark.extractor.PoExtractorBase$GeneratedEvaluatorClass$18$1.invoke(FileToCompile.scala:66)

同时,如果我使用myDf.rdd.collect,我没有看到这个问题。我也可以毫无问题地调用myDf.show。只是当我使用具有匿名身份功能的地图功能时,我正面临着这个问题。从异常中,我得到的是火花试图加载匿名函数的类并出错?看起来很奇怪。

我正在使用spark版本1.6.0

谢谢,

斯利拉姆

1 个答案:

答案 0 :(得分:0)

对于您的第一个问题,完成199个任务然后陷入最后一个问题,大部分时间这都是一个偏差问题:您的数据被严重分区。在进行可疑操作之前计算the number of elements for each partition并打印它可能会给你一个提示。事先对数据进行重新分区和过滤(如果可能)可以提供帮助。

同样使用200个分区意味着您(很可能)在数据被洗牌时使用默认分区数。有关详细信息,请参阅此post。您可以尝试更改它以适应计算机上的核心数量。

对于你的第二个问题,对不起,我帮不了你。