Kis*_*ore 5 hadoop apache-spark rdd
我刚开始学习Spark.根据我的理解,Spark将中间输出存储在RAM中,因此与之相比非常快Hadoop.如果我错了,请纠正我.
我的问题是,如果我的中间输出是2 GB而我的空闲RAM是1 GB,那么在这种情况下会发生什么?这可能是一个愚蠢的问题,但我还没有理解Spark的内存概念.任何人都可以向我解释一下Spark的内存概念吗?
谢谢
这个问题是询问Spark中的RDD持久性.
您可以使用persist()或cache()方法标记要保留的RDD.第一次在动作中计算它,它将保留在节点的内存中.Spark的缓存是容错的 - 如果丢失了RDD的任何分区,它将使用最初创建它的转换自动重新计算.
根据您为RDD设置存储级别的方式,可以配置不同的结果.例如,如果将存储级别设置为MEMORY_ONLY(默认存储级别),则输出将尽可能多地存储在内存中,并在运行时重新计算其余的RDD.您可以保留RDD并应用以下存储级别:rdd.persist(MEMORY_ONLY).
在您的示例中,将计算1GB的输出并在内存中,并在将来步骤需要时计算另一个1GB.根据您的使用情况,还可以设置其他存储级别:
MEMORY_AND_DISK - 计算整个RDD,但在必要时将一些内容溢出到磁盘MEMORY_ONLY_SER,MEMORY_AND_DISK_SER- 与上述相同,但所有元素都是序列化的DISK_ONLY - 将所有分区直接存储到磁盘MEMORY_ONLY_2,MEMORY_AND_DISK_2- 与上述相同,但分区被复制两次以获得更大的容差同样,您必须查看用例以确定最佳存储级别.在某些情况下,重新计算RDD实际上可能比从磁盘加载所有内容更快.在其他情况下,快速序列化程序可以减少从磁盘中获取的数据,从而快速响应相关数据.
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |