火花文献说
每个应用程序都有其自己的执行程序流程,这些流程将持续进行 整个应用程序的持续时间以及多个运行任务 线程。
如果我理解这个权利,那么在集群中的所有节点上(在集群模式下)创建Spark Context时,在静态分配中,Spark应用程序将获取执行程序。我有几个问题
如果在所有节点上都获取了执行程序,并且将其分配给 在整个申请期间, 难道没有很多节点保持空闲状态吗?
当Spark上下文为 创建的,而不是在DAGScheduler中?我的意思是申请可能是 任意长,它只是持有资源。
因此,当DAGScheduler尝试获取首选位置时, 这些节点中的执行者正在运行任务,是否 放弃其他节点上的执行者?
我已经检查了一个相关问题 Does Spark on yarn deal with Data locality while launching executors
但是我不确定答案是否定
答案 0 :(得分:0)
是的,有机会。如果您有数据偏斜,就会发生这种情况。挑战在于调整执行程序和执行程序核心,以最大程度地利用资源。 Spark还提供了动态资源分配,可确保删除空闲的执行程序。
Spark尝试在进行转换时将数据保留在内存中。与map-reduce模型相反,在map-reduce模型中,每次Map操作之后它都会写入磁盘。只有确保可以在同一台计算机上执行代码的情况下,Spark才能将数据保留在内存中。这是事先分配资源的原因。
Spark无法在执行程序上启动任务,除非执行程序是免费的。现在,火花应用程序主控制器与纱线协商以获取首选位置。它可能会或可能不会。如果不成功,它将在其他执行程序中启动任务。