The ref http://spark.apache.org/docs/latest/configuration.html says:
每个分区的所有分区的序列化结果总大小的限制
激发行动(例如收集)。应至少为 1M,或 0
无限。如果总大小超过此限制,作业将被中止。
具有较高的限制可能会导致驱动程序内存不足错误(取决于
关于spark.driver.memory和JVM中对象的内存开销)。环境
适当的限制可以保护驱动程序免受内存不足错误的影响。
这个属性具体有什么作用呢?我的意思是,一开始(因为我没有与因内存不足错误而失败的工作作斗争)我认为我应该增加它。
再想一想,这个属性似乎定义了工作人员可以发送给驱动程序的结果的最大大小,因此将其保留为默认值(1G)将是保护驱动程序的最佳方法。
但在这种情况下,工作人员将不得不发送更多消息,因此开销只是工作会变慢?
如果我理解正确的话,假设一个worker想要发送4G的数据给driver,那么有spark.driver.maxResultSize=1G
,将导致工作人员发送 4 条消息(而不是无限发送 1 条消息)spark.driver.maxResultSize
)。如果是这样,那么增加该属性来保护我的驱动程序不被 Yarn 暗杀应该是错误的。
但上面的问题仍然存在..我的意思是,如果我将其设置为 1M(最小值),这会是最具保护性的方法吗?
假设工作人员想要向驱动程序发送 4G 的数据,那么 Spark.driver.maxResultSize=1G 将导致工作人员发送 4 条消息(而不是发送 1 条无限制的 Spark.driver.maxResultSize)。
否。如果数据的估计大小大于maxResultSize
给定的作业将被中止。这里的目标是保护您的应用程序免受驱动程序丢失的影响,仅此而已。
如果我将其设置为 1M(最小值),这是否是最具保护性的方法?
从某种意义上来说是的,但显然在实践中没有什么用处。良好的价值应该允许应用程序正常进行,但可以保护应用程序免受意外情况的影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)