spark中的应用,工作,阶段和任务的概念是什么?

cdh*_*hit 24 apache-spark

我的理解是对的吗?

  1. 应用:一个火花提交.

  2. 工作:一旦懒惰的评估发生,就有工作.

  3. 阶段:它与shuffle和转换类型有关.我很难理解舞台的边界.

  4. 任务:单元操作.每项任务一次转型.每次转换一项任务.

帮助想要提高这种理解.

rak*_*esh 27

主要功能是应用程序.

在RDD上调用操作时,会创建"作业".工作是提交给Spark的工作.

根据随机边界将作业划分为"阶段".可以帮助您理解.

每个阶段根据RDD中的分区数进一步划分为任务.因此任务是Spark最小的工作单元.

  • 共享链接是受保护的博客.它说:该网站由其所有者标记为私人. (9认同)
  • @MorganKobeissi 现在该链接也已关闭 (4认同)
  • @AmitKushwaha:[archive.org 有帮助;-)](https://web.archive.org/web/20170209024033/https://trongkhoanguyenblog.wordpress.com/2014/11/27/understand-rdd-operations-transformations -和-动作/) (3认同)
  • 您可以在他的新博客上找到它 https://trongkhoanguyen.com/spark/understand-rdd-operations-transformations-and-actions/ (2认同)

ven*_*nus 13

应用程序- 使用其 API 在 Spark 上构建的用户程序。它由集群上的驱动程序和执行程序组成。

作业- 由多个任务组成的并行计算,这些任务响应 Spark 操作(例如,save()、collect())而产生。在与 Spark shell 的交互会话期间,驱动程序将您的 Spark 应用程序转换为一个或多个 Spark 作业。然后它将每个作业转换为 DAG。这实质上是 Spark 的执行计划,其中 DAG 中的每个节点可以是单个或多个 Spark 阶段。

阶段- 每个工作都被分成更小的任务集,称为阶段,这些任务相互依赖。作为 DAG 节点的一部分,阶段是根据可以串行或并行执行的操作创建的。并非所有 Spark 操作都可以在单个阶段中发生,因此它们可能会分为多个阶段。通常阶段是在算子的计算边界上划定的,它们决定了 Spark 执行器之间的数据传输。

任务- 将发送到 Spark 执行器的单个工作或执行单元。每个阶段由 Spark 任务(一个执行单元)组成,然后在每个 Spark 执行器之间进行联合;每个任务都映射到单个核心并处理单个数据分区。因此,一个 16 核的 executor 可以有 16 个或更多的任务并行工作在 16 个或更多的分区上,使得 Spark 的任务执行非常并行! Spark 阶段创建一个或多个要分发给执行程序的任务

免责声明:内容复制自:Learning Spark


Rag*_*ags 10

我在Cloudera 文档中找到了一个非常好的定义。这就是重点。

在 MapReduce 中,最高级别的计算单元是作业。作业加载数据、应用映射函数、对其进行混洗、应用归约函数,并将数据写回持久存储。但在 Spark 中,最高级别的计算单元是应用程序。Spark 应用程序可用于单个批处理作业、具有多个作业的交互式会话或持续满足请求的长期服务器。Spark 作业不仅仅包含单个映射和化简。


Mic*_*est 7

从 7-steps-for-a-developer-to-learn-apache-spark

Spark 应用程序的剖析通常由 Spark 操作组成,这些操作可以是使用 Spark 的 RDD、DataFrame 或 Datasets API 对数据集进行的转换或操作。例如,在您的 Spark 应用程序中,如果您在 DataFrame 或 Dataset 上调用一个操作,例如 collect() 或 take(),该操作将创建一个作业。然后将作业分解为单个或多个阶段;阶段被进一步划分为单独的任务;和任务是 Spark 驱动程序的调度程序发送到 Spark 工作节点上的 Spark Executor 以在您的集群中执行的执行单元。通常,多个任务会在同一个执行器上并行运行,每个任务都在其内存中处理其分区数据集单元。


ak1*_*k17 6

在 Spark 中,当调用 Spark-Submit 时,用户代码被分为称为作业、阶段和任务的小部分。

作业 - 作业是一系列阶段,由 .count()、foreachRdd()、collect()、read() 或 write() 等操作触发。

阶段 阶段是一系列任务,它们可以一起并行运行,无需随机播放。例如,使用 .read 从磁盘读取文件,然后运行 ​​.map 和 .filter 都可以在不进行洗牌的情况下完成,因此它可以适合单个阶段。

任务 任务是应用于单个分区的单个操作(.map 或.filter)。每个任务都作为执行器中的单个线程执行。如果您的数据集有 2 个分区,则诸如 filter() 之类的操作将触发 2 个任务,每个分区一个。即任务在执行器上执行,其数量取决于分区的数量。1 个分区需要 1 个任务。