一.RDD是什么,
1.有哪些特点(面试常考题)。
2.RDD常用的3种创建方式。
3. RDD的常用算子:
转换、动作、
4. 缓存。共享变量的使用。
5. Spark的核心概念。
6. Spark运行架构。
二.rdd高级应用
1.认知rdd缓存的优点
RDD缓存机制
2.掌握RDD缓存策略的选择。
3.认知共享变量的使用。
4.掌握Spark的运行架构。
一.RDD是什么,
1.有哪些特点(面试常考题)。
2.RDD常用的3种创建方式。
3. RDD的常用算子:
转换、动作、
4. 缓存。共享变量的使用。
5. Spark的核心概念。
6. Spark运行架构。
5.宽依赖对比窄依赖相比于宽依赖,窄依赖对优化更有利 ,主要基于以下两点。
(1)宽依赖往往对应着shuffle操作(shuffle就是将同一个节点的数据进行分区排序,分发给各个子rdd),需要在运行过程中将同一个父RDD的分区传入到不同的子RDD分区中,中间可能涉及多个节点之间的数据传输;而窄依赖的每个父RDD的分区只会传入到一个子RDD分区中,通常可以在一个节点内完成转换。
(2)当RDD分区丢失时(某个节点故障),Spark会对数据进行重新计算。对于窄依赖,由于父RDD的一个分区只对应一个子RDD分区,这样只需要重新计算和子RDD分区对应的父RDD分区即可,所以这个重新计算对数据的利用率是100%。对于宽依赖,重算的父RDD分区对应多个子RDD分区,这样实际上父RDD 中只有一部分数据是被用于恢复这个丢失的子RDD分区的,另一部分数据对应子RDD的其他未丢失分区,这就造成了多余的计算。一般情况下,宽依赖中的子RDD分区通常来自于多个父RDD分区,极端情况下,所有的父RDD分区都要进行重新计算。
如图10.6所示,b1分区丢失,则需要重新计算a1、a2和a3,这就产生了冗余计算(a1,a2,a3中对应b2的数据)。
二.rdd高级应用
1.认知rdd缓存的优点
RDD缓存机制:
1)缓存的概念
将父rdd计算的结果缓存起来,因为我们有时候会多次使用同一个rdd的结果。
RDD可以使用persist()方法或cache()方法进行持久化
2)是否使用缓存对比
3)缓存级别
(1)MEMORY_ONLY:将RDD以反序列化Java对象的形式存储在JVM中。如果内存空间不够,部分数据分区将不再缓存,在每次需要用到这些数据时再重新进行计算。这是默认的级别。
(2)MEMORY_AND_DISK:将RDD以反序列化Java对象的形式存储在JVM中。如果内存空间不够,将未缓存的数据分区存储到磁盘,需要使用这些分区时再从磁盘读取。
(3)MEMORY_ONLY_SER:将RDD以序列化的Java对象的形式进行存储(每个分区为一个byte数组)。这种方式会比反序列化对象的方式节省很多空间,尤其是在使用快速序列化时会节省更多的空间,但是在读取时会增加CPU的计算负担。
(4)MEMORY_AND_DISK_SER:类似于MEMORY_ONLY_SER,但是溢出的分区会存储到磁盘,而不是在用到它们时重新计算。
(5)DISK_ONLY:只在磁盘上缓存RDD。
4)如何选择存储级别Spark的存储级别选择的核心问题是在内存使用率和CPU效率之间进行权衡。
建议按下面的过程进行存储级别的选择。
(1)如果使用默认的存储级别(MEMORY_ONLY),存储在内存中的RDD没有发生溢出,那么就选择默认的存储级别。默认存储级别可以最大程度地提高CPU的效率,可以使RDD上的操作以最快的速度运行。
(2)如果内存不能全部存储RDD,那么使用MEMORY_ONLY_SER,并挑选一个快速序列化库将对象序列化,以节省内存空间。使用这种存储级别,计算速度仍然很快。
(3)除了在计算该数据集的代价特别高或者在需要过滤大量数据的情况下,尽量不要将溢出的数据存储到磁盘。因为,重新计算这个数据分区的耗时与从磁盘读取这些数据的耗时差不多。
(4)如果想快速还原故障,建议使用多副本存储级别(例如,在服务出故障时需要快速恢复的场景下使用Spark作为Web应用的后台服务)。所有的存储级别都通过重新计算丢失的数据的方式,提供了完全容错机制。但是多副本级别在发生数据丢失时,不需要重新计算对应的数据库,可以让任务继续运行。
(5)在高内存消耗或者多任务的环境下,还处于实验阶段的OFF_HEAP模式有以下几个优势:支持多个executor使用Tachyon中的同一个内存池;显著减少了内存回收的代价;如果个别executor崩溃掉,缓存的数据不会丢失。
2.掌握RDD缓存策略的选择。
3.认知共享变量的使用。
4.掌握Spark的运行架构。