[转]一些spark调优的经验
来源:互联网 发布:面对困难迎难而上 知乎 编辑:程序博客网 时间:2024/05/21 10:15
调优的经验总结
1 输出信息
在Spark应用里面可以直接使用System.out.println把信息输出出来,系统会直接拦截out输出到spark的日志。像我们使用的yarn作为资源管理系统,在yarn的日志中就可以直接看到这些输出信息了。这在数据量很大的时候,做一些show()(默认显示20),count() 或者 take(10)的时候会很方便。
2 内存不够
当任务失败,收到sparkContext shutdown的信息时,基本都是执行者的内存不够。这个时候,一方面可以调大--excutor-memory参数,另一方面还是得回去看看程序。如果受限于系统的硬件条件,无法加大内存,可以采用局部调试法,检查是在哪里出现的内存问题。比如,你的程序分成几个步骤,一步一步的打包运行,最后检查出现问题的点就可以了。
3 ThreadPool
线程池不够,这个是因为--excutor-core给的太少了,出现线程池不够用的情况。这个时候就需要调整参数的配置了。
4 physical memory不够
这种问题一般是driver memory不够导致的,driver memory通常存储了以一些调度方面的信息,这种情况很有可能是你的调度过于复杂,或者是内部死循环导致。
5 合理利用缓存
在Spark的计算中,不太建议直接使用cache,万一cache的量很大,可能导致内存溢出。可以采用persist的方式,指定缓存的级别为MEMORY_AND_DISK,这样在内存不够的时候,可以把数据缓存到磁盘上。另外,要合理的设计代码,恰当地使用广播和缓存,广播的数据量太大会对传输带来压力,缓存过多未及时释放,也会导致内存占用。一般来说,你的代码在需要重复使用某一个rdd的时候,才需要考虑进行缓存,并且在不使用的时候,要及时unpersist释放。
6 尽量避免shuffle
这个点,在优化的过程中是很重要的。比如你需要把两个rdd按照某个key进行groupby,然后在进行leftouterjoin,这个时候一定要考虑大小表的问题。如果把大表关联到小表,那么性能很可能会很惨。而只需要简单的调换一下位置,性能就可能提升好几倍。
原文链接:
http://www.cnblogs.com/xing901022/p/6445254.html
- [转]一些spark调优的经验
- spark调优经验(待续)
- spark 调优经验(续二)
- spark调优经验(待续)
- spark调优经验(待续)
- 关于ACM调错误的一些经验
- OgreMax的一些使用经验[转]
- 自己转C++的一些经验
- Zookeeper运维的一些经验[转]
- RR的一些经验
- HttpServer的一些经验
- Ncverilog 的一些经验
- 安全的一些经验
- 一些小小的经验
- 系统分析的一些经验
- 一些系统分析的经验
- 一些系统分析的经验
- 一些printf的经验
- android canvas
- CloudSim Network源码概述(持续更新...)
- NIO+Netty5各种RPC架构实战演练
- mutex 和 semaphore
- 怎么使用Vegas制作霓虹灯效果?
- [转]一些spark调优的经验
- 【牛客网】电话号码分身
- 第十周项目1
- 凯哥自媒体:3种必备的自媒体赚钱能力
- ms sql语句如何查到 一个字段中 特定字符的出现次数
- Xcode-关于切换窗口的快捷键
- ViewRootImpl、Surface、SurfaceFlinger简介
- Spark项目:知名手机厂商用户行为实时分析系统
- linux下boost的一个扩展线程池-threadpool-的学习