Spark三大核心数据结构(一)——RDD的概念、血缘和持久化

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丢失还可以通过血缘关系来回溯;


 
  1. 对rdd加上当前时间戳并做Cache
  2. val cache = rdd.map(_.toString + System.currentTimeMillis).cache
  3. cache.collect

(2)checkpoint是将RDD数据保存到持久化存储(eg:HDFS的节点中)中,并通过创建备份保证数据的安全性,这样就可以切断RDD之间的血缘关系,checkpoint后的RDD可以直接从checkpoint拿到数据而并不需要知道其父RDDs,checkpoint是一种常用的RDD缓存手段,相比Cache更加安全。


 
  1. 1. 先在HDFS上设置检查点路径
  2. sc.setCheckpointDir( "hdfs://hadoop100:9000/checkpoint")
  3. 2. 将rdd转化为携带当前时间戳并做checkpoint
  4. val ch = rdd.map(_.toString + System.currentTimeMillis)
  5. ch.checkpoint
  6. 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="{&quot;mod&quot;:&quot;popu_824&quot;}"><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="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><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="{&quot;mod&quot;:&quot;popu_379&quot;}" 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="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                    </div>
                            </div>
                    </div>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值