ger*_*ium 12 scala apache-spark apache-spark-sql
检查点版本:
val savePath = "/some/path"
spark.sparkContext.setCheckpointDir(savePath)
df.checkpoint()
Run Code Online (Sandbox Code Playgroud)
写入磁盘版本:
df.write.parquet(savePath)
val df = spark.read.parquet(savePath)
Run Code Online (Sandbox Code Playgroud)
我认为两者都以同样的方式打破了血统.
在我的实验中,检查点在磁盘上比镶木地板大约30(689GB对24GB).在运行时间方面,检查点需要1.5倍(10.5分钟对7.5分钟).
考虑到这一切,使用检查点而不是保存到文件有什么意义?我错过了什么吗?
Avi*_*rya 10
检查点是截断 RDD 谱系图并将其保存到可靠的分布式 (HDFS) 或本地文件系统的过程。如果你有一个很大的 RDD 谱系图并且你想冻结当前 RDD 的内容,即在继续下一步之前实现完整的 RDD,你通常使用persist 或 checkpoint。然后可以将检查点 RDD 用于其他目的。
当您检查点时,RDD 被序列化并存储在磁盘中。它不以镶木地板格式存储,因此数据未在磁盘中正确存储优化。与 parquet 相反,它提供各种压缩和编码来存储优化数据。这将解释大小的差异。
您绝对应该考虑在嘈杂的集群中设置检查点。如果有大量作业和用户争夺资源,并且没有足够的资源来同时运行所有作业,则集群称为嘈杂。
如果您的计算真的很昂贵并且需要很长时间才能完成,您必须考虑检查点,因为将 RDD 写入 HDFS 并并行读取它可能比从头开始重新计算更快。
在 spark2.1 发布之前有一点不便;无法检查数据帧,因此您必须检查基础 RDD。spark2.1及以上版本已解决此问题。
以镶木地板保存到磁盘并读回的问题是
这个维基可能有助于进一步调查
如数据集检查点维基中所示
检查点实际上是 Spark Core(Spark SQL 用于分布式计算)的一个特性,它允许驱动程序在失败时重新启动,之前计算的分布式计算状态被描述为 RDD。这已成功用于 Spark Streaming - 基于 RDD API 的用于流处理的现已过时的 Spark 模块。
检查点会截断要检查点的 RDD 的谱系。这已在 Spark MLlib 中的迭代机器学习算法(如 ALS)中成功使用。
Spark SQL 中的数据集检查点使用检查点来截断被检查点的数据集的底层 RDD 的沿袭。
归档时间: |
|
查看次数: |
2558 次 |
最近记录: |