天天看点

Spark官方性能调优指南数据序列化

本文根据官方性能优化指南和自身经验总结。

官方性能优化指南链接:http://spark.apache.org/docs/1.6.0/tuning.html

tunnig:名词,调谐;调整;调音。(music) calibrating something (an instrument or electronic circuit) to a standard frequency

鉴于Spark基于内存计算这一天性,以下集群资源可能会造成Spark程序的瓶颈:CPU,带宽和内存。通常情况下,如果内存足够的情况下,瓶颈只可能出现在网络带宽方面;但有时,你也需要做一些例如序列化优化来降低内存使用率。这份指导主要集中于两方面:数据序列化,这是充分提升网络表现和降低内存消耗、内存优化的关键;我们也会简要阐述一些小技巧。

数据序列化

序列化在任何分布式应用的运行中扮演了重要的角色。采用那些序列化慢的格式、或者消费巨量字节时将会严重拖慢计算效率。通常情况下,调整数据的序列化方式是你优化Spark程序时首先需要做的事。Spark程序试图在简洁(循序你在代码中使用任何Java的数据类型)和效率之间取得一种平衡。Spark提供了两种序列化库。

  • Java serialization:默认情况下,Spark序列话一个对象时使用Java自带的 ObjectOutputStream框架,对于任何实现了java.io.Serializable接口的类都有效。有也可以通过继承java.io.Externalizable来自定义你的序列化过程。Java serialization是灵活的,但通常相当缓慢并且导致很多类的序列化格式很臃肿。
  • Kryo serializ

继续阅读