scala - 一些 RDD 操作因 Java IllegalArgumentException 而失败
问题描述
出于某种原因,在对任何类型的 RDD 执行某些(但不是全部)RDD 操作时,会抛出 Java IllegalArgumentException: Unsupported class file major version x。奇怪的是,这只会影响某些操作(例如,收集、获取、首先等),而不影响其他操作(例如,样本、takeOrdered 等)。有什么想法吗?
安装的 Spark 版本是 2.4.3,我已将 JDK/JRE 从 11 升级到 12,以防万一。
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.3
/_/
Using Scala version 2.11.12 (OpenJDK 64-Bit Server VM, Java 12.0.1)
以前的版本抛出“Unsupported class file major version 55”,现在与升级版本相同,但版本为 56(因此升级明显成功,但未解决问题)。
这是一个非常简单的 RDD 创建的输出,显示 RDD 正在执行某些操作:
val seqNum = sc.parallelize(0 to 1000)
seqNum: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[37] at
parallelize at <console>:24
seqNum.count
res30: Long = 1001
seqNum.sample(false, 0.01).foreach(println)
355
385
392
402
505
569
585
因此,RDD 已创建并按其应有的方式工作。以下是使用完全相同的 RDD 和 take 操作时会发生的情况:
seqNum.take(10).foreach(println)
java.lang.IllegalArgumentException: Unsupported class file major version 56
at org.apache.xbean.asm6.ClassReader.<init>(ClassReader.java:166)
at org.apache.xbean.asm6.ClassReader.<init>(ClassReader.java:148)
at org.apache.xbean.asm6.ClassReader.<init>(ClassReader.java:136)
at org.apache.xbean.asm6.ClassReader.<init>(ClassReader.java:237)
at org.apache.spark.util.ClosureCleaner$.getClassReader(ClosureCleaner.scala:49)
at org.apache.spark.util.FieldAccessFinder$$anon$3$$anonfun$visitMethodInsn$2.apply(ClosureCleaner.scala:517)
at org.apache.spark.util.FieldAccessFinder$$anon$3$$anonfun$visitMethodInsn$2.apply(ClosureCleaner.scala:500)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733)
at scala.collection.mutable.HashMap$$anon$1$$anonfun$foreach$2.apply(HashMap.scala:134)
at scala.collection.mutable.HashMap$$anon$1$$anonfun$foreach$2.apply(HashMap.scala:134)
at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:236)
at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40)
at scala.collection.mutable.HashMap$$anon$1.foreach(HashMap.scala:134)
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
at org.apache.spark.util.FieldAccessFinder$$anon$3.visitMethodInsn(ClosureCleaner.scala:500)
at org.apache.xbean.asm6.ClassReader.readCode(ClassReader.java:2175)
at org.apache.xbean.asm6.ClassReader.readMethod(ClassReader.java:1238)
at org.apache.xbean.asm6.ClassReader.accept(ClassReader.java:631)
at org.apache.xbean.asm6.ClassReader.accept(ClassReader.java:355)
at org.apache.spark.util.ClosureCleaner$$anonfun$org$apache$spark$util$ClosureCleaner$$clean$14.apply(ClosureCleaner.scala:307)
at org.apache.spark.util.ClosureCleaner$$anonfun$org$apache$spark$util$ClosureCleaner$$clean$14.apply(ClosureCleaner.scala:306)
at scala.collection.immutable.List.foreach(List.scala:392)
at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:306)
at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:162)
at org.apache.spark.SparkContext.clean(SparkContext.scala:2326)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:2100)
at org.apache.spark.rdd.RDD$$anonfun$take$1.apply(RDD.scala:1364)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:363)
at org.apache.spark.rdd.RDD.take(RDD.scala:1337)
... 49 elided</code>
由于 RDD 已正确创建并且某些操作有效,因此我希望所有操作都有效 - 知道问题是什么吗?
解决方案
看起来 Spark 2.4 目前不支持 Java 10/11。检查相同的 Jira 链接 https://issues.apache.org/jira/browse/SPARK-24417 为确保作业运行正常,您可能需要使用 JDK 8
推荐阅读
- terraform - Terraform:将var传递给函数
- java - 在java中编译文件
- delphi - EDoubleFree 错误罕见异常的原因有哪些?
- azure - 使用 ARM 模板部署在 Azure Front Door 自定义域上启用 HTTPS
- python - 哪个是更好的解决方案?(异常处理)
- javascript - 如何从父组件调用子组件方法
- verification - Multiset 仅使用一个元素数组进行验证
- excel - 使用 VBA 密码保护进行保存时出现错误消息“运行时错误‘1004’:对象‘_Workbook’的方法‘SaveAs’失败”
- java - Java Biginteger 在 pow 中的最大值
- kubernetes - 使用 Rancher 设置本地 kubectl