首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark Kryo异常-类未注册: com.google.common.base.Present

是指在使用Spark框架时,使用了Kryo序列化器,并且在序列化和反序列化过程中遇到了com.google.common.base.Present类未注册的异常。

Kryo是一种高效的Java序列化框架,相比Java自带的序列化机制,Kryo能够更快地序列化和反序列化对象。在Spark中,默认使用Kryo作为序列化器,以提高性能。

当遇到类未注册的异常时,意味着Kryo序列化器无法识别或找不到相应的类。在这种情况下,需要注册该类,告诉Kryo如何序列化和反序列化它。

解决这个异常的方法有两种:

  1. 注册类:在Spark应用程序中,可以通过调用SparkConf的registerKryoClasses方法来注册需要序列化的类。例如,如果遇到com.google.common.base.Present类未注册的异常,可以在SparkConf中添加以下代码:
代码语言:txt
复制
SparkConf conf = new SparkConf();
conf.registerKryoClasses(new Class[]{com.google.common.base.Present.class});
  1. 注册类的序列化器:如果无法修改Spark应用程序的代码或者需要注册的类较多,可以通过实现Kryo的注册器接口来注册类的序列化器。首先,创建一个实现KryoRegistrator接口的类,然后在SparkConf中设置该类。例如:
代码语言:txt
复制
public class MyKryoRegistrator implements KryoRegistrator {
    public void registerClasses(Kryo kryo) {
        kryo.register(com.google.common.base.Present.class);
    }
}

SparkConf conf = new SparkConf();
conf.set("spark.kryo.registrator", "com.example.MyKryoRegistrator");

以上两种方法都可以解决Spark Kryo异常-类未注册: com.google.common.base.Present的问题。

关于Spark和Kryo的更多信息,您可以参考腾讯云的产品文档和官方网站:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

聊聊storm tuple的序列化

kryo找不到配置的要序列化的class对应serializers的时候,是抛出异常还是直接跳过注册; 最后通过Config.TOPOLOGY_KRYO_DECORATORS(topology.kryo.decorators...,还有未注册,会调用这里的writeClass方法),从代码可以看到如果是NAME,则使用的是writeName;不是NAME的则直接使用output.writeVarInt(registration.getId...的场景下,如果storm加载不到用户自定义的IKryoDecorator时是skip还是抛异常 Kryo的registrationRequired为false的话,则会自动对未注册的class进行隐式注册...会被reset,因而隐式注册在非第一次遇到未注册的class的时候并不能一直走使用id代替className来序列化 doc Serialization Spark调优之Data Serialization...Spark 2.0.2, double[], 使用Kyro序列化加速,和手动注册

34840

聊聊storm tuple的序列化

kryo找不到配置的要序列化的class对应serializers的时候,是抛出异常还是直接跳过注册; 最后通过Config.TOPOLOGY_KRYO_DECORATORS(topology.kryo.decorators...,还有未注册,会调用这里的writeClass方法),从代码可以看到如果是NAME,则使用的是writeName;不是NAME的则直接使用output.writeVarInt(registration.getId...的场景下,如果storm加载不到用户自定义的IKryoDecorator时是skip还是抛异常 Kryo的registrationRequired为false的话,则会自动对未注册的class进行隐式注册...会被reset,因而隐式注册在非第一次遇到未注册的class的时候并不能一直走使用id代替className来序列化 doc Serialization Spark调优之Data Serialization...Spark 2.0.2, double[], 使用Kyro序列化加速,和手动注册

68420

Apache Flink在小米的发展和应用

Flink 作业异常日志的收集展示: ?...不过这里不得不提的一点是,Spark Streaming 的“调度计算”模式,对于处理计算系统中的“慢节点”或“异常节点”有天然的优势。...比如如果 Yarn 集群中有一台节点磁盘存在异常,导致计算不停地失败,Spark 可以通过 blacklist 机制停止调度计算到该节点,从而保证整个作业的稳定性。...相比于 Java 原生序列化方式,无论是在序列化效率还是序列化结果的内存占用上,Kryo 则更好一些(Spark 声称一般 Kryo 会比 Java 原生节省 10x 内存占用);Spark 文档中表示它们之所以没有把...Kryo 设置为默认序列化框架的唯一原因是因为 Kryo 需要用户自己注册需要序列化的,并且建议用户通过配置开启 Kryo

98330

Spark程序开发调优(后续)

因为单次函数调用就要处理掉一个 partition 所有的数据,如果内存不够,垃圾回收时是无法回收掉太多对象的,很可能出现 OOM 异常。所以使用这类操作时要慎重!...原则八:使用 Kryo 优化序列化性能 在 Spark 中,主要有三个地方涉及到了序列化: 1、在算子函数中使用到外部变量时,该变量会被序列化后进行网络传输(见“原则七:广播大变量”中的讲解)。...对于这三种出现序列化的地方,我们都可以通过使用 Kryo 序列化库,来优化序列化和 反 序 列 化 的 性 能 。...但是 Spark 同时支持使用 Kryo 序列化库,Kryo 序列化库的性能比 Java 序列化库的性能要高很多。官方介绍,Kryo 序列化机制比 Java 序列化机制,性能高 10 倍左右。...Spark 之所以默认没有使用 Kryo 作为序列化库,是因为 Kryo 要求最好要注册所有需要进行序列化的自定义类型,因此对于开发者来说,这种方式比较麻烦。

76720

深入浅出序列化(2)——Kryo序列化

在使用 Kryo 之前,我们需要引入相应的依赖 基本使用如下所示 Kryo 会自动执行序列化。Output 和 Input 负责处理缓冲字节,并写入到流中。...Kryo 的注册 和很多其他的序列化框架一样,Kryo 为了提供性能和减小序列化结果体积,提供注册的序列化对象的方式。...在注册时,会为该序列化生成 int ID,后续在序列化时使用 int ID 唯一标识该类型。注册的方式如下: 或者 可以明确指定注册的 int ID,但是该 ID 必须大于等于 0。...创建完 Kryo 池后,使用 kryo 就变得异常简单了,只需调用 kryoPool.obtain() 方法即可,使用完毕后再调用 kryoPool.free(kryo) 归还对象,就完成了一次完整的租赁使用...[1] Apache Fluo: https://fluo.apache.org/ [2] Apache Hive: http://hive.apache.org/ [3] Apache Spark:

1.2K40

Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优

此外,可能发生的问题同上,如果RDD中的数据量过多的话,还是可能会导致OOM内存溢出的异常。...Kryo序列化器介绍:   Spark支持使用Kryo序列化机制。Kryo序列化机制,比默认的Java序列化机制,速度要快,序列化后的数据要更小,大概是Java序列化机制的1/10。...对于这三种出现序列化的地方,我们都可以通过使用Kryo序列化库,来优化序列化和反序列化的性能。...但是Spark同时支持使用Kryo序列化库,Kryo序列化库的性能比Java序列化库的性能要高很多。官方介绍,Kryo序列化机制比Java序列化机制,性能高10倍左右。...Spark之所以默认没有使用Kryo作为序列化库,是因为Kryo要求最好要注册所有需要进行序列化的自定义类型,因此对于开发者来说,这种方式比较麻烦。

1.2K30

RDD序列化

spark默认使用的是Java序列化 java序列化: 会序列化对象包的信息、属性的类型信息、继承信息等 Kryo序列化: 只序列化基础的信息 Kryo序列化整体性能要比java序列化高10倍左右 spark...") 注册待序列化的[可选]: registerKryoClasses(Array(classOf[Dog])) 注册与不注册的区别: 注册后的在后续kryo序列化的时候,不会序列化包的信息 没有注册的话后续在...---- 上面介绍了,spark默认是使用java的序列化方式,如何在spark中使用Kryo的序列化方式呢? 我们从spark官网上进行查看相关配置。...kryo序列化,也可以进行多个注册.registerKryoClasses(Array(classOf[Student],...))...注册与不注册的区别: 注册后的在后续kryo序列化的时候,不会序列化包的信息 没有注册的话后续在kryo序列化的时候,会序列化包的信息 在spark每个算子都会进行一次闭包检查和处理 如:map算子

46420

Spark调优系列之序列化方式调优

2.Kryo serialization:Spark也可以用 Kryo library (version 2) 来加速序列化。...Kryo比java序列化更快,更紧凑(往往搞出10倍),但是并不支持所有的序列化类型,为了达到最佳的性能需要提前注册你在你的程序中使用的。...Kryo不是默认序列化方式的主要原因是需要自定义注册。我们建议使用它在任何网络密集型应用程序中。 Spark会自动的包括Kryo,针对大多数通用的scala。...向Kryo注册你的,可以通过registerKryoClasses 方法 val conf = new SparkConf().setMaster(...).setAppName(...) conf.registerKryoClasses...最后,如果不向Kyro注册你的自定义类型,Kyro也会继续工作,但是他会保存你每个对象的全名,这非常浪费。 关于spark对Kyro的配置的支持,请参考。

92590

Spark性能调优篇四之使用Kryo进行序列化操作

Kryo方式的序列化:Spark支持了Kryo序列化库,采用Kryo对数据进行序列化操作可以大大降低数据体积,官方给出的数据是采用Kryo进行序列化比采用Java默认的序列化方式,性能高出后者10倍(...在使用Kryo之前,我们需要明白在那些地方可以充分发挥Kryo序列化的作用;否则,即使启动了该功能,但并不能提升Spark作业的运行速度。...其实很简单,通过使用JavaSparkContext对象启用Kryo对数据进行序列化 sc.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer...进行数据的序列化是不是很简单;本片文章内容较短,在Spark项目中使用这个特性进行作业的优化也能够提升一定的效率。...本文到这里基本接近尾声,后续还会不断更新关于Spark作业优化的一些其他方式,欢迎关注。 如需转载,请注明: z小赵 Spark性能调优篇四之使用Kryo进行序列化操作

1.6K30

人人都在用的Spakr调优指南

注意,这种方法,一定要确保电脑的内存能够承受测试的数据,不然会报出oom异常。 通过以上的简介,大概知道了内存的消耗和如何查看消耗的内存了。...") 对需要序列化的自行进行注册(因为如果不注册,Kryo必须一直保存类型的全限定名,会占用内存。...Spark默认是对Scala中常用的类型自动注册了Kryo的,都在AllScalaRegistry中) Scala版本: val conf = new SparkConf().setMaster(.....虽然不注册自定义类型,Kryo库也能正常工作,但是那样对于它要序列化的每个对象,都会保存一份它的全限定名。反而会耗费大量内存。因此通常都预先注册好要序列化的自定义的。...熟悉Java语言的都知道集合一般是泛型的,然鹅泛型的类型是包装,比如List list = new ArrayList(),就会因为包装而占有额外的内存,最后占有更多的额外开销。

44020

Spark Core快速入门系列(5) | RDD 中函数的传递

3. kryo 序列化框架 参考地址: https://github.com/EsotericSoftware/kryo ?   Java 的序列化比较重, 能够序列化任何的....Spark 出于性能的考虑, 支持另外一种序列化机制: kryo (2.0开始支持). kryo 比较快和简洁.(速度是Serializable的10倍)....从2.0开始, Spark 内部已经在使用 kryo 序列化机制: 当 RDD 在 Shuffle数据的时候, 简单数据类型, 简单数据类型的数组和字符串类型已经在使用 kryo 来序列化.   ...有一点需要注意的是: 即使使用 kryo 序列化, 也要继承 Serializable 接口. 1.代码案例 package day03 import org.apache.spark.rdd.RDD...", "org.apache.spark.serializer.KryoSerializer") // 注册需要使用 kryo 序列化的自定义 .registerKryoClasses

64910

Spark调优

(2)Spark还支持这种方式Kryo serialization,它的速度快,而且压缩比高于Java的序列化,但是它不支持所有的Serializable格式,并且需要在程序里面注册。...它需要在实例化SparkContext之前进行注册,下面是它的使用例子: import com.esotericsoftware.kryo.Kryo import org.apache.spark.serializer.KryoRegistrator...("spark.kryo.registrator", "mypackage.MyRegistrator") val sc = new SparkContext(...)...3)普通的容器,比如HashMap和LinkedList,它们采用的是链式的数据结构,它需要封装每个实体,不仅需要头信息,还要有个指针指向下一个实体。...rdd_0_1 in memory on mbk.local:50311 (size: 717.5 KB, free: 332.3 MB) (2)数据结构调优   1) 优先使用数组和原生类型来替代容器

1.1K80

Spark性能优化 (1) | 常规性能调优

Kryo 序列化 默认情况下,Spark 使用 Java 的序列化机制。...Kryo序列化机制比Java序列化机制性能提高10倍左右,Spark之所以没有默认使用Kryo作为序列化库,是因为它不支持所有对象的序列化,同时Kryo需要用户在使用前注册需要序列化的类型,不够方便,...但从Spark 2.0.0版本开始,简单类型、简单类型数组、字符串类型的Shuffling RDDs 已经默认使用Kryo序列化方式了。...setMaster(…).setAppName(…) //使用Kryo序列化库,如果要使用Java序列化库,需要把该行屏蔽掉 conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer..."); //在Kryo序列化库中注册自定义的集合,如果要使用Java序列化库,需要把该行屏蔽掉 conf.set("spark.kryo.registrator", "buwenbuhuo.com.MyKryoRegistrator

57610

我说Java基础重要,你不信?来试试这几个问题

Java序列化是灵活的,但通常相当慢,并且会导致许多的大型序列化格式。 Kryo serialization Spark还可以使用Kryo库(版本2)来更快地序列化对象。...Kryo比Java串行化(通常多达10倍)要快得多,也更紧凑,但是不支持所有可串行化类型,并且要求您提前注册您将在程序中使用的,以获得最佳性能 Kryo serialization 性能和序列化大小都比默认提供的...Java serialization 要好,但是使用Kryo需要将自定义的先注册进去,使用起来比Java serialization麻烦。...自从Spark 2.0.0以来,我们在使用简单类型、简单类型数组或字符串类型的简单类型来调整RDDs时,在内部使用Kryo序列化器。 Java中的反射了解吧?...Spark SQL的Scala接口支持自动将包含样例( case class对象的RDD转换为DataFrame对象。

74030

Spark踩坑记:Spark Streaming+kafka应用及调优

是一个通用,而KafkaCluster是kafka源码中的一个,由于包名权限的原因我把它单独提出来,ComsumerMain简单展示了通用的使用方法,在每次创建KafkaStream时,都会先从zooker...对于这三种出现序列化的地方,我们都可以通过使用Kryo序列化库,来优化序列化和反序列化的性能。...但是Spark同时支持使用Kryo序列化库,Kryo序列化库的性能比Java序列化库的性能要高很多。官方介绍,Kryo序列化机制比Java序列化机制,性能高10倍左右。...Spark之所以默认没有使用Kryo作为序列化库,是因为Kryo要求最好要注册所有需要进行序列化的自定义类型,因此对于开发者来说,这种方式比较麻烦。...以下是使用Kryo的代码示例,我们只要设置序列化,再注册要序列化的自定义类型即可(比如算子函数中使用到的外部变量类型、作为RDD泛型类型的自定义类型等): 结果 经过种种调试优化,我们最终要达到的目的是

74550
领券