即cache 和 checkpoint 的显著区别是:cache把 RDD 计算出来然后放在内存中, 但是RDD 的依赖链
也不能丢掉, 当某个点某个 executor 宕了, 上面cache 的RDD就会丢掉, 需要通过依赖链重新计算
出来;而 checkpoint 是把 RDD 保存在 HDFS中, 是多副本可靠存储,所以依赖链就可以丢掉了,即斩
断了依赖。
这里值得注意的是:cache 机制是每计算出一个要 cache 的 partition 就直接将其 cache 到内存了。但
checkpoint 没有使用这种第一次计算得到就存储的方法,而是等到 job 结束后另外启动专门的 job 去
完成 checkpoint 。也就是说需要 checkpoint 的 RDD 会被计算两次。因此,在使用 checkpoint 的时
候,应该先执行 cache 操作,这样第二次运行的 job 就不用再去计算该 rdd 了,直接读取 cache 写磁
盘。
cache:主要目的是RDD数据缓存,不会截断血缘关系,使用计算过程中的数据缓存。
checkpoint:主要目的是容错,会截断依赖,checkpoint 会额外提交一次任务。
(3)问题扩展
RDD、DataSet、DStream的默认缓存级别;对各种缓存级别的理解;
缓存与检查点使用的时机,以及正确的使用姿势
(4)结合项目使用
问题7 ★★★
RDD、DataFrame、DataSet三者的区别与联系
(1)问题分析:考察Spark的基本概念
(2)核心问题回答
RDD
RDD是一个懒执行的、不可变的、可以支持Lambda表达式的并行数据集合
RDD的最大好处就是简单,API丰富、易于使用
RDD的劣势是性能限制,数据序列化、反序列化的成本高
DataFrame
与RDD类似,DataFrame也是一个分布式数据容器;
DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema;
从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友
好,门槛更低;
DataSet
是Dataframe API的一个扩展,是Spark最新的数据抽象
用户友好的API风格,既具有类型安全检查也具有Dataframe的查询优化特性
Dataset支持编解码器,当需要访问非堆上的数据时可以避免反序列化整个对象,提高了效率
样例类被用来在Dataset中定义数据的结构信息,样例类中每个属性的名称直接映射到DataSet中
的字段名称