Spark不常用的参数调节
来源:互联网 发布:sql删除一个列 编辑:程序博客网 时间:2024/05/16 01:44
内容基本都来自:http://spark.apache.org/docs/1.0.2/tuning.html,自己随手记下来点东西。
数据序列化
对于分布式框架来说,牵扯到数据传输的问题,故序列化问题非常重要。
在spark中,默认采用的是java的序列化(java.io.Serializable),此种序列化的效率较低。建议采用Kryo serialization的序列化方法,但是此种方法的不足之处在于,如果你自己编写了一个类,需要继承自org.apache.spark.serializer.KryoRegistrator才可以。但是这种代价是可以承受的,因为此种序列化方式压缩率高、速度快。综上,其范例代码如下:
import com.esotericsoftware.kryo.Kryoimport org.apache.spark.serializer.KryoRegistratorclass MyRegistrator extends KryoRegistrator { override def registerClasses(kryo: Kryo) { kryo.register(classOf[MyClass1]) kryo.register(classOf[MyClass2]) }}val conf = new SparkConf().setMaster(...).setAppName(...)conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")conf.set("spark.kryo.registrator", "mypackage.MyRegistrator")val sc = new SparkContext(conf)
另外一点,当Kryo序列化工作时,需要一个缓冲空间,默认为2Mb,当你的定制类特别大时(假设存了一整张图),则需要改变这个默认参数(spark.kryoserializer.buffer.mb),使这个缓冲区能够容纳下任意的定制类,不会发生溢出问题。
内存
内存消耗主要分为三个部分:
实际数据结构占用的空间、访问这个数据结构所需要的空间、垃圾回收所需要的空间。
默认情况下,我们是可以较快的访问java对象的,但这是一定量的额外空间消耗做到的。
- 确定你本身数据结构的空间消耗
这部分空间是无法减少的,每当你产生一个RDD时,会看到如下信息:
INFO BlockManagerMasterActor: Added rdd_0_1 in memory on mbk.local:50311 (size: 717.5 KB, free: 332.3 MB)
这表示在分区1的rdd 0消耗了717.5KB
2. 调整你的数据结构
a、官方建议把java原生的set容器之类的用fastutil的实现版本,据说这个版本的内存消耗更小。
b、避免你的数据结构太过于零散
c、如果你的内存机器小雨32GB,可以在JVM中添加命令-xx:+UseCompressedOops命令,把原本8位的对象指针压缩为4位。
d、少用string当做key,除非你不得不这么做。。
- 其他
其他几种方法觉得略不实用,感兴趣的可以去原文看下。
Thanks
- Spark不常用的参数调节
- Spark不常用的参数调节
- Spark内存参数调节
- 深度学习中常用的调节参数
- 深度学习中常用的调节参数
- DBScan的参数调节
- spark-submit常用参数
- PID调节参数的作用
- PID参数的如何设定调节
- PID调节三个参数的作用
- 深度学习中训练参数的调节
- eclipse 常用调节页面的方法
- 调节web 程序常用的方法
- oracle ASM kfod 不太常用的几个参数
- VC不常用编译器参数
- Hadoop与Spark常用配置参数总结
- Hadoop与Spark常用配置参数总结
- Hadoop与Spark常用配置参数总结
- 螈袅蒃葿袇膇蒅薅蚄肆莈薁
- 膀肁莀螁肆膁蒃羆羂膀薅蝿
- 肈膃薂蚇袇膅蚈螆腿膈螄羅
- 膁莀莈蚃膀肀薃蕿螇膂莆蒅
- 肁蒀薅螅肃膃蚄蚅肆艿蒁袇
- Spark不常用的参数调节
- 蒁葿螄膁膁蚄蚀膀芃蒇罿膀
- STM32的CAN总线过滤器的配置
- 羂莀蚀羈肈膇蕿袁肄莅荿袃
- 螃肈薅薅羈肄薄蚇袁莃薄蝿
- Notification使用实例
- 虿罿芇螀袈膁膀莃薄肁膂葿
- 数据库三大范式详解
- 螂腿薁蚂肀膈芀蒄羆芇莃蚀