Apache Spark:Dag 没有为 reduceByKey 执行两次

Posted

技术标签:

【中文标题】Apache Spark:Dag 没有为 reduceByKey 执行两次【英文标题】:Apache Spark: Dag is not executed twice for reduceByKey 【发布时间】:2017-07-03 14:49:39 【问题描述】:

有一个简单但可能很奇怪的问题:对于以下代码,DAG 执行了两次,这是预期的,因为我调用了两次操作:

val input = sc.parallelize(List(1,2,3,4))
val result = input.map(x => 
  println("!!! Input Map !!!")
  errorLines.add(1)
  (x,1)
)
//.reduceByKey(_+_)
println(result.count())
println(result.collect())

如果我取消注释 reduceByKey 行 - DAG 将只执行一次,尽管 reduceByKey 是转换并且我调用了两次操作。

这是否意味着 Spark 并不总是重新计算 DAG?

【问题讨论】:

【参考方案1】:

Spark 中的 Shuffle 文件用作隐式缓存,因此每当您的管道包含 shuffle 阶段(如 *ByKey)并且涉及节点故障时,Spark 将仅重复最后一个阶段。

也就是说,在转换中既不使用标准输出也不使用累加器errorLines 是一个)是可靠的。正常执行时,前者会丢失,后者不提供exactly once保证。

与What does "Stage Skipped" mean in Apache Spark web UI?相关

【讨论】:

以上是关于Apache Spark:Dag 没有为 reduceByKey 执行两次的主要内容,如果未能解决你的问题,请参考以下文章

DAG 如何让 Apache Spark 容错?

Apache Manged Airflow EMR 操作员 DAG 失败

Spark创建HiveContext报错tez的问题

为啥 Spark UI 在 Jobs 选项卡下的 DAG 中只显示 Actions 而没有 Transformations

Spark DAG

Spark DAG 依赖关系 Stage