Apache spark 使用KeyOrdering和Aggregator创建Shuffledd
我正在尝试解决与此问题相关的RDD的不确定状态: 问题是我在管道中有几个重新分区,这些重新分区导致RDD从确定性到无序再到不确定。不确定RDD上的任何操作都无法重试,因此,如果这些状态下的阶段上的执行器出现问题,则作业很容易失败 我已经通读了计算确定性状态的RDD代码: 基于这种逻辑,如果我可以使用Apache spark 使用KeyOrdering和Aggregator创建Shuffledd,apache-spark,Apache Spark,我正在尝试解决与此问题相关的RDD的不确定状态: 问题是我在管道中有几个重新分区,这些重新分区导致RDD从确定性到无序再到不确定。不确定RDD上的任何操作都无法重试,因此,如果这些状态下的阶段上的执行器出现问题,则作业很容易失败 我已经通读了计算确定性状态的RDD代码: 基于这种逻辑,如果我可以使用OrderingKey和Aggregator创建一个shuffleddd,那么DAG会将RDD解释为确定性的,而不关心导致分区无序的上游分区 流在重新分区之间使用Long键执行groupByKey操
OrderingKey
和Aggregator
创建一个shuffleddd
,那么DAG会将RDD解释为确定性的,而不关心导致分区无序的上游分区
流在重新分区之间使用Long
键执行groupByKey
操作,这可能会产生带有聚合器(累积到缓冲区)和键排序的ShuffleDDS,但这似乎没有发生。如果我使用groupByKey
,那么我会得到一个带有聚合器的ShuffleRDD
。如果我使用sortwithinjections
,那么我会得到一个带有键排序的ShuffleRDD
。如果我按groupByKey排序,我会得到一个围绕ShuffleRDD
的MapPartitionsRDD
(恰好按键排序)
ShuffleRDD
是一个DeveloperAPI类,所以我不知道直接构造一个类并给它排序和分组实例是否安全。这种链也发生在一些地方,所以我不太喜欢在任何地方都将groupByKey更改为确定性groupByKey,只是为了获得确定性行为
我正在寻找任何人谁可以推荐一个很好的方法来恢复RDD的决定论后,它已经通过了重新分区
更新
检查点“起作用”是因为RDD变得具有确定性,但其代价是增加了复制存储上的负载。具有确定性分区器和完全排序记录的RDD是确定性的,即使逻辑无法识别这一点。计算确定性级别的代码通过检查ShuffleDDD上是否存在OrderingKey和Aggregator来确认这一点。我的问题是我找不到任何方法来创建一个使用公共API的API。PairRDDFunctions和OrderedRddFunctions似乎都没有这样做的方法。此链接为您提供指导
总结:。。。为了解决这个问题,我们需要将RDD输入到ALS
符合确定性最简单的方法是
检查RDD。因为检查点将RDD保存到可靠的数据库中
像HDFS这样的存储,重新运行检查点RDD只是读取所需的数据
从磁盘返回分区
RDD是遗留的,所以当我看到你的第一个链接时,也许你不应该太担心。你解决了btw吗?对不起,我应该澄清一下,在我的情况下,检查点是有害的,因为它在HDFS中生成了很多小文件,并导致一个不知所措的namenode。我不确定这是否与你可以重新分区相关。