[Spark]-调优

1.序列化调优

  序列化在任何分布式应用程序的性能中起着重要的作用。 缓慢的对象序列化过程或消费大量字节的格式都将会大大减慢计算速度

  Spark 宗旨在于方便(允许您使用操作中的任何 Java 类型)和性能(速度与消耗更少的资源)之间.Spark 提供了 Java , Kryo 两种序列化库

  1.1 Java serialization

      Spark默认使用Java内置的序列化器.它非常方便灵活,支持几乎所有的类型.但速度相对缓慢,且对某些对象会产生大型序列化格式

   1.2 Kryo serialization

     Spark 也内置了 Kryo 库(Kryo2)来更快地对对象进行序列化.Kryo 比 Java 序列化(通常10x)要快得多,而且更紧凑,只是需要先注册将在程序中使用的类.

     1.2.1 Kryo简介

      Kryo 是一个快速序列化/反序列化工具,其使用了字节码生成机制(底层依赖了 ASM 库),因此具有比较好的运行速度

      Kryo 序列化出来的结果,是其自定义的、独有的一种二进制的格式,不是 JSON 或者其他现有的通用格式.所以其体积更小

      Kryo 一般只用来进行序列化(然后作为缓存,或者落地到存储设备之中)、反序列化,而不用于在分布式系统或者多种语言间进行数据交换

      Kryo 支持常见的 JDK 类型,这些类型组合而来的普通 POJO,枚举,任意 Collention,子类/多态,内部类,泛型等

      Kryo 不支持 增加或删除对象中的字段(比如某个 Bean 使用 Kryo 序列化后缓存,之后新增或删除某个字段再反序列化缓存,此时Kryo会报错)

      1.2.2 Spark 使用 Kryo

      conf.registerKryoClasses(Array(classOf[MyClass1], classOf[MyClass2]))

      注: 如果没有在Kryo对类进行注册,它依然可以使用,但它必须存储每个对象的完整类名称,这会造成存储空间的浪费

2.内存调优

猜你喜欢

转载自www.cnblogs.com/NightPxy/p/9314883.html