Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 火花不确定性和重新计算安全性_Apache Spark - Fatal编程技术网

Apache spark 火花不确定性和重新计算安全性

Apache spark 火花不确定性和重新计算安全性,apache-spark,Apache Spark,有人声称,由于重新计算和容错,Spark RDD必须是其输入的确定性函数,但也有被认可的非确定性RDD,例如在或中。关于如何安全使用不确定性,是否有正式的指导 考虑一下这个火花作业,它有一个菱形的DAG val bar = (rdd map f) zip (rdd map g) bar.saveAsTextFile("outfile") 如果rdd是不确定的,例如随机或时间戳,则输出文件是否包含一致的数据?是否有可能重新计算zip的一个组件而不重新计算另一个组件?如果我们检查点或坚持rdd,安

有人声称,由于重新计算和容错,Spark RDD必须是其输入的确定性函数,但也有被认可的非确定性RDD,例如在或中。关于如何安全使用不确定性,是否有正式的指导

考虑一下这个火花作业,它有一个菱形的DAG

val bar = (rdd map f) zip (rdd map g)
bar.saveAsTextFile("outfile")
如果rdd是不确定的,例如随机或时间戳,则输出文件是否包含一致的数据?是否有可能重新计算zip的一个组件而不重新计算另一个组件?如果我们检查点或坚持rdd,安全性有保证吗?一杯就够了吗

一般的

以下是我在实践层面的一些想法和经验:

如果您从配置单元中的表/文件中读取,则Spark将列出所有使用的文件以及该列表中哪个节点被证明是该列表的一部分,因此如果重新计算一直返回到开始,即从HDFS/配置单元读取该数据子集,则重新计算将是一致的

如果使用随机函数,则I.cache或.persist可以避免使用不同的路径逻辑进行重新计算。当然,结合前面提到的,若随机函数在读取后必须从源中获取数据,则会得到不同的结果。见下文

如果在处理的同时允许对JDBC源进行更新,并且DAG从JDBC源重新计算,那么从JDBC源读取数据将无法保证一致性/确定性结果

检查点的影响

无论出于何种原因,如果失败,从DAG返回源代码的计算都是昂贵的。在给定阶段采取的检查点将数据存储到磁盘本地或HDFS,如果随后出现故障,则从此点开始重新计算,从而节省时间。DAG血统被打破了

最后说明

如果重新计算是从JDBC源或随机函数开始的,那么在一个阶段中处理这些函数时可能会影响后续已处理的分区呢?我不能轻易地证明这一点,但我认为那些不适合当前节点重新处理的结果将被丢弃。否则就不实际了

关于作者自己的回答,应注意以下几点:。。。有几个重要的区别,但基本的一个是发生了什么与血统。持久化/缓存保持沿袭完整,而检查点中断沿袭。。。。另一个答案中的陈述不正确。

根据persistStorageLevel,关于rdd上缓存、持久化和检查点的使用。DISK_只会有效地中断当前作业中的沿袭,而检查点会中断作业之间的沿袭,但不会清理文件。我暂时得出结论,在持久化或检查点之后重试任务不会破坏数据一致性。缓存操作不能保证一致性

在危机持续之前会有问题吗?如果rdd分区包含独立的随机数据,则在单独的分区上重试任务不会有问题。如果rdd包含时间戳,那么rdd应该由单个分区组成

我初步得出结论,使用不确定RDD进行计算的安全策略是从独立分区构建它,独立分区可以安全地单独重新计算,并立即将RDD持久化到磁盘或检查点。如果RDD在作业之间重复使用,则需要检查点


在RDD的排序中引入不确定性。如果您需要在重复使用的RDD副本之间保持顺序一致性,例如,由于zipWithIndex的原因,那么追溯到最近的持久化或检查点的沿袭不应包含任何顺序修改转换。

我希望有人会以正式的可靠契约来回答,可能是在检查点附近。缓存是最大的努力,可能会失败。谢谢你的回答!我正在寻找的是一种使用不确定数据编程的策略,并且有理由相信该策略是安全的,并且在压力下不会有神秘的坏输出。在持久化到磁盘后,沿袭似乎没有被删除,但也没有在同一个作业中使用。您想要的是不可能的。我的回答举例说明了原因。我太渴望不可能的事情了。答案有点有限,或者问得模糊。我认为我提供了更多的肉在骨头上,因为它是。而且,你的声明将有效地打破血统在目前的工作是不正确的imho。