项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.rdd简介

与许多专有的大数据处理平台不同,Spark建立在统一抽象的RDD之上,使得它可以以基本一致的方式应对不同的大数据处理场景,包括MapReduce,Streaming,SQL,Machine Learning以及Graph等。这即Matei Zaharia所谓的“设计一个通用的编程抽象(Unified Programming Abstraction)。
RDD的全称为Resilient Distributed Datasets,是一个并行的,容错的数据结构,方便让用户显式地存储于内存中(当内存不够只有存储在磁盘上),并且方便用户控制数据的分区。
RDD是spark中的核心概念,是一个只读的分布式内存数据集。与hadoop不一样的地方在于这个数据集是缓存在内存之中,特别方便于数据的迭代计算。在用户访问RDD时,指针只会指向与操作相关的部分,这样就避免了对整个数据集进行全局扫描。

2.transformation与action

RDD中提供了两种类型的操作:transformation与action。
首先需要明确的一点是:rdd无论执行了多少次的transformation操作,rdd都没有真正执行运算,只是从一个rdd转换成另一个rdd而已。只有当某一个action操作被执行后,才真正触发运算。这就是所谓的transformation采取的是懒加载策略(lazy)。
transformation,顾名思义,是得到一个新的rdd。生成一个rdd有两种方法:1.从数据源生成一个rdd。2.由一个rdd生成一个新的rdd。
常见的transformation有map,filter,flatMap,union,join,reduceByKey等操作,后续再进行详细的介绍。
action,是得到一个值,或者得到一个结果直接cache到内存中。
常见的action操作有take,count,collect,reduce,foreach,saveAsTextFile,saveAsSequenceFile等。

3.窄依赖与宽依赖

RDD作为数据结构,本质上是一个只读的分区记录集合。一个RDD可以包含多个分区,每个分区就是一个dataset片段。RDD可以相互依赖。如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,则称之为窄依赖narrow dependency;若多个Child RDD分区都可以依赖,则称之为宽依赖wide dependency。不同的操作依据其特性,可能会产生不同的依赖。例如map操作会产生narrow dependency,而join操作则产生wide dependency。

Spark之所以将依赖分为narrow与wide,基于两点原因:一个结点上得管道化执行与更好地处理失败恢复。

首先,narrow dependencies可以支持在同一个cluster node上以管道形式执行多条命令,例如在执行了map后,紧接着执行filter。相反,wide dependencies需要所有的父分区都是可用的,可能还需要调用类似MapReduce之类的操作进行跨节点传递。
其次,则是从失败恢复的角度考虑。narrow dependencies的失败恢复更有效,因为它只需要重新计算丢失的parent partition即可,而且可以并行地在不同节点进行重计算。而wide dependencies牵涉到RDD各级的多个Parent Partitions。(此部分内容摘自于网络)

4.容错

一般来说,分布式数据集的容错性有两种方式:数据检查点和记录数据的更新。
面向大规模数据分析,数据检查点操作成本很高,需要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往比内存带宽低得多,同时还需要消耗更多的存储资源。
因此,Spark选择记录更新的方式。但是,如果更新粒度太细太多,那么记录更新成本也不低。Spark RDD只支持粗粒度的操作,对一个RDD的操作都会被作用于该RDD的所有数据;为了保证RDD的高可用性RDD通过使用Lineage(血统)记录了RDD演变流程(从其他RDD到当前RDD所做的操作) 当RDD分区数据丢失时可以通过Lineage的信息重新计算与恢复分区数据,或进行RDD的重建。

spark rdd详解一(rdd入门)相关推荐

  1. Spark函数详解系列--RDD基本转换

    http://www.cnblogs.com/MOBIN/p/5373256.html 摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行 ...

  2. Spark核心编程系列(一)——RDD详解

    目录 Spark核心编程系列--RDD详解(一) RDD概念 RDD与IO之间的关系 RDD的核心属性 RDD执行原理 基础编程 RDD创建 RDD的并行度与分区 参考 Spark核心编程系列--RD ...

  3. 2021年大数据Spark(十二):Spark Core的RDD详解

    目录 RDD详解 为什么需要RDD? 什么是RDD? RDD的5大特性 第一个:A list of partitions 第二个:A function for computing each split ...

  4. spark RDD详解及源码分析

    spark RDD详解及源码分析 @(SPARK)[spark] spark RDD详解及源码分析 一基础 一什么是RDD 二RDD的适用范围 三一些特性 四RDD的创建 1由一个已经存在的scala ...

  5. spark 调度模块详解及源码分析

    spark 调度模块详解及源码分析 @(SPARK)[spark] spark 调度模块详解及源码分析 一概述 一三个主要的类 1class DAGScheduler 2trait TaskSched ...

  6. Spark分区详解!DT大数据梦工厂王家林老师亲自讲解!

    Spark分区详解!DT大数据梦工厂王家林老师亲自讲解! http://www.tudou.com/home/_79823675/playlist?qq-pf-to=pcqq.group 一.分片和分 ...

  7. spark 算子 详解

    参考文档:Spark算子详解及案例分析(分类助记) - 云+社区 - 腾讯云 1.combineByKey .作为spark 的核心算子之一,有必要详细了解.reduceByKey 和groupByK ...

  8. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  9. python爬虫入门实例-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 要求是把你所在城市过去一年的历史数据爬出来. 分析网站 我们可以看到,我们需要的天气数据都是放在图表上的,在切换月份的时候,发现只有 ...

  10. python编程入门与案例详解pdf-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 这次要爬的站点是这个:http://www.weather.com.cn/forecast/ 要求是把你所在城市过去一年的历史数据爬 ...

最新文章

  1. 常见的神经网络求导总结!
  2. linux下mkdir
  3. open,write,read与fopen,fwrite,fread的区别
  4. mysql可以偏移注入_access数据库一般注入方法及偏移注入
  5. rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国
  6. 细学PHP 09 MySql
  7. pycharm如何汉化
  8. COJ 1700:联通与次联通
  9. 我总结的 jsonp
  10. bsp 总结正规流程
  11. html动态线条背景鼠标,动态背景线条鼠标移动线条汇聚---背景特效
  12. vue中自己实现的页面切换标签手动关闭功能
  13. 沟通书籍排行榜前十名 提高沟通能力的十大书籍推荐
  14. HDS USPV-VSP HP XP24000 Raid崩溃阵列损坏多盘损坏数据恢复方法思路分享
  15. java中两个数组的并集_Java数组并集
  16. cuda 的driver API 和 runtime API
  17. 《区块链技术进阶与实践》之积分系统示例讲解
  18. 【ElenmentUI el-date-picker日期选择器,结束时间不得早于开始时间,且只能选择距开始时间指定天数的日期】
  19. Mob研究院 |2019互联网医疗行业洞察
  20. 工作中常见的网络设备图片

热门文章

  1. 复星旅文冲刺港交所:上半年营收66亿 核心收入来自度假村
  2. 快速入门分布式消息队列之 RabbitMQ(2)
  3. 虚拟Linux系统使用Windows系统oracle数据库
  4. [LeetCode]Ugly Number
  5. Python面向对象成员修饰符
  6. 51单片机课程设计:基于TCS230/3200的颜色复制显示器
  7. UVA 1252 十五 Twenty Questions
  8. spring-aop源码分析
  9. Linux/Android——input_handler之evdev (四) 【转】
  10. 验证堆表(heap table)存储方式