【问题标题】:apache spark executors and data localityapache spark执行器和数据本地化
【发布时间】:2019-01-05 04:42:20
【问题描述】:

火花文学说

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

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

  1. 如果在所有节点上都获取了执行程序并将继续分配给 在整个申请期间,此申请, 不是有很多节点处于空闲状态吗?

  2. Spark上下文获取资源有什么好处 创建而不是在 DAGScheduler 中?我的意思是应用程序可能是 任意长,它只是持有资源。

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

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

但我不确定是否有确凿的答案

【问题讨论】:

    标签: apache-spark executors


    【解决方案1】:
    1. 如果在所有节点上都获取了 executors,并且在整个应用程序运行期间一直分配给这个应用程序,是不是有很多节点保持空闲?

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

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

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

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

    除非 executor 空闲,否则 Spark 无法在 executor 上启动任务。现在 spark application master 与 yarn 协商以获取首选位置。它可能会也可能不会。如果没有得到,它将在不同的执行器中启动任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多