RDD是spark抽象的基石,可以说整个spark编程就是对RDD进行的操作

 
RDD是弹性的分布式数据集,它是只读的可分区的,这个数据集的全部或者部分数据可以缓存在内存中,在多次计算间重用。所谓的弹性意思是:内存不够时可以与磁盘进行交换。这是RDD另一个特性:内存计算。就是将数据保存到内存中,同时为了解决内存容量大小的问题,他允许所有的数据我们可以自由的设置cache,和 是否cache
 
RDD的特征:
(1)有一个分片列表,就是这个RDD可以被切分,和hadoop一样,能被切分的数据才能并行计算
(2)每一个分片由一个函数计算,这个函数是compute函数
(3)对其他RDD的依赖列表,依赖分为:宽依赖和窄依赖(narrow)。并不是所有的RDD都有依赖
(4)可选:key-value型的RDD是根据哈希值来区分的,类似于mapreduuce的parttioner接口,控制key分配到那个reduce
(5)可选:每一个分片的优先计算位置,就像hdfs的block的位置是优先计算的
基于RDD进行抽象,spark可以以一致的方式处理不同的大数据场景,包括mapreduce,streaming,sql,maching learning以及Graph等,正是RDD让spark有了无可比拟处理大数据的平台的优势
 
RDD是一个容错的,并行的数据结构。可以让用户显示的将数据存储到磁盘或内存中,并能够控制数据的分区。
通常来讲,针对数据处理有不同的处理模型:iterative algorithms,relational queries,mapreduce, stream proccessing模型,比如hadoop使用的是mapreduce模型,strom使用是stream processing模型。而spark混合了这四种模型,所以spark可以处理各种大数据处理场景.
 
RDD的数据结构
RDD作为数据结构,本质上是一个只读的,可分区的数据集,每一个分区都是一个datasets片段。RDD可以相互依赖,如果RDD的每一个分区都只能被一个child RDD使用,那这个RDD就是narrow(窄) dependency;如果RDD的每一个分区可以被多个child RDD使用,那么这个RDD就是shuffle(wide) dependency,不同的操作根据其特性会产生不同的依赖,比如:map操作会产生narrow dependency,keybyreduce会产生shuffle dependency。
 
spark将依赖分为narrow dependnecy和shuffle dependency主要是因为两点:
一:narrow dependency可以支持在同一个cluster node上以pipeline的形式执行多条命令。shuflle dependency要求所有的父分区都是可用的
二:从失败恢复的角度考虑
narrow dependency的恢复更加有效,因为它只需要重新计算丢失的parent parttion就可,并且可以并行的在不同的节点进行计算。而shuffle dependency它涉及到RDD各级多个parent parttions

解析spark RDD的更多相关文章

  1. 通过WordCount解析Spark RDD内部源码机制

    一.Spark WordCount动手实践 我们通过Spark WordCount动手实践,编写单词计数代码:在wordcount.scala的基础上,从数据流动的视角深入分析Spark RDD的数据 ...

  2. Spark RDD深度解析-RDD计算流程

    Spark RDD深度解析-RDD计算流程 摘要  RDD(Resilient Distributed Datasets)是Spark的核心数据结构,所有数据计算操作均基于该结构进行,包括Spark ...

  3. Spark RDD概念学习系列之rdd的依赖关系彻底解密(十九)

    本期内容: 1.RDD依赖关系的本质内幕 2.依赖关系下的数据流视图 3.经典的RDD依赖关系解析 4.RDD依赖关系源码内幕 1.RDD依赖关系的本质内幕 由于RDD是粗粒度的操作数据集,每个Tra ...

  4. Spark RDD编程核心

    一句话说,在Spark中对数据的操作其实就是对RDD的操作,而对RDD的操作不外乎创建.转换.调用求值. 什么是RDD RDD(Resilient Distributed Dataset),弹性分布式 ...

  5. Apache Spark 2.2.0 中文文档 - Spark RDD(Resilient Distributed Datasets)论文 | ApacheCN

    Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD ...

  6. Apache Spark RDD(Resilient Distributed Datasets)论文

    Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD ...

  7. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器

    第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...

  8. 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析 + Spark Streaming 概述、运行、解析 + DStream 的输入、转换、输出 + 优化

    第1章 Spark Streaming 概述1.1 什么是 Spark Streaming1.2 为什么要学习 Spark Streaming1.3 Spark 与 Storm 的对比第2章 运行 S ...

  9. 大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank 实例

    第1章 Spark GraphX 概述1.1 什么是 Spark GraphX1.2 弹性分布式属性图1.3 运行图计算程序第2章 Spark GraphX 解析2.1 存储模式2.1.1 图存储模式 ...

随机推荐

  1. linux-单引号、双引号、反引号的区别。

    一.单引号和双引号 单引号和双引号,都是为了解决中间有空格的问题. 因为空格在Linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错.为了避免这个问 ...

  2. Linux下防止文件误删方法

    转载:http://coolsky.blog.51cto.com/177347/1230332 Linux系统中,在root帐号下使用rm * -rf是非常危险的,一不小心就可能删除系统中的重要文件. ...

  3. Sync 攻击原理及防范技术

    据统计,在所有黑客攻击事件中,SYN攻击是最常见又最容易被利用的一种攻击手法.相信很多人还记得2000年YAHOO网站遭受的攻击事例,当时黑客利用的就是简单而有效的SYN攻击,有些网络蠕虫病毒配合SY ...

  4. IIS Express HTTP 错误 500.22

    错误描述: HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 最可能的原因: 此应用程序在 system.we ...

  5. [置顶] kubernetes将外部服务映射为内部服务

    在实际应用中,一般不会把mysql这种重IO.有状态的应用直接放入k8s中,而是使用专用的服务器来独立部署.而像web这种无状态应用依然会运行在k8s当中,这时web服务器要连接k8s管理之外的数据库 ...

  6. linux下小试redis demo

    先启动  redis-server /etc/redis/redis.conf package com.test; import java.util.ArrayList; import java.ut ...

  7. 上机题目(0基础)- Java网络操作-Socket实现client和server端通信二(Java)

    上一节实现了client像server端发送请求.本节将实现server端向client回传信息.实现原理非常easy,在原来的基础上.在server端实现输出流,在client实现输入流就可以,详细 ...

  8. Spring配置xml版

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  9. EffectiveJava(21)策略模式多种方式实现字符串比较

    **调用对象上的方法通常是执行该对象上的某项操作**. 如果一个对象的方法执行其他对象的操作,一个类仅仅导出这个方法(它的实例相当于一个指向该方法的指针),这样的实例被称为函数对象 例如: /** * ...

  10. 如何Tomcat注册成系统服务

    1.开始->运行(windos+r)中敲cmd,DOS界面2.cd到tomcat的bin目录下3.运行命令service.bat install      这里可以指定注册服务的名字,然后就可以 ...