当我试图优化一个火花工作时,我很难理解第二个和6-7s第三和第四执行者的发射延迟3-4秒。
这就是我要做的事:
下面是Spark中作业选项卡的截图。
这项工作分为三个阶段。正如所见,第二、第三和第四遗嘱执行人仅在第二阶段增加。

下面是第0阶段的快照。

随着第一阶段的结束。

如上图所示,执行程序2(与第一个工作人员相同)需要大约3s才能启动。执行者3和4(对第二个工人)花费的时间更长,大约6s。
我试着使用spark.locality.wait变量:0,1s,1ms的值。但执行者的发射时间似乎没有任何变化。
还有其他原因造成这次延误吗?我还能在哪里更好地理解这一点呢?
发布于 2020-01-26 14:27:57
您可能有兴趣检查Spark的执行者请求策略,并检查应用程序的设置spark.dynamicAllocation.schedulerBacklogTimeout和spark.dynamicAllocation.sustainedSchedulerBacklogTimeout。
启用动态分配功能的星火应用程序在有等待调度的挂起任务时请求其他执行程序。..。 在回合中激发请求执行者。当有挂起的任务持续了
spark.dynamicAllocation.schedulerBacklogTimeout秒时,实际的请求就会被触发,如果挂起的任务队列持续存在,则每隔一秒钟就再次触发一次spark.dynamicAllocation.sustainedSchedulerBacklogTimeout请求。此外,每轮要求的执行者数量比上一轮呈指数增长。例如,应用程序将在第一轮中添加1个执行器,然后在随后的几轮中添加2、4、8等执行程序。
延迟的另一个潜在来源可能是spark.locality.wait。因为在第1阶段中,您有相当多的任务具有次优的本地级别(Rack : 59),而且spark.locality.wait的默认时间是3秒,所以它实际上可能是您所看到的延迟的主要原因。
发布于 2020-01-26 11:10:33
纱线创建执行器需要时间,对这种开销无能为力。如果您想优化,您可以设置一个星火服务器,然后为服务器创建请求,这样可以节省热身时间。
https://stackoverflow.com/questions/59916338
复制相似问题