spark性能调优

1.数据序例化
用Kryo序例化代替默认的java序例化,java序例化的优点是灵活,能序例化任何实现了接口java.io.Serializable的类;缺点是执行速度慢,序例化的结果占用字节数大;Kryo序例化速度快,序例化结果占用字节小(一般只有前者的十分之一),缺点是不支持所有可序例化类型并且要求用户注册程序中用到的需要序例化的类型
开启Kryo序例化:
val conf = new SparkConf().setMaster(...).setAppName(...)
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") //这个可以在配置文件做全局配置
conf.registerKryoClasses(Array(classOf[MyClass1], classOf[MyClass2]))
val sc = new SparkContext(conf)


2.并行度
RDD被分为一系列的分区,每个分区是整个数据的一个子集,运行任务时,Spark为每一个分区的数据创建一个任务,一个任务一般需要一个计算核心来执行,并行度过低时出现资源闲置的情况,过高时每个分区产生的间接开销累计起来就会很大。评判并行度是否过高的标准就是任务是否在瞬间(毫秒级)完成的,或者是否观察到任务没有读写任何数据。Spark提供了二种方法来调整并行度,第一种方法是在数据混洗操作时,使用参数的方式为混洗后的RDD指定并行度。第二种方法是对任何已有的RDD进行重新分区来获得更多或者更少的分区数


3.内存管理

序例化RDD存储,用序例化存储级别,比如: StorageLevels.MEMORY_ONLY_SER,Spark将以字节数组的格式存储RDD分区以减少内存的使用垃圾收集调优:通加添加Java选项:-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps,收集垃圾收集的一些统计信息,比如垃圾收集的频繁度和垃圾收集花费的时间来确认相关Java选项设置是否合理。对于堆空间比较大的情况,可以启用G1垃圾收集器-XX:+UseG1GC


美团工程师发的性能优化好文推荐:

http://www.open-open.com/lib/view/open1462201592113.html
http://tech.meituan.com/spark-tuning-pro.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值