Spark中三大核心数据结构:
RDD、
广播变量(分布式只读变量)、
累加器(分布式只写变量)、
1. RDD的概念和特点:
RDD,全称Resilient Distributed Dataset,弹性分布式数据集,作为Spark中最基础的数据抽象,类似Java中对象的概念;
它代表一个不可变(只读)、可分区、里面的元素可并行计算的集合,List、Set、Map都是RDD的常见形式。
特点:只读、分区、血缘、缓存、checkpoint
2. RDD的血缘关系(宽窄依赖)
RDD是只读的分区的数据集,对RDD进行改动只能通过RDD的转换操作来实现,多个互相转换的RDDs之间存在血缘关系,也即RDD之间的依赖,分为Narrow Dependencies(一个父RDD对应一个子RDD)和Wide Dependencies(一个父RDD对应多个子RDD);
RDD的执行是按照血缘关系进行延时计算,血缘关系可以天然的实现数据的容错,如果数据迭代出错,可以通过血缘关系进行回溯重建;并且如果血缘关系过长,也可以通过持久化RDD来切断血缘;
3. RDD支持缓存Cache和CheckPoint这两种持久化方式:
(1)缓存Cache一般适用于应用程序多次需要使用同一个RDD,
eg:保存到HDFS中(saveAsHadoopFile),缓存的RDD只有在第一次计算时会根据血缘关系得到分区数据,后续用到该RDD直接从缓存中取得数据而不再依据血缘关系计算,这样的好处是加速了后期的RDD重用;
因为Cache本身只是MemoryOnly,可能会随着内存释放,这样释放后数据会丢失,不安全;所以Cache并不会切断RDDs的血缘关系,如果Cache丢失还可以通过血缘关系来回溯;
对rdd加上当前时间戳并做Cache val cache = rdd.map(_.toString + System.currentTimeMillis).cache cache.collect
(2)checkpoint是将RDD数据保存到持久化存储(eg:HDFS的节点中)中,并通过创建备份保证数据的安全性,这样就可以切断RDD之间的血缘关系,checkpoint后的RDD可以直接从checkpoint拿到数据而并不需要知道其父RDDs,checkpoint是一种常用的RDD缓存手段,相比Cache更加安全。
-
1. 先在HDFS上设置检查点路径
-
sc.setCheckpointDir(
"hdfs://hadoop100:9000/checkpoint")
-
-
2. 将rdd转化为携带当前时间戳并做checkpoint
-
val ch = rdd.map(_.toString + System.currentTimeMillis)
-
ch.checkpoint
-
-
ch.collect
<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true"> <use xlink:href="#csdnc-thumbsup"></use> </svg><span class="name">点赞</span> <span class="count"></span> </a></li> <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true"> <use xlink:href="#icon-csdnc-Collection-G"></use> </svg><span class="name">收藏</span></a></li> <li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{"mod":"1582594662_002"}"><svg class="icon" aria-hidden="true"> <use xlink:href="#icon-csdnc-fenxiang"></use> </svg>分享</a></li> <!--打赏开始--> <!--打赏结束--> <li class="tool-item tool-more"> <a> <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg> </a> <ul class="more-box"> <li class="item"><a class="article-report">文章举报</a></li> </ul> </li> </ul> </div> </div> <div class="person-messagebox"> <div class="left-message"><a href="https://blog.csdn.net/wx1528159409"> <img src="https://profile.csdnimg.cn/3/E/F/3_wx1528159409" class="avatar_pic" username="wx1528159409"> <img src="https://g.csdnimg.cn/static/user-reg-year/2x/1.png" class="user-years"> </a></div> <div class="middle-message"> <div class="title"><span class="tit"><a href="https://blog.csdn.net/wx1528159409" data-report-click="{"mod":"popu_379"}" target="_blank">攻城狮Kevin</a></span> </div> <div class="text"><span>发布了201 篇原创文章</span> · <span>获赞 253</span> · <span>访问量 17万+</span></div> </div> <div class="right-message"> <a href="https://im.csdn.net/im/main.html?userName=wx1528159409" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信 </a> <a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a> </div> </div> </div>