首页
学习
活动
专区
圈层
工具
发布

聊聊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序列化加速,和手动注册类名

92420

聊聊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序列化加速,和手动注册类名

54240
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Apache Flink在小米的发展和应用

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

    1.3K30

    Spark程序开发调优(后续)

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

    1.1K20

    深入浅出序列化(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:

    2.9K40

    【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要求最好要注册所有需要进行序列化的自定义类型,因此对于开发者来说,这种方式比较麻烦。

    2.3K30

    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算子

    83920

    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的配置的支持,请参考。

    1.2K90

    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进行序列化操作

    2K30

    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

    1K10

    人人都在用的Spakr调优指南

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

    79520

    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.4K80

    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

    1.1K10

    我说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对象。

    1K30

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

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

    1.2K50
    领券