apache spark executors and data locality

时间:2018-07-28 05:39:11

标签: apache-spark executors

火花文献说

  

每个应用程序都有其自己的执行程序流程,这些流程将持续进行   整个应用程序的持续时间以及多个运行任务   线程。

如果我理解这个权利,那么在集群中的所有节点上(在集群模式下)创建Spark Context时,在静态分配中,Spark应用程序将获取执行程序。我有几个问题

  1. 如果在所有节点上都获取了执行程序,并且将其分配给 在整个申请期间, 难道没有很多节点保持空闲状态吗?

  2. 当Spark上下文为     创建的,而不是在DAGScheduler中?我的意思是申请可能是     任意长,它只是持有资源。

  3. 因此,当DAGScheduler尝试获取首选位置时,     这些节点中的执行者正在运行任务,是否     放弃其他节点上的执行者?

我已经检查了一个相关问题 Does Spark on yarn deal with Data locality while launching executors

但是我不确定答案是否定

1 个答案:

答案 0 :(得分:0)

  1. 如果执行程序在所有节点上都被获取,并且将在整个应用程序期间一直分配给该应用程序,那么是否没有机会让许多节点保持空闲状态?
  

是的,有机会。如果您有数据偏斜,就会发生这种情况。挑战在于调整执行程序和执行程序核心,以最大程度地利用资源。 Spark还提供了动态资源分配,可确保删除空闲的执行程序。

  1. 创建Spark上下文而不是在DAGScheduler中获取资源有什么优势?我的意思是应用程序可能会很长,而且只是在占用资源。
  

Spark尝试在进行转换时将数据保留在内存中。与map-reduce模型相反,在map-reduce模型中,每次Map操作之后它都会写入磁盘。只有确保可以在同一台计算机上执行代码的情况下,Spark才能将数据保留在内存中。这是事先分配资源的原因。

  1. 因此,当DAGScheduler尝试获取首选位置并且这些节点中的执行者正在运行任务时,会放弃其他节点上的执行者吗?
  

Spark无法在执行程序上启动任务,除非执行程序是免费的。现在,火花应用程序主控制器与纱线协商以获取首选位置。它可能会或可能不会。如果不成功,它将在其他执行程序中启动任务。