Spark 编程模型(上)

初识RDD

什么是RDD?

定义:Resilient distributed datasets (RDD), an efficient, general-purpose and fault-tolerant abstraction for sharing data in cluster applications.

  RDD 是只读的。  

   RDD 是分区记录的集合。

   RDD 是容错的。--- lineage RDD 是高效的。

   RDD 不需要物化。---物化:进行实际的变换并最终写入稳定的存储器上

  RDD 可以缓存的。---可指定缓存级别

RDD是spark的核心,也是整个spark的架构基础,RDD是弹性分布式集合(Resilient Distributed Datasets)的简称,是分布式只读且已分区集合对象。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。

RDD接口

RDD的本质特征

RDD--partitions

Spark中将1~100的数组转换为rdd。

通过第15行的size获得rdd的partition的个数,此处创建rdd显式指定定分区个数2,默认数值是这个程序所分配到的资源的cpu核的个数。

RDD-preferredLocations

返回此RDD的一个partition的数据块信息,如果一个数据块(block)有多个备份在返回所有备份的location地址信息:主机ip或域名。

作用:spark在进行任务调度室尽可能根据block的地址做到本地计算。

RDD-dependencies

RDD之间的依赖关系分为两类:

● 窄依赖

每个父RDD的分区都至多被一个子RDD的分区使用,即为OneToOneDependecies。

 ● 宽依赖

多个子RDD的分区依赖一个父RDD的分区,即为ShuffleDependency 。例如,map操作是一种窄依赖,而join操作是一种宽依赖(除非父RDD已经基于Hash策略被划分过了,co-partitioned)。

窄依赖相比宽依赖更高效资源消耗更少

  • 允许在单个集群节点上流水线式执行,这个节点可以计算所有父级分区。例如,可以逐个元素地依次执行filter操作和map操作。
  • 相反,宽依赖需要所有的父RDD数据可用并且数据已经通过类MapReduce的操作shuffle完成。

 在窄依赖中,节点失败后的恢复更加高效。

  • 因为只有丢失的父级分区需要重新计算,并且这些丢失的父级分区可以并行地在不同节点上重新计算。
  • 与此相反,在宽依赖的继承关系中,单个失败的节点可能导致一个RDD的所有先祖RDD中的一些分区丢失,导致计算的重新执行。

RDD-compute

分区计算:Spark对RDD的计算是以partition为最小单位的,并且都是对迭代器进行复合,不需要保存每次的计算结果。

RDD- partitioner

分区函数:目前spark中提供两种分区函数:

  • HashPatitioner(哈希分区)
  • RangePatitioner(区域分区)

且partitioner只存在于(K,V)类型的RDD中,rdd本身决定了分区的数量。

RDD- lineage

val lines = sc.textFile("hdfs://...")
// transformed RDDs
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split("\t")).map(r => r(1))
messages.cache()
// action 1
messages.filter(_.contains("mysql")).count()
// action 2
messages.filter(_.contains("php")).count()

RDD经过trans或action后产生一个新的RDD,RDD之间的通过lineage来表达依赖关系,lineage是rdd容错的重要机制,rdd转换后的分区可能在转换前分区的节点内存中。

典型RDD的特征

不同角度看RDD

Scheduler Optimizations

以上就是博主为大家介绍的这一板块的主要内容,这都是博主自己的学习过程,希望能给大家带来一定的指导作用,有用的还望大家点个支持,如果对你没用也望包涵,有错误烦请指出。如有期待可关注博主以第一时间获取更新哦,谢谢!

原文地址:https://www.cnblogs.com/zimo-jing/p/9641583.html

时间: 2024-10-09 19:30:36

Spark 编程模型(上)的相关文章

Spark入门实战系列--3.Spark编程模型(上)--概念及SparkShell实战

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送–Spark入门实战系列>获取 1 Spark编程模型 1.1 术语定义 应用程序(Application): 基于Spark的用户程序,包含了一个Driver Program 和集群中多个的Executor: 驱动程序(Driver Program):运行Application的main()函数并且创建SparkContext,通常用SparkContext代表Driver Program: 执行单元(Executor): 是为某

Spark机器学习:Spark 编程模型及快速入门

http://blog.csdn.net/pipisorry/article/details/52366356 Spark编程模型 SparkContext类和SparkConf类 我们可通过如下方式调用 SparkContext 的简单构造函数,以默认的参数值来创建相应的对象.val sc = new SparkContext("local[4]", "Test Spark App") 这段代码会创建一个4线程的 SparkContext 对象,并将其相应的任务命

Spark入门实战系列--3.Spark编程模型(下)--IDEA搭建及实战

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送–Spark入门实战系列>获取 1 安装IntelliJ IDEA IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合.代码审查. 创新的GUI设计等方面的功能可以说是超常的.IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨

理解ASP.NET中MVC 编程模型 上

MVC 编程模型 MVC 是 ASP.NET 开发模型之一. MVC 是用于构建 web 应用程序的一种框架,使用 MVC (Model View Controller) 设计: Model(模型)表示应用程序核心(比如数据库记录列表) View(视图)对数据(数据库记录)进行显示 Controller(控制器)处理输入(写入数据库记录) MVC 模型同时提供对 HTML.CSS 以及 JavaScript 的完整控制. MVC 模型通过三个逻辑层来定义 web 应用程序: business l

Spark编程模型(核心篇 一)

目录 RDD概述 RDD实现 RDD运行流程 RDD分区 RDD操作分类 RDD编程接口说明 一.RDD概述 RDD:是Resilient distributed datasets的简称,中文为弹性分布式数据集;是Spark最核心的模块和类 DAG: Spark将计算转换为一个有向无环图(DAG)的任务集合,通过为RDD提供一种基于粗粒度变换(如map, filter, join等)的接口 RDD类型:mappedRDD, SchemaRDD RDD操作分类:转换操作(又分为创建操作.转换操作)

Spark编程模型及RDD操作

转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Application:基于Spark的用户程序,包含了一个driver program和集群中多个executorDriver Program:运行Application的main()函数并创建SparkContext.通常SparkContext代表driver programExecutor:为某App

Spark 编程模型(中)

先在IDEA新建一个maven项目 我这里用的是jdk1.8,选择相应的骨架 这里选择本地在window下安装的maven 新的项目创建成功 我的开始pom.xml文件配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.ap

Spark 编程模型(下)

创建Pair RDD 什么是Pair RDD 创建Pair RDD Pair RDD的转化操作 Pair RDD的转化操作1 在xshell启动

DataFrame编程模型初谈与Spark SQL

Spark SQL在Spark内核基础上提供了对结构化数据的处理,在Spark1.3版本中,Spark SQL不仅可以作为分布式的SQL查询引擎,还引入了新的DataFrame编程模型. 在Spark1.3版本中,Spark SQL不再是Alpha版本,除了提供更好的SQL标准兼容之外,还引进了新的组件DataFrame.同时,Spark SQL数据源API也实现了与新组件DataFrame的交互,允许用户直接通过Hive表.Parquet文件以及一些其他数据源生成DataFrame.用户可以在