Spark调优之Tuning Spark(Part 2)
来源:互联网 发布:linux pl文件 编辑:程序博客网 时间:2024/05/21 10:46
概述
翻译Spark官方调优指南Tuning Spark剩余部分Other Considerations。
Level of Parallelism
并行度不够,会导致集群的资源利用的不充分,并行程度由task数决定,task数和最后一个transformation的Partition数一致,因此,调整并行度就是调整Partition数。
创建RDD时可以指定Partition数量,默认由spark.default.parallelism参数决定(YARN模式下为所有executor的core数总和),能够触发Shuffle的transformation可以通过参数的方式修改Partition数,推荐每个core运行2-3 task,更多内容请参考我的博客Spark RDD之Partition,Spark调优之Cloudera博客(Part 2)中关于Parallelism部分的介绍。
Memory Usage of Reduce Tasks
OOM是Spark开发中最常见的问题,Spark中也有溢写机制,内存不足时写磁盘,导致OOM的原因可以分为以下 两方面
- 非Spark原因导致,可以概括为JVM内存模型中某个部分内存不足导致OOM(常见如Perm区),这一类问题是所有运行在JVM之上的程序都会遇到的,更详细的内容请参考深入理解Java虚拟机:OutOfMemory实战。
- Spark运行机制导致,由于Spark溢写机制的存在,仅仅是内存放不下数据并不会导致OOM,典型的场景是,当Shuffle中涉及到group、aggregation操作,需要把对应数据全部加载到内存,如果此时内存大小不足会触发OOM。
针对OOM问题,解决的思路如下
- 如果使用的资源管理器是YARN,通过Web UI查看日志确定内存使用情况,根据日志做出对应调整,参考yarn oom问题一例的思路。
- 通过日志没有思路的话,需要输出OOM时的堆栈信息,spark-submit提交任务时增加如下参数
--conf "spark.executor.extraJavaOptions= -XX:+HeapDumpOnOutOfMemoryError"
使用eclipse插件Memory Analyzer (MAT)分析。 - 此外,增加Partition数是最简单,也是优先考虑尝试的方式。
Broadcasting Large Variables
如果transformation中使用了较大的对象(大于20KB),Broadcast功能能够降低最终生成task的大小,因为每个task内部不再保存这个变量,而是通过driver直接发送给executor,参考Advantage of Broadcast Variables
,当Partition较多时,效果越发明显。
Data Locality
就近执行对Spark性能有较大影响,计算跟着数据走,两者在一个JVM或节点上是最快的,否则需要网络传输数据,有以下几个级别
PROCESS_LOCAL 数据和task在一个JVM,最好的情况,通常是Local模式下 NODE_LOCAL 数据和task在一个节点,比PROCESS_LOCAL差一些 NO_PREF 从任何地方访问数据速度相同,没有locality偏好 RACK_LOCAL 数据和task在相同机架不同节点 ANY 数据和task在不同机架通过Spark Web UI查看Data Locality,如下
Spark根据就近执行原则选择较近的节点执行task,但较近的节点CPU可能处于忙碌状态,暂时无法执行task,此时Spark等待一段时间(由spark.locality参数确定,默认3s),等待结束后依然如此,task发送到其他executor执行。
参考:
深入理解Java虚拟机:OutOfMemory实战
Tuning Spark
yarn oom问题一例
Advantage of Broadcast Variables
- Spark调优之Tuning Spark(Part 2)
- Spark调优之Tuning Spark(Part 1)
- Spark调优之Cloudera博客(Part 2)
- Tuning Spark
- spark-Tuning spark
- Spark调优之Cloudera博客(Part 1)
- Spark官方文档之Tuning Spark复习笔记-7
- Spark Job调优(Part 2)
- Spark 调优 (英文原文:Tuning Spark)
- Spark SQL 之 Performance Tuning & Distributed SQL Engine
- <<Spark Streaming Programming Guide>> - Part 2 基本概念
- Spark学习之Spark调优与调试(7)
- spark 之 spark是什么?
- Spark 之 spark submit
- Tuning-java-garbage-collection-for-spark-applications
- spark学习-27-Spark性能调优(2)
- Spark调优之开发调优
- Spark调优之资源调优
- 计算两个NSDate的时间差,计算毫秒差
- 草根站长心酸路:你的网站后来怎么样了?
- Nth Highest Salary 解法讨论(Mysql)
- 剑指offer——数字在排序数组中出现的次数(复习二分)
- MD5加密算法
- Spark调优之Tuning Spark(Part 2)
- R语言:ggplot绘图常用方法
- long转换成日期、日期转换成long
- 论文《Convolutional Neural Networks for Sentence Classification》总结
- 在QLabel设置网络图片
- 你会选取去北上广大城市做码农?(之前推过)
- MongoDB运行状态、性能监控,分析
- MySQL的GAP LOCK(间隙锁) 的陷阱
- 如何使用JavaScript构建机器学习模型