您的位置:首页 > 其它

spark性能调优

2016-10-08 16:53 169 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark