pyspark 在Spark中复制?

dwbf0jvd  于 10个月前  发布在  Spark
关注(0)|答案(1)|浏览(90)

我开始学习spark,我遇到了一个关于spark中复制的疑问。我读到spark是一个分布式计算框架,它没有像hadoop那样自己的存储系统。我的疑问是,当创建rdd时,分区被创建并存储在集群中的多个节点上,当spark集群中出现节点故障时,spark如何处理它。spark是否有复制概念,或者是否有任何复制概念。其他方式Spark克服这个问题?
我试图找到这个问题的答案,但在互联网上有不同的答案,有些人说spark使用复制因子,例如“当您创建弹性分布式数据集(RDD)时,Apache Spark中的复制会自动发生”,而其他人则说spark没有复制概念

jchrr9hc

jchrr9hc1#

谢谢你的提问!
RDD(弹性分布式数据集)是弹性的,即容错,并且是分布式的,即存储在不同的机器上。这是如何工作的,Spark从原始数据集到预期的RDD创建了一个DAG(直接无环图)。
让我用一个例子来解释这一点。假设我们正在尝试运行以下操作。

val df = spark.read.json("hdfs://localhost:9000/user/sourav/sample_data.json")
val df2 = df.select("name")
df2.show()

字符串
在本例中,我们尝试从JSON文件中读取name列并显示该列。尽管它表示df变量将存储从JSON文件中读取的数据,但它不会这样做(Spark工作在延迟求值上),它会创建一个DAG并将其存储在内存中。在第二行,它会再次创建一个DAG并将其存储在内存中。最后,在第三行中,它将执行实际操作并显示输出。这些DAG存储在Driver内存中,因此它是一种单点故障(我们在生产作业中看到这种OOM故障,当Driver JVM过载时,我们会丢失DAG定义)。
我希望这个解释能澄清你的疑问。

相关问题