c语言sscanf函数的用法是什么
246
2022-11-16
[spark 面试]Yarn Cluster生产环境下JVM的OOM和Stack Overflow问题
1、Spark on Yarn下JVM的OOM问题及解决方式 2、Spark中Driver的Stack Overflow的问题及解决方式
Spark on Yarn cluster mode: 此时有可能会报OOM的错误,具体来说: 由于Client模式下一定没有出现OOM,而在Cluster模式下一定出现了OOM,所以必然说明OOM是Driver导致的! Driver在Client和Cluster模式下占用的内存都是一致的,例如都是100M,现在的问题是为什么在Client下的100M不会OOM,但是在Cluster模式下的100M会出现OOM?
更进一步:这个OOM是永久代产生的OOM
真相是:无论在Client模式还是在Cluster模式下,我们的Driver都是运行在JVM中的,而JVM一定有具体的例如永久代的配置参数等信息。在Client模式下,加载本地的配置信息的时候,Driver所在的JVM的永久代的默认大小是128MB,而在Cluster下默认的永久代的大小是82MB,当你的代码业务逻辑很多的时候,就要构造很多永久代的对象,此时的永久代消耗的大小例如说是100MB,所以在Client模式下可以成功运行,但是在Cluster模式下因为100M大于82M,所以就产生永久代的OOM问题,导致程序启动失败!
解决方式: 在spark-submit的时候设定conf部分的 spark.driver.extraJavaOptions: -XX:PermSize=256M -MaxPermSize-256M,现实生产环境下大多数都是使用Java7,Java8设置元数据空间。
Spark运行时候的StackOverflow问题:
之所以产生Stack Overflow,原因是在Stack方法栈中方法的调用链条太长所导致的,经典的过长链条有两种: 第一种:过于深度的递归 第二种:过于复杂的业务调用链条(很少见!)
在Spark中什么时候会出现Stack Overflow呢?
例如SQL语句中的条件组合太多,而SQL在Spark SQL中会通过Catalyst首先变成一棵树,并最终变成RDD的编程实现。在这个过程中,有可能把我们的SQL语句解析成为不断地递归调用,此时就有可能出现Stack Overflow的情况。什么样的SQL语句?例如:SELECT … FROM … WHERE ..OR…OR…OR…OR…
怎么办? 对于SQL的情况就要进行拆分!例如把一个很长的SQL语句变成很多小的SQL语句,构成很多子查询。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~