什么是spark.driver.maxResultSize?

gsa*_*ras 21 configuration communication driver distributed-computing apache-spark

裁判说:

每个Spark操作的所有分区的序列化结果的总大小限制(例如,收集).应至少为1M,或0为无限制.如果总大小超过此限制,则将中止作业.具有高限制可能会导致驱动程序中出现内存不足错误(取决于spark.driver.memory和JVM中对象的内存开销).设置适当的限制可以保护驱动程序免受内存不足错误的影响.

这个属性究竟做了什么?我的意思是起初(因为我不是因为内存错误而失败的工作)我认为我应该增加它.

第二个想法,似乎这个属性定义了一个worker可以发送给驱动程序的结果的最大大小,所以将它保留为默认值(1G)将是保护驱动程序的最佳方法.

但是在这种情况下会发生,工作人员将不得不发送更多的消息,因此开销将只是工作会更慢?


如果我理解正确,假设一个工人想要向驱动程序发送4G数据,那么拥有spark.driver.maxResultSize=1G,将导致工作人员发送4条消息(而不是1条无限制spark.driver.maxResultSize).如果是这样,那么增加该属性以保护我的驱动程序不被Yarn暗杀应该是错误的.

但是上面的问题仍然存在......我的意思是如果我将它设置为1M(最小值),它会是最具保护性的方法吗?

zer*_*323 27

假设一个worker希望向驱动程序发送4G数据,那么使用spark.driver.maxResultSize = 1G将导致worker发送4条消息(而不是1条带有无限的spark.driver.maxResultSize).

否.如果估计的数据大小大于maxResultSize给定的作业将被中止.这里的目标是保护您的应用程序免受驱动程序丢失,仅此而已.

如果我将其设置为1M(最小值),它将是最具保护性的方法吗?

在意义上是的,但显然它在实践中没用.良好的价值应该允许应用程序正常进行,但保护应用程序免受意外情

  • 将它设置为 0 表示无限制非常方便,直到它使事情崩溃为止。 (5认同)
  • 为什么将 maxResultSize 设置为 max 不是一个好的选择?它如何使驱动程序失败? (2认同)
  • 因为司机做了很多事情!(照顾工人,块管理器等...)没有足够的堆=>崩溃。 (2认同)
  • 所以,如果你将它设置为一个较低的值......它也会崩溃!它有点像一个断言():你遇到了一个你不想要的条件,它要么会因为断言而停止,要么会因为达到堆限制而崩溃。如果理论上不执行断言,则在堆崩溃之前需要更多时间(可能在交换时出现磁盘抖动)。 (2认同)