spark 调优(官方文档)

1.序列化
对象在进行网络传输或进行持久化时需要进行序列化,如果采用序列化慢或者消耗大量字节的序列化格式,则会拖慢计算。
spark 提供了两种序列化类库
灵活,但是很慢
比java 快10倍,紧凑,不支持所有 Serializable类型,使用方法
a.在saprkconf 中设置序列化的类
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer").
b.可选
设置spark.kryo.registrationRequired 为true, 则必须显示声明需要序列化的类,否则会报错
sconf.set("spark.kryo.registrationRequired","true")
sconf.registerKryoClasses(Array(
classOf[NullWritable],
classOf[Array[String]])
)
 
如果序列化的对象较大,可以调整  spark.kryoserializer.buffer (默认6k)。如果不注册需要序列化的类,则序列化时会保存类的全称,比惨耗内存
 
2.内存优化
Java对象访问速度很快,但与其字段中的“原始”数据相比,可以轻松占用2-5倍的空间。缩小内存的方法
1)尽量使用array[object] 和基本类型,避免使用 hashmap 等标准集合
2)尽量避免使用包含大量小对象和指针的嵌套结构
3)rdd 缓存时尽量使用序列化格式,比如 MEMORY_ONLY_SER,
4)gc 调优?
 
3.资源允许的情况下增加任务的并行度,充分利用集群资源
4..提高reduceByKey,groupByKey 等shuffle 操作的并行度,以降低每个task 处理的数据量,减少oom
5.大的变量 进行broadcast
6.

猜你喜欢

转载自www.cnblogs.com/jason-dong/p/10035855.html