当前位置: 首页 > 知识库问答 >
问题:

无法向Kryo注册类

濮君植
2023-03-14

我正在创建一个火花上下文通过使用-

(ns something
  (:require [flambo.conf : conf]
                 [flambo.api :as f]))
(def c (-> (conf/spark-conf)
           (conf/master "spark://formcept008.lan:7077") 
           (conf/app-name "clustering")))  ;; app-name   
(def sc (f/spark-context c))

然后我创建一个RDD-

(f/parallelize sc DATA)

现在,当我对这些数据执行一些操作时,比如(f/take rdd 3)等,我得到了一个错误-

17/11/28 14:35:00错误提示:组织遇到异常。阿帕奇。火花SparkException:未能在org向Kryo注册类。阿帕奇。火花序列化程序。KryoSerializer。newKryo(KryoSerializer.scala:129)位于org。阿帕奇。火花序列化程序。KryoSerializerInstance。在org上借用Kryo(KryoSerializer.scala:274)。阿帕奇。火花序列化程序。KryoSerializerInstance。(KryoSerializer.scala:259)位于org。阿帕奇。火花序列化程序。KryoSerializer。org上的newInstance(KryoSerializer.scala:175)。阿帕奇。火花rdd。ParallelCollectionPartition$$anonfun$readObject$1。在组织上应用$mcV$sp(ParallelCollectionRDD.scala:79)。阿帕奇。火花rdd。ParallelCollectionPartition$$anonfun$readObject$1。在org上应用(ParallelCollectionRDD.scala:70)。阿帕奇。火花rdd。ParallelCollectionPartition$$anonfun$readObject$1。在org上应用(ParallelCollectionRDD.scala:70)。阿帕奇。火花util。Utils$。组织上的tryOrIOException(Utils.scala:1273)。阿帕奇。火花rdd。ParallelCollectionPartition。sun上的readObject(ParallelCollectionRDD.scala:70)。反映NativeMethodAccessorImpl。在sun调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:62)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。lang.reflect。方法在java上调用(Method.java:498)。io。ObjectStreamClass。java上的invokeReadObject(ObjectStreamClass.java:1058)。io。ObjectInputStream。java上的readSerialData(ObjectInputStream.java:1909)。io。ObjectInputStream。java上的readOrdinaryObject(ObjectInputStream.java:1808)。io。ObjectInputStream。java上的readObject0(ObjectInputStream.java:1353)。io。ObjectInputStream。java上的defaultReadFields(ObjectInputStream.java:2018)。io。ObjectInputStream。java上的readSerialData(ObjectInputStream.java:1942)。io。ObjectInputStream。java上的readOrdinaryObject(ObjectInputStream.java:1808)。io。ObjectInputStream。java上的readObject0(ObjectInputStream.java:1353)。io。ObjectInputStream。org上的readObject(ObjectInputStream.java:373)。阿帕奇。火花序列化程序。JavaDeserializationStream。org上的readObject(JavaSerializer.scala:75)。阿帕奇。火花序列化程序。JavaSerializerInstance。在org反序列化(JavaSerializer.scala:114)。阿帕奇。火花执行人。执行人$TaskRunner。在java上运行(Executor.scala:253)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1142)。util。同时发生的ThreadPoolExecutor$工作者。在java上运行(ThreadPoolExecutor.java:617)。lang.Thread。运行(Thread.java:745)的原因:java。lang.ClassNotFoundException:flambo。克鲁约。java的BaseFlamboRegistrator。网URLClassLoader。java上的findClass(URLClassLoader.java:381)。lang.ClassLoader。java上的loadClass(ClassLoader.java:424)。lang.ClassLoader。java上的loadClass(ClassLoader.java:357)。lang.Class。java上的forName0(本机方法)。lang.Class。org上的forName(Class.java:348)。阿帕奇。火花序列化程序。KryoSerializer$$anonfun$newKryo$5。在org上应用(KryoSerializer.scala:124)。阿帕奇。火花序列化程序。KryoSerializer$$anonfun$newKryo$5。在scala处应用(KryoSerializer.scala:124)。收集TraversableLike$$anonfun$映射$1。在scala上应用(TraversableLike.scala:234)。收集TraversableLike$$anonfun$映射$1。在scala上应用(TraversableLike.scala:234)。收集IndexedSeq优化了$类。scala的foreach(IndexedSeqOptimized.scala:33)。收集可变。ArrayOps美元ofRef。福雷赫(scala阵列:186)位于scala。收集TraversableLike$类。在scala处映射(TraversableLike.scala:234)。收集可变。ArrayOps美元ofRef。地图(ArrayOps.scala:186)位于org。阿帕奇。火花序列化程序。KryoSerializer。newKryo(KryoSerializer,scala:124)。。。27更多17/11/28 14:35:00错误执行器:java阶段0.0(TID 0)中任务0.0中出现异常。lang.IllegalStateException:java上的未读块数据。io。ObjectInputStream$BlockDataInputStream。java上的setBlockDataMode(ObjectInputStream.java:2449)。io。ObjectInputStream。java上的readObject0(ObjectInputStream.java:1385)。io。ObjectInputStream。java上的defaultReadFields(ObjectInputStream.java:2018)。io。ObjectInputStream。java上的readSerialData(ObjectInputStream.java:1942)。io。ObjectInputStream。java上的readOrdinaryObject(ObjectInputStream.java:1808)。io。ObjectInputStream。java上的readObject0(ObjectInputStream.java:1353)。io。ObjectInputStream。org上的readObject(ObjectInputStream.java:373)。阿帕奇。火花序列化程序。JavaDeserializationStream。org上的readObject(JavaSerializer.scala:75)。阿帕奇。火花序列化程序。JavaSerializerInstance。在org反序列化(JavaSerializer.scala:114)。阿帕奇。火花执行人。执行者$TaskRunner。在java上运行(Executor.scala:253)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1142)。util。同时发生的ThreadPoolExecutor$工作者。在java上运行(ThreadPoolExecutor.java:617)。lang.Thread。运行(Thread.java:745)

对此有什么想法吗?

共有2个答案

乐正明辉
2023-03-14

已解决。通过使用-

(conf/jars (map #(.getPath % (.getURLs(java.lang.ClassLoader/getSystemClassLoader))))

它将注册所有类。既然这个问题已经解决了,那么就把它关闭吧。

吉玉宸
2023-03-14

flambo似乎不在你的课堂上,这就是为什么你会得到:

<代码>java。lang.ClassNotFoundException:flambo。克鲁约。BaseFlamboreRegistrator

您是从REPL运行它还是使用lein或引导任务?

如果您使用的是leiningen,请检查您的类路径(lein classpath)和依赖关系树(lein deps:tree)

此外,执行lein清理以确保您的目标文件夹不会引起问题也不会有坏处

堆栈跟踪分析:未能向Kryo注册类是由于flambo引起的。克鲁约。缺少BaseFlamboreRegistrator

 类似资料:
  • 我想,问题出在深度嵌套的内部类上。我在登记上做错什么了吗?

  • 我正在尝试将kryo序列化用于: 我一直收到以下错误,说某个类没有注册: 但是,我确实注册了它: 当我设置日志时。TRACE()我得到以下输出: 当跟踪记录器打印出它已注册时,为什么会说它未注册。我找不到关于这件事的任何有用的文件。以前有人经历过这种情况吗?如果有帮助,我正在运行Apache Spark v0.8.1

  • 在将Spark 1.6应用程序移植到Spark 2.0.2的过程中,日志中出现了以下投诉: 此操作失败,原因是:java。lang.ClassNotFoundException:org/apache/spark/streaming/receiver/receiver[]/类 此操作失败,原因是:java。lang.ClassNotFoundException:org/apache/spark/st

  • 我不明白注册一个类用于kryo序列化是什么意思。为了给出一些背景,这里的链接说 Kryo不支持所有可序列化类型,并且要求您预先注册将在程序中使用的类以获得最佳性能。 还是那句话,我不明白注册一个班级的意义是什么?序列化代码不是静态的吗?就是应用相同的逻辑序列化所有类型的对象。在“高级”中提到将要序列化的类会有什么帮助呢? 谢谢!

  • 具有方法: 但是,它在属性提供的facade中不可用/公开 下面是有关RuntimeConfiguration的更多信息: 在创建自己的SparkSession时,有一个明确的解决方法:我们可以调用提供给 然后是一个不太清楚的... 但在运行Spark shell时,已经创建了sparkSession(sparkContext)。那么,如何使非运行时设置生效呢? 这里特别需要: 当尝试在可用于sp

  • 我有一个类,它通过实现中的和方法来实现自定义Kryo序列化程序(请参见下面的示例)。如何用Spark注册此自定义序列化程序? 现在在Spark: 不幸的是,Spark没有给我注册自定义序列化程序的选项。你知道有没有办法做到这一点?