Spark参数spark.executor.memoryOverhead与spark.memory.offHeap.size的区别

最近疑惑一个问题,spark executor的堆外内存问题,堆外内存很好理解,这里不再解释,疑惑的是它的设置,看过官网就知道设置堆外内存的参数为spark.executor.memoryOverhead与spark.memory.offHeap.size(需要与 spark.memory.offHeap.enabled同时使用),其中这两个都是描述堆外内存的,但是它们有什么区别么?
 
因为对两个参数不是很理解,所以我在集群上找了个任务,对这两个参数进行研究。
 
 
我是通过storage memory的计算来分析,因为storage memory的计算中包含了堆外内存。
 
正确的:
 
storage memory = (spark.executor.memory - 300M) * spark.storage.memoryFraction * spark.storage.safetyFraction + 堆外内存
 
 
如果想详细了解请看我的另一篇博客 https://blog.csdn.net/lquarius/article/details/106558464
 
已知:
 
storage memory    4.7G(见下图)
spark.executor.memory    1G(默认 )
spark.storage.memoryFraction 0.6(默认 )
spark.storage.safetyFraction 0.5(默认 )
  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Spark、Hadoop⼤数据平台搭建 下载安装包 Spark 分布式计算 ,安装包⼤⼩:220M ⽀持Hadoop 2.7以后的版本 Scala Scala环境,Spark的开发语⾔ ,安装包⼤⼩:20M Hadoop 分布式存储(计算) ,安装包⼤⼩:209M Java Java环境 ,安装包⼤⼩:187M ZooKeeper 注册中⼼ ,安装包⼤⼩:36M 配置 ⾸先需要配置环境变量 环境变量 打开并编辑 ~/.bashrc ⽂件,在末尾添加以下内容: # java JAVA_HOME=/opt/jdk1.8.0_192 export PATH=$PATH:$JAVA_HOME/bin # hadoop HADOOP_HOME=/opt/hadoop-2.7.7 export PATH=$PATH:$HADOOP_HOME/bin # zookeeper ZOOKEEPER_HOME=/opt/zookeeper-3.4.13 export PATH=$PATH:$ZOOKEEPER_HOME/bin # scala SCALA_HOME=/opt/scala-2.12.8 export PATH=$PATH:$SCALA_HOME/bin # spark SPARK_HOME=/opt/spark-2.3.2-bin-hadoop2.7 export PATH=$PATH:$SPARK_HOME/bin Host 这⾥需要设置Host,⼀个是Hadoop的Name-Node、Data-Node,⼀个spark的Master、Worker。 # hadoop 192.168.1.151 name-node 192.168.1.155 data-node-sa 192.168.1.156 data-node-sb 192.168.1.157 data-node-sc spark conf/slaves worker-sa worker-sb worker-sc 待补充 。。。 hadoop etc/hadoop/slaves data-node-sa data-node-sb data-node-sc Python3安装 安装pyspark cd /opt/spark-2.3.2-bin-hadoop2.7/python && python36 setup.py install 安装numpy pip3 install numpy -i https://pypi.mirrors.ustc.edu.cn/simple/ --trusted-host pypi.mirrors.ustc.edu.cn 启动&停⽌ hadoop sbin/start-all.sh sbin/stop-all.sh spark sbin/start-all.sh sbin/stop-all.sh 执⾏任务 提交任务 spark-submit --master spark://name-node:7077 --executor-memory 512m --total-executor-cores 2 client.py ⼏个管理页 Spark Hadoop 测试数据
### 回答1: spark.executor.memoryOverheadSpark中的一个参数,用于控制每个Executor进程的内存使用情况。它表示Executor进程在使用内存时,需要额外预留的内存量。这个参数的默认值是executorMemory * .10,也就是Executor进程的内存总量的10%。如果Executor进程的内存使用量超过了这个值,就会触发内存溢出错误。因此,如果你的Spark应用程序需要处理大量数据,就需要根据实际情况来调整这个参数的值,以保证程序的稳定性和性能。 ### 回答2: spark.executor.memoryOverheadspark默认配置中的一个参数,它用来控制每个executor进程额外需要的内存量,这个内存量用于非堆内存(off-heap memory)的使用,如网络缓存、JVM元数据等。 对于executor进程,它们的内存是由两个部分组成的:堆内存和非堆内存。堆内存主要用来存储业务数据和栈内存,而非堆内存则用来存储JVM元数据、线程栈、socket连接等。为了保障executor进程的正常运行,非堆内存的大小需要额外配置。 根据spark的默认配置,spark.executor.memoryOverhead的值等于executor内存的10%或384 MB(以两者中的较大者为准)。 如果executor的内存设置为2 GB,那么其memoryOverhead默认为384 MB,此时executor进程能够使用的非堆内存大小就是384 MB。如果需要调整spark.executor.memoryOverhead的大小,则需要根据实际场景进行调整。如果executor进程的非堆内存不足以支持某些非常规操作,如大规模的广播变量、多级aggregation等,则需要增加executormemoryOverhead值。 在设置spark.executor.memoryOverhead时,需要注意两点:第一,memoryOverhead值不能超过executor内存的50%;第二,memoryOverhead过大也会影响executor进程的性能。 总的来说,spark.executor.memoryOverheadspark中一个很重要的参数,在调优时需要结合业务场景来进行设置,以保证executor进程能够正常运行并获得最佳性能。 ### 回答3: Spark.executor.memoryOverheadSpark作业运行过程中与内存有关的一个参数。作业执行期间会有一部分内存用来存储数据结构等信息,而executor.memoryOverhead就是用来设置这一内存的大小。 默认情况下,executor.memoryOverhead的值是executor的内存数目的10%,但这个百分比并不一定适用于所有的作业。在实际运行过程中,如果程序发生OutOfMemoryError或executor内存与操作系统进行swapping(虚拟内存),应该考虑调整executor.memoryOverhead参数的大小。通常来说,增加executor.memoryOverhead的数值可以帮助解决内存不足的问题,但同时也会影响到executor的可用内存。 调整executor.memoryOverhead的大小,需要根据具体的作业和集群来进行。一般来说,可以根据如下的步骤来设置该参数: 1. 观察Spark作业运行时的内存使用情况,如果出现OutOfMemoryError等内存不足的情况,应该考虑增加executor.memoryOverhead的数值。 2. 计算出例如下面的公式: executor.memoryOverhead = max(executor.memory * 0.1, 384MB) 这个公式是Sparkexecutor.memoryOverhead的默认值,其中max()函数所得到的结果是executor.memory的10%和384MB两个数值中的最大值。这个公式可以作为调整executor.memoryOverhead数值的参考,可以将其中的0.1和384MB根据实际情况进行调整。 3. 对于不同的作业和集群,可能需要进行不同的调整。调整executor.memoryOverhead数值的过程可能需要进行多次试验,通过观察内存使用情况来确定一个合适的数值。 总之,executor.memoryOverhead参数需要根据作业的需求和集群的配置进行适当的调整,以保证Spark作业能够正常运行,并且不出现内存不足或者过多使用内存的情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值