【问题标题】:How to find out the task dependency in apache spark如何找出apache spark中的任务依赖关系
【发布时间】:2017-12-08 17:13:28
【问题描述】:

我了解到,从 Apache Spark 中,您可以使用 spark 历史 UI 找出 RDD 内部阶段之间的依赖关系,如下所示:

从 RDD 的 DAG 中我知道:RDD 号 36 在完成 RDD 号 33,34 和 35 之前无法启动。

我的问题是:如何找到特定阶段内所有任务之间的依赖关系?

从 spark 事件日志和 Spark 历史服务器 UI 我可以获取任务的开始和结束时间,但我无法找到如何获取任务之间的依赖关系。

【问题讨论】:

    标签: apache-spark apache-spark-sql spark-dataframe rdd


    【解决方案1】:

    您几乎已经回答了您的问题。您可以使用API 检查RDD 依赖项,Spar todebug String 也提供检查RDD Dependencies 的工具。请查看spark-rdd-dependencies

    在高层次上,当在 RDD 上调用任何操作时,Spark 会创建 DAG 并将其提交给 DAG 调度程序。

    • DAG 调度程序将算子划分为任务阶段。一个阶段由基于输入数据分区的任务组成。 DAG 调度程序将操作员流水线化在一起。例如许多地图操作员可以安排在一个阶段。 DAG 调度程序的最终结果是一组阶段。
    • 阶段被传递给任务调度器。任务调度器通过集群管理器(Spark Standalone/Yarn/Mesos)启动任务。任务调度器不知道阶段的依赖关系。

    在高层次上,可以对 RDD 应用两种变换,即窄变换和宽变换。广泛的转换基本上会导致阶段边界。

    窄转换 - 不需要在分区之间打乱数据。例如,地图、过滤器等。

    范围转换- 需要对数据进行混洗,例如 reduceByKey 等。

    Advanced Apache Spark- Sameer Farooqui (Databricks) check this its best

    【讨论】:

    • 但是一个stage内的task之间的依赖关系呢?所以我可以确保任务 B 不能在任务 A 之前启动?
    【解决方案2】:

    如何找到特定阶段内所有任务之间的依赖关系?

    这很简单 - 单个阶段中的任务始终是独立的。它们只能依赖于另一个阶段的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 2015-07-20
      • 2017-10-29
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2016-08-12
      相关资源
      最近更新 更多