apachespark执行器和数据本地化



星火文献称

每个应用程序都有自己的执行程序进程,这些进程将持续整个应用程序的持续时间,并在多个应用程序中运行任务螺纹。

如果我理解这一点,在静态分配中,当在集群中的所有节点上创建Spark上下文时(在集群模式中(,Spark应用程序会获取执行器。我有几个问题

  1. 如果执行器在所有节点上都被获取,并且将被分配给该应用程序在整个应用程序的持续时间内,难道没有机会让很多节点保持空闲状态吗?

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

  3. 因此,当DAGScheduler试图获得首选位置和那些节点中的执行器正在运行任务,是吗放弃其他节点上的执行者?

我检查了一个相关的问题纱线上的Spark在启动执行程序时处理数据位置吗

但我不确定是否有一个决定性的答案

  1. 如果在所有节点上都获取了执行器,并且在整个应用程序的持续时间内将被分配给该应用程序,那么很多节点是否有可能保持空闲

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

  1. 当创建Spark上下文而不是在DAGScheduler中时,获取资源的优势是什么?我的意思是,应用程序可能是任意长的,它只是占用了资源

Spark在进行转换时试图将数据保存在内存中。与映射减少模型相反,在每次映射操作后,它都会写入磁盘。只有确保代码在同一台机器上执行,Spark才能将数据保存在内存中。这就是事先分配资源的原因。

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

Spark无法在执行器上启动任务,除非执行器空闲。现在火花应用程序主与纱线协商以获得首选位置。它可能会,也可能不会。若并没有得到,它将在不同的执行器中启动任务。

最新更新