Spark性能优化(5)—— 使用序列化的持久化级别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/86260711

1 使用序列化的持久化级别

  • 处理对多次使用的 RDD 进行持久化操作之外,还可以进一步优化其性能。因为很可能,RDD 的数据时持久化到内存,或者磁盘中的。那么,此时如果内存大小不是特别充足,完全可以使用序列化的持久化级别,比如 MEMORY_ONLY_SER,MEMORY_AND_DISK_SER等。使用 RDD.persist(StorageLevel.MEMORY_ONLY_SER)
  • 这样的话,将数据序列化之后,再持久化,可以大大减少对内存的消耗。此时,如果数据量小了之后,如果要写入磁盘,那么磁盘IO 性能消耗也比较小。
  • 对 RDD 持久化序列化之后,RDD 的每个 partition 的数据,都是序列化为一个巨大的字节数组。这样,对于内存消耗就小了,但是唯一缺点就是,获取 RDD 数据时,需要对其进行反序列化,会增大其性能开销;
  • 因此,对于序列化的持久化级别,还可以进一步优化,也就是使用 Kryo 序列化类库,这样可以获得更快的序列化速度,并且占用更少的内存空间。但是,如果RDD 的元素,是自定义类型的话,在 Kryo 中提前注册自定义类型

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/86260711
今日推荐