一、Spark与Hadoop的关系

  Spark和Hadoop只是共用了底层的MapReduce编程模型,即它们均是基于MapReduce思想所开发的分布式数据处理系统。

  Hadoop采用MapReduce和HDFS技术,其MapReduce计算模型核心即Map操作和Reduce操作,在这个计算模型的工作流程中还存在一些可以由用户自定义的Partition和Combine等操作;HDFS则是对Hadoop的输入文件、Map产生的结果文件、Shuffle产生的结果文件等等的一个文件管理系统,其IO操作都是基于磁盘的。Hive、HBase、Pig、Mathout和ZooKepper等都是基于Hadoop开发的系统。

  Hadoop处理的数据量本身很大时,经过N个Map操作会被划分为多个数据块,一般这些块都需要经过merg操作存放到磁盘中,IO量是很大的,尤其是小文件(文件大小要小于系统处理的block时)数量过多时,不仅IO操作增多而且还会拖累网络的流量负载。众所周知,对于迭代计算,Hadoop只能是鞭长莫及,因为许多处理的中间文件都被放置在磁盘中,要利用这些中间文件进行迭代计算对系统性能来说是不现实的。Hadoop本身的容错机制即冗余副本,占据了很多资源,当然,Hadoop2已经开始使用log的方法来强化容错机制。

  Spark对计算模型进行了细化,MapReduce的计算模型被分为transformations操作和actions操作,transformations操作包含了map、reduceByKey、union和join等许多对数据集RDD进行转换的操作,而actions则提供了对数据集中的数据操作的接口。数据集RDD是基于内存的,甚至可以将一个RDD视为一个静态变量类型,这样进行迭代计算就成为了可能,而且减少了磁盘IO操作。

二、粗粒度与细粒度的共享内存模式

  粗粒度的寻址模式相比细粒度的寻址模式,可以寻址的最小页的大小要大一些。这一点被Spark运用得非常灵活。

  首先,粗粒度寻址是RDDs所采取的寻址方式。尽管页面相比细粒度下比较大,但是由于许多应用都是执行相同的迭代操作,所以并不影响系统性能。粗粒度寻址来共享内存也是RDDs划分的重要依据,否者页面太小,导致数据集容量有限,对计算性能是不利的。

  其次,RDDs支持不同方式的寻址。RDDs在写操作时采用粗粒度寻址,而读方式下却可以采取粗粒度或者细粒度的寻址方式。同时,在进行故障恢复时,RDDs会通过细粒度方式寻址及lineage的低开销来实现。

三、RDDs与Spark

  RDDs的运用成就了Spark。Spark的工作单位是数据集RDDs,而对RDD的操作实际上是对其内部的Partitions的操作。

  RDDs之间的关系分为两类:narrow dependencies和wide dependencies,前者是指RDD的工作分区只允许一个child RDD共享,而后者则指RDD的工作分区允许多个child RDD共享。一般来说,map操作产生的都是narrow dependencies的RDD,而join操作产生的都是wide dependencies的RDD,总之不同的操作依靠其特性会产生不同的依赖关系。narrow dependencies的RDD由于资源利用呈流式,所以适合于以管道形式来并行执行操作。

  Spark在RDDs上执行任务时,RDDs是由parent RDD创建的,这个parent RDD即目标RDD,其所创建的RDD负责执行副本任务。执行阶段:首先,每个阶段都会尽可能多的安排一些narrow dependencies的transformations操作;然后,每个阶段相互交接的时间段即shuffle阶段,这一阶段需要wide dependencies的操作或者一部分Partitions已经执行完并且能够减缓parent RDD计算压力的RDD;最后,就是对执行失败的RDDs进行恢复重新执行,直到目标RDD(parent RDD)执行完成。

  transformations操作包括:

  1、map操作。map操作返回一个RDD,操作对象与parent RDD具有相同的分区表和优先级,可以返回parent RDD迭代计算所需的值。

  2、union操作。union操作返回一个RDD,操作对象为两个RDD,将这两个RDD的Partitions进行合并操作。

  3、simple操作。

  4、join操作。join操作可能产生narrow dependencies、wide dependencies或者混合的RDDs。当join的对象RDDs都具有相同的Partition函数时,产生narrow dependencies的RDDs;当RDDs的Partition函数不同时,产生wide dependencies;一个有Partition函数而一个没有时,产生混合RDDs。无论哪种情况,结果RDD都含有一个继承的或者默认的Partition函数。

  5、reduceByKey操作。

  action操作包括:

  1、count操作。对RDD的长度计数。

  2、collect操作。获取RDD中的一列数据。

  3、reduce操作。将RDD数据集中的数据返回给用户。

  此外,采用<K,V>的计算模式,Spark和RDDs交互是通过language-intergrated API接口实现的。

四、RDDs的容错机制

  容错机制是RDDs需要重点考虑的因素。首先,RDDs是不能容忍调度错误的。其次,数据的恢复速度是关乎系统性能的重要因素。

  RDD的创建由用户或者RDD执行,而Spark的驱动程序会将RDD从Parent RDD的创建到执行的各个阶段的每一步都记录在lineage中,所以,如果这个RDD任务失败时,Spark会根据相应的lineage在本地或者其他节点上恢复该RDD。上述容错机制需要lineage的记录,而lineage的方法只对narrow dependencies具有良好的效果,对于wide dependencies则效果欠佳。wide dependencies的容错方法一般推荐checkpoint机制。

Spark随笔(一):Spark的综合认识的更多相关文章

  1. spark随笔

    spark基于RDD成功构建起大数据处理的一体化解决方案,将MappReduce.Streaming.SQL.Machine Learning.Graph Processing等 大数据计算模型统一到 ...

  2. 【Spark 内核】 Spark 内核解析-上

    Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更 ...

  3. Spark调优 | Spark Streaming 调优

    Spark调优 | Spark Streaming 调优 1.数据序列化 2.广播大变量 3.数据处理和接收时的并行度 4.设置合理的批处理间隔 5.内存优化 5.1 内存管理 5.2优化策略 5.3 ...

  4. Spark 3.x Spark Core详解 & 性能优化

    Spark Core 1. 概述 Spark 是一种基于内存的快速.通用.可扩展的大数据分析计算引擎 1.1 Hadoop vs Spark 上面流程对应Hadoop的处理流程,下面对应着Spark的 ...

  5. Spark快速入门 - Spark 1.6.0

    Spark快速入门 - Spark 1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 快速入门(Quick Start) 本文简单介绍了Spark的使用方式.首 ...

  6. 【译】Spark官方文档——Spark Configuration(Spark配置)

    注重版权,尊重他人劳动 转帖注明原文地址:http://www.cnblogs.com/vincent-hv/p/3316502.html   Spark主要提供三种位置配置系统: 环境变量:用来启动 ...

  7. 一、spark入门之spark shell:wordcount

    1.安装完spark,进入spark中bin目录: bin/spark-shell   scala> val textFile = sc.textFile("/Users/admin/ ...

  8. Spark学习之Spark Streaming

    一.简介 许多应用需要即时处理收到的数据,例如用来实时追踪页面访问统计的应用.训练机器学习模型的应用,还有自动检测异常的应用.Spark Streaming 是 Spark 为这些应用而设计的模型.它 ...

  9. Spark学习之Spark调优与调试(二)

    下面来看看更复杂的情况,比如,当调度器进行流水线执行(pipelining),或把多个 RDD 合并到一个步骤中时.当RDD 不需要混洗数据就可以从父节点计算出来时,调度器就会自动进行流水线执行.上一 ...

  10. Spark学习之Spark调优与调试(一)

    一.使用SparkConf配置Spark 对 Spark 进行性能调优,通常就是修改 Spark 应用的运行时配置选项.Spark 中最主要的配置机制是通过 SparkConf 类对 Spark 进行 ...

随机推荐

  1. mysql常用操作语句(转)

      mysql -u root -p mysql -h localhost -u root -p database_name 2.列出数据库: show databases; 3.选择数据库: use ...

  2. Java虚拟机学习(4):对象内存分配与回收

    对象优先在Eden上分配 大多数情况下,对象优先在新生代Eden区域中分配.当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC).Minor GC期间虚拟机将E ...

  3. Digital Roots 1013

    Digital Roots 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:456            测试通过:162 描述 T ...

  4. 2D空间中求一点是否在多边形内

    参考自这篇博文:http://www.cnblogs.com/dabiaoge/p/4491540.html 一开始没仔细看做法,浪费了不少时间.下面是最终实现的效果: 大致流程: 1.随便选取多边形 ...

  5. EntityFramework Core 学习笔记 —— 创建模型

    原文地址:https://docs.efproject.net/en/latest/modeling/index.html 前言: EntityFramework 使用一系列的约定来从我们的实体类细节 ...

  6. Visual Studio的Web Performance Test提取规则详解(1)

    总结 Visual Studio的Web Performance Test是基于HTTP协议层的,它不依赖于浏览器,通过直接接收,发送HTTP包来和Web服务器交互.Web Performance T ...

  7. python--数据清洗

    1.数据错误: 错误类型– 脏数据或错误数据• 比如, Age = -2003– 数据不正确• '0' 代表真实的0,还是代表缺失– 数据不一致• 比如收入单位是万元,利润单位是元,或者一个单位是美元 ...

  8. centos 服务开机启动设置

    建立服务文件以nginx 为例 vim /lib/systemd/system/nginx.service 在nginx.service 中插入一下内容 [Unit] Description=ngin ...

  9. 滚动RollUp、压缩

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. 《BI项目笔记》创建父子维度

    创建步骤: 而ParentOriginID其实就是对应的ParentOriginID,它的 Usage 必须是 Parent 才能表示这样的一个父子维度. 查看OriginID属性, Usage 是 ...