1 使用序列化的持久化级别
- 处理对多次使用的 RDD 进行持久化操作之外,还可以进一步优化其性能。因为很可能,RDD 的数据时持久化到内存,或者磁盘中的。那么,此时如果内存大小不是特别充足,完全可以使用序列化的持久化级别,比如
MEMORY_ONLY_SER,MEMORY_AND_DISK_SER等。使用RDD.persist(StorageLevel.MEMORY_ONLY_SER) - 这样的话,将数据序列化之后,再持久化,可以大大减少对内存的消耗。此时,如果数据量小了之后,如果要写入磁盘,那么磁盘IO 性能消耗也比较小。
- 对 RDD 持久化序列化之后,RDD 的每个 partition 的数据,都是序列化为一个巨大的字节数组。这样,对于内存消耗就小了,但是唯一缺点就是,获取 RDD 数据时,需要对其进行反序列化,会增大其性能开销;
- 因此,对于序列化的持久化级别,还可以进一步优化,也就是使用
Kryo序列化类库,这样可以获得更快的序列化速度,并且占用更少的内存空间。但是,如果RDD 的元素,是自定义类型的话,在 Kryo 中提前注册自定义类型
最后
以上就是炙热帆布鞋最近收集整理的关于Spark性能优化(5)—— 使用序列化的持久化级别1 使用序列化的持久化级别的全部内容,更多相关Spark性能优化(5)——内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复