分享

关于spark执行器内存分配的问题

chimes298 发表于 2016-3-25 15:56:36 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 12674
本人在试验过程中发现,为Executor分配更大内存(不超过每个节点总内存的75%),会报OOM错误,但是内存分配更小时反而正常运行。

程序过程:从Hbase中读取数据,分区缓存,计算行数
[mw_shl_code=scala,true]val hrdd = sc.newAPIHadoopRDD(configuration, classOf[TableInputFormat],
      classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
      classOf[org.apache.hadoop.hbase.client.Result])
val hrddre = hrdd.repartition(1000).persist(StorageLevel.MEMORY_ONLY)
hrddre.count()[/mw_shl_code]

读入数据量:30G,300万行左右

集群配置:三个节点,每个节点64G内存,32core,任务启动前集群空闲内存52G以上

采用Standalone模式,按照默认每个节点启动一个Executor,当采用每个Executor分配20G内存时,程序正常:
--executor-memory 20g --total-executor-cores 60

当每个Executor分配超过25G,比如30G,会报OOM错误,程序失败:
--executor-memory 30g --total-executor-cores 60


求教论坛里的高手,Spark或者Linux系统或者JVM会在哪里限制每个Executor的内存上限么,为什么分配更大的内存,反而会内存耗尽呢?

已有(4)人评论

跳转到指定楼层
轩辕依梦Q 发表于 2016-3-25 18:32:49
executor分配的内存太多了吧,只有52G,只能起一个executor
回复

使用道具 举报

Alkaloid0515 发表于 2016-3-25 19:50:25

相同的内存资源分配给数量更少的executor,相当于增加了每个task的内存分配,这样运行速度就慢了,因为executor数量减少了。
内存小一些,executor增多,所以可能会快一些

###########################################

更多:
(1)实践中跑的EMR Spark job,有的特别慢,查看CPU利用率很低,我们就尝试减少每个executor占用CPU core的数量,增加并行的executor数量,同时配合增加分片,整体上增加了CPU的利用率,加快数据处理速度。


(2)发现某job很容易发生内存溢出,我们就增大分片数量,从而减少了每片数据的规模,同时还减少并行的executor数量,这样相同的内存资源分配给数量更少的executor,相当于增加了每个task的内存分配,这样运行速度可能慢了些,但是总比OOM强。

(3)数据量特别少,有大量的小文件生成,就减少文件分片,没必要创建那么多task,这种情况,如果只是最原始的input比较小,一般都能被注意到;但是,如果是在运算过程中,比如应用某个reduceBy或者某个filter以后,数据大量减少,这种低效情况就很少被留意到。
最后再补充一点,随着参数和配置的变化,性能的瓶颈是变化的,在分析问题的时候不要忘记。例如在每台机器上部署的executor数量增加的时候,性能一开始是增加的,同时也观察到CPU的平均使用率在增加;但是随着单台机器上的executor越来越多,性能下降了,因为随着executor的数量增加,被分配到每个executor的内存数量减小,在内存里直接操作的越来越少,spill over到磁盘上的数据越来越多,自然性能就变差了。

来自:
Spark的性能调优
http://www.aboutyun.com/forum.php?mod=viewthread&tid=17118



回复

使用道具 举报

chimes298 发表于 2016-3-28 09:22:01
轩辕依梦Q 发表于 2016-3-25 18:32
executor分配的内存太多了吧,只有52G,只能起一个executor

standalone默认就是一个节点起一个Executor吧
回复

使用道具 举报

chimes298 发表于 2016-3-28 09:42:05
Alkaloid0515 发表于 2016-3-25 19:50
相同的内存资源分配给数量更少的executor,相当于增加了每个task的内存分配,这样运行速度就慢了,因为exe ...

我的问题正如第二点,我分配了更多的内存,理论上应该更不容易OOM,但却比下内存更容易OOM了。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条