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 执行两次的主要内容,如果未能解决你的问题,请参考以下文章
Apache Manged Airflow EMR 操作员 DAG 失败
为啥 Spark UI 在 Jobs 选项卡下的 DAG 中只显示 Actions 而没有 Transformations