Spark最重要的一个功能,就是在不同操作间,持久化(或缓存)一个数据集在内存中。当你持久化一个RDD,每一个结点都将把它的计算分块结果保存在内存中,并在对此数据集(或者衍生出的数据集)进行的其它动作中重用。这将使得后续的动作(Actions)变得更加迅速(通常快10倍)。缓存是用Spark构建迭代算法的关键。
你可以用persist()或cache()方法来标记一个要被持久化的RDD,然后一旦首次被一个动作(Action)触发计算,它将会被保留在计算结点的内存中并重用。Cache有容错机制,如果RDD的任一分区丢失了,通过使用原先创建它的转换操作,它将会被自动重算(不需要全部重算,只计算丢失的部分)。当需要删除被持久化的RDD,可以用unpersistRDD()来完成该工作。
此外,每一个RDD都可以用不同的保存级别进行保存,从而允许你持久化数据集在硬盘,或者在内存作为序列化的Java对象(节省空间),甚至于跨结点复制。这些等级选择,是通过将一个org.apache.spark.storage.StorageLevel对象传递给persist()方法进行确定。cache()方法是使用默认存储级别的快捷方法,也就是StorageLevel.MEMORY_ONLY(将反序列化的对象存入内存)。
StorageLevel有五个属性,分别是:useDisk_是否使用磁盘,useMemory_是否使用内存,useOffHeap_是否使用堆外内存如:Tachyon,deserialized_是否进行反序列化,replication_备份数目。
完整的可选存储级别如下:
存储级别的选择
Spark的不同存储级别,旨在满足内存使用和CPU效率权衡上的不同需求。我们建议通过以下的步骤来进行选择:
•如果你的RDDs可以很好的与默认的存储级别(MEMORY_ONLY)契合,就不需要做任何修改了。这已经是CPU使用效率最高的选项,它使得RDDs的操作尽可能的快。•如果不行,试着使用MEMORY_ONLY_SER并且选择一个快速序列化的库使得对象在有比较高的空间使用率的情况下,依然可以较快被访问。
•
尽可能不要存储到硬盘上,除非计算数据集的函数,计算量特别大,或者它们过滤
了大量的数据。否则,重新计算一个分区的速度,和与从硬盘中读取基本差不多快。
总结:调用persist()或cache()方法使用的是MEMORY_ONLY存储级别,对于广播变量,使用的是MEMORY_AND_DISK存储级别。如果想使用其他存储级别,可以调用persist(StroageLevel)。MEMORY_AND_DISK存储级别时当内存足够时直接保存到内存队列中,当内存不足时,将释放掉不属于同一个RDD的block的内存。
- 浏览: 155459 次
最新评论
-
zhou9629:
spring redis 整合 -
see_you_again:
回复一楼:我也只是初学
spark使用logback+slf4j 替换log4j+slf4j -
wu_shao_jie:
嗨,我在用spark-submit命令提交作业的时候,应用程序 ...
spark使用logback+slf4j 替换log4j+slf4j -
zhangfc682:
引用
Eclipse代码模板
相关推荐
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点...
**五、RDD持久化** RDD的持久化是指将中间结果存储在内存或磁盘上,以便后续的计算可以直接复用,提高数据处理效率。在实验中,可以通过调用persist()或cache()方法实现RDD的持久化。 **六、实验总结** 通过对Spark...
- **RDD持久化(Persist)**: 在Spark中,可以通过调用`persist`或`cache`方法来缓存RDD,从而避免重复计算。需要注意的是,在调用`persist`后不应再有其他的转换操作,以防止数据集的更新导致缓存失效。 - **...
- 存储策略:可以选择将RDD持久化到内存、磁盘或同时存储,以便在后续操作中重用,减少计算成本。 4. 分区与并行性: - RDD的分区决定了其在集群中的分布,每个分区可以在一个工作节点上独立计算。 - 可以通过`...
RDD持久化允许我们将中间结果缓存到内存或磁盘,以避免重复计算,提高整体性能。Spark支持多种持久化级别,如MEMORY_ONLY、MEMORY_AND_DISK等,可以根据任务需求和资源情况选择合适的级别。 综上所述,这个压缩包...
* RDD 持久化:RDD 的持久化机制 * 监控应用程序:如何监控 Spark 应用程序 * 性能调优:Spark 的性能调优技巧 其他 * Copyright 和 License:Spark 的版权和许可信息 * 来源:Spark 官方文档的来源 * 许可信息:...
2. **持久化**:`cache`方法用于将RDD持久化到内存中,这是为了提高数据处理的效率,避免在多次操作间重复计算。`persist`方法允许用户指定持久化的存储级别,比如`MEMORY_ONLY`、`DISK_ONLY`等。 3. **非持久化**...
Spark 应用程序都由一个驱动程序(driver programe)构成,驱动程序在集群上运行用户...用户可以要求 Spark 将 RDD 持久化(persist)到内存中,来让它在并行计算中 高效地重用。最后,RDDs 能在节点失败中自动地恢复过来。
本篇笔记主要探讨Spark中的共享变量、RDD持久化、checkpoint机制、运行模式以及任务调度等相关知识点。 1. **共享变量** - **累加器(Accumulator)**:累加器是一种只能增加不能减少的共享变量,常用于统计任务中...
### Spark性能调优与经验总结 #### 一、性能调优概述 在Spark的应用场景中,性能调优是一...此外,合理地利用RDD持久化功能也是提高性能的重要手段之一。通过以上这些方法,可以有效地提升Spark应用的整体性能表现。
- **RDD持久化**:通过持久化机制,RDD可以在内存、磁盘甚至外部存储中保存,以提升计算性能。 SparkCore的实例练习是学习的关键,通过以下三个实例,你可以深入理解RDD的实际应用: 1. **计算独立IP数**:这通常...
为了提高效率,Spark允许将RDD持久化到内存中,这样在后续的计算中可以重用,减少重复计算。此外,Spark还提供了广播变量(Broadcast Variables)和累加器(Accumulators)两种共享变量类型,前者用于向所有工作节点...
7. **持久化机制(RDD持久化)**: - 在Spark中,持久化机制可以缓存中间数据,避免重复计算,提升性能。 - 持久化可以通过调用RDD的cache()或persist()方法实现,用户可以根据数据的使用频率和作业的性能要求选择...
用户也可以请求Spark将RDD持久化在内存中,这样就可以跨多个并行操作高效重用。此外,文档还介绍了关于如何在分布式环境中传递函数给Spark,理解闭包(closure)的作用域,以及如何在本地模式与集群模式之间切换。 ...
2.6RDD持久化操作 21 2.7注意事项 23 2.7并行度调优 24 2.8分区方式 25 3Examle:PageRank 27 第四章 Spark编程进阶 29 1共享变量 29 1.1累加器 30 1.2广播变量 31 2基于分区进行操作 32 3与外部程序间的管道 33 4...
这里使用了`persist`方法将RDD持久化到内存中,`StorageLevel.MEMORY_ONLY`表示只将数据缓存在内存中。 - **3.3.2 Spark的持久化级别** - **MEMORY_ONLY**: 只缓存到内存中,当内存不足时会被移除。 - **MEMORY_...
每个 RDD 可以通过转换操作(如 map、filter)从另一个 RDD 创建,并且可以被持久化到内存或磁盘以加速后续计算。 2. **内部结构与分区** RDD 分区是其内部数据的逻辑分组,每个分区可以在集群的不同节点上独立执行...
RDD 持久化 共享变量 Broadcast Variables (广播变量) Accumulators (累加器) 部署应用到集群中 使用 Java / Scala 运行 spark Jobs 单元测试 Spark 1.0 版本前的应用程序迁移 下一步 Spark Streaming...