什么是spark.driver.maxResultSize?

时间:2016-08-22 20:06:39

标签: apache-spark configuration driver communication distributed-computing

ref说:

  

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:18)

  

假设某个工作人员想要向驱动程序发送4G数据,那么使用spark.driver.maxResultSize = 1G将导致该工作人员发送4条消息(而不是1条带有无限的spark.driver.maxResultSize)。

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

  

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

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