原文作者:饥渴的小苹果

原文地址:【Spark】Spark基础教程

目录

Spark特点

Spark相对于Hadoop的优势

Spark生态系统

Spark基本概念

Spark结构设计

Spark各种概念之间的关系

Executor的优点

Spark运行基本流程

Spark运行架构的特点

Spark的部署模式

Spark三种部署方式

Hadoop和Spark的统一部署


摘要:

Spark是基于内存计算的大数据并行计算框架

Spark使用DAG引擎,支持Scala、java、python等多种编程语言;集成了SQL查询(Spark SQL)、流式计算(Spark Streaming)、机器学习(MLLib)、图算法(GraphX4)等多种组件;

Spark包括Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX4种组件

Spark可以独立部署也可以集成到hadoop中,由于Hadoop MapReduce、HBase、Storm和Spark等,都可以运行在资源管理框架YARN之上是最好的方式


Spark最初由美国加州伯克利大学的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。

Spark特点

Spark相对于Hadoop的优势

Hadoop虽然已成为大数据技术的事实标准,但其本身还存在诸多缺陷,最主要的缺陷是其MapReduce计算模型延迟过高,无法胜任实时、快速计算的需求,因而只适用于离线批处理的应用场景。回顾Hadoop的工作流程,可以发现Hadoop存在如下一些缺点:

Spark主要具有如下优点:

但Spark并不能完全替代Hadoop,主要用于替代Hadoop中的MapReduce计算模型。实际上,Spark已经很好地融入了Hadoop生态圈,并成为其中的重要一员,它可以借助于YARN实现资源调度管理,借助于HDFS实现分布式存储。

Spark生态系统

Spark的生态系统主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX 等组件,各个组件的具体功能如下:

Spark基本概念

在具体讲解Spark运行架构之前,需要先了解几个重要的概念:

Spark结构设计

Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)。其中,集群资源管理器可以是Spark自带的资源管理器,也可以是YARN或Mesos等资源管理框架。

Spark各种概念之间的关系

在Spark中,一个应用(Application)由一个任务控制节点(Driver)和若干个作业(Job)构成,一个作业由多个阶段(Stage)构成,一个阶段由多个任务(Task)组成。当执行一个应用时,任务控制节点会向集群管理器(Cluster Manager)申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行任务,运行结束后,执行结果会返回给任务控制节点,或者写到HDFS或者其他数据库中

Executor的优点

与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:

  1. 利用多线程来执行具体的任务(Hadoop MapReduce采用的是进程模型),减少任务的启动开销;
  2. Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时,就可以直接读该存储模块里的数据,而不需要读写到HDFS等文件系统里,因而有效减少了IO开销;或者在交互式查询场景下,预先将表缓存到该存储系统上,从而可以提高读写IO性能。

Spark运行基本流程

  1. 当一个Spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责和资源管理器(Cluster Manager)的通信以及进行资源的申请、任务的分配和监控等。SparkContext会向资源管理器注册并申请运行Executor的资源;
  2. 资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上;
  3. SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAG调度器(DAGScheduler)进行解析,将DAG图分解成多个“阶段”(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时,SparkContext将应用程序代码发放给Executor;
  4. 任务在Executor上运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所有资源

Spark运行架构的特点

  1. 每个应用都有自己专属的Executor进程,并且该进程在应用运行期间一直驻留。Executor进程以多线程的方式运行任务,减少了多进程任务频繁的启动开销,使得任务执行变得非常高效和可靠;
  2. Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可;
  3. Executor上有一个BlockManager存储模块,类似于键值存储系统(把内存和磁盘共同作为存储设备),在处理迭代计算任务时,不需要把中间结果写入到HDFS等文件系统,而是直接放在这个存储系统上,后续有需要时就可以直接读取;在交互式查询场景下,也可以把表提前缓存到这个存储系统上,提高读写IO性能;
  4. 任务采用了数据本地性和推测执行等优化机制。数据本地性是尽量将计算移到数据所在的节点上进行,即“计算向数据靠拢”,因为移动计算比移动数据所占的网络资源要少得多。而且,Spark采用了延时调度机制,可以在更大的程度上实现执行过程优化。比如,拥有数据的节点当前正被其他的任务占用,那么,在这种情况下是否需要将数据移动到其他的空闲节点呢?答案是不一定。因为,如果经过预测发现当前节点结束当前任务的时间要比移动数据的时间还要少,那么,调度就会等待,直到当前节点可用。

Spark的部署模式

Spark支持的三种典型集群部署方式,即standalone、Spark on Mesos和Spark on YARN;然后,介绍在企业中是如何具体部署和应用Spark框架的,在企业实际应用环境中,针对不同的应用场景,可以采用不同的部署应用方式,或者采用Spark完全替代原有的Hadoop架构,或者采用Spark和Hadoop一起部署的方式。

Spark三种部署方式

Spark应用程序在集群上部署运行时,可以由不同的组件为其提供资源管理调度服务(资源包括CPU、内存等)。比如,可以使用自带的独立集群管理器(standalone),或者使用YARN,也可以使用Mesos。因此,Spark包括三种不同类型的集群部署方式,包括standalone、Spark on Mesos和Spark on YARN。

1.standalone模式

与MapReduce1.0框架类似,Spark框架本身也自带了完整的资源调度管理服务,可以独立部署到一个集群中,而不需要依赖其他系统来为其提供资源管理调度服务。在架构的设计上,Spark与MapReduce1.0完全一致,都是由一个Master和若干个Slave构成,并且以槽(slot)作为资源分配单位。不同的是,Spark中的槽不再像MapReduce1.0那样分为Map 槽和Reduce槽,而是只设计了统一的一种槽提供给各种任务来使用。

2.Spark on Mesos模式

Mesos是一种资源调度管理框架,可以为运行在它上面的Spark提供服务。Spark on Mesos模式中,Spark程序所需要的各种资源,都由Mesos负责调度。由于Mesos和Spark存在一定的血缘关系,因此,Spark这个框架在进行设计开发的时候,就充分考虑到了对Mesos的充分支持,因此,相对而言,Spark运行在Mesos上,要比运行在YARN上更加灵活、自然。目前,Spark官方推荐采用这种模式,所以,许多公司在实际应用中也采用该模式。

3. Spark on YARN模式

Spark可运行于YARN之上,与Hadoop进行统一部署,即“Spark on YARN”,其架构如图9-13所示,资源管理和调度依赖YARN,分布式存储则依赖HDFS

Hadoop和Spark的统一部署

一方面,由于Hadoop生态系统中的一些组件所实现的功能,目前还是无法由Spark取代的,比如,Storm可以实现毫秒级响应的流计算,但是,Spark则无法做到毫秒级响应。另一方面,企业中已经有许多现有的应用,都是基于现有的Hadoop组件开发的,完全转移到Spark上需要一定的成本。因此,在许多企业实际应用中,Hadoop和Spark的统一部署是一种比较现实合理的选择。

由于Hadoop MapReduce、HBase、Storm和Spark等,都可以运行在资源管理框架YARN之上,因此,可以在YARN之上进行统一部署(如图9-16所示)。这些不同的计算框架统一运行在YARN中,可以带来如下好处:

分布式离线计算—Spark—基础介绍相关推荐

  1. 分布式离线计算—MapReduce—基础介绍

    原文作者:哪有天生的学霸,一切都是厚积薄发 原文地址:MapReduce介绍 目录 场景 MapReduce产生背景 MapReduce功能: 总结 场景 比如有海量的文本文件,如订单,页面点击事件的 ...

  2. 分布式离线计算—Spark—SparkStreaming

    原文作者:阿里中间件 原文地址:一文读懂 Spark 和 Spark Streaming 目录 MapReduce 的问题所在 Spark 与 RDD 模型 流计算框架:Spark Streaming ...

  3. 分布式实时计算—Storm—基础介绍

    目录 一.概念 二.编程模型(spout->tuple->bolt) 三.Topology 运行 四.Storm Streaming Grouping 一.概念 Storm 是一个免费并开 ...

  4. 分布式实时计算—Spark—Spark Core

    原文作者:bingoabin 原文地址:Spark Core 目录 一.Spark Core 1. 主要功能 2. Spark Core子框架 3. Spark架构 4. Spark计算模型 二.组件 ...

  5. 分布式离线计算—HiveSQL

    原文作者:极客教程 原文地址:Hive 简介 目录 MapReduce实现SQL的原理 Hive的架构 Hive如何实现join操作 总结 Hive 简介,Hive是Hadoop大数据仓库Hive.在 ...

  6. 分布式离线计算—MapReduce—基本原理

    原文作者:黎先生 原文地址:MapReduce基本原理及应用 目录 一.MapReduce模型简介 1. Map和Reduce函数 2. MapReduce体系结构 3. MapReduce工作流程 ...

  7. 分布式离线计算—MapReduce—为什么被淘汰了?

    原文作者:蔡元楠 原文地址:为什么MapReduce会被硅谷一线公司淘汰?​time.geekbang.org 目录 超大规模数据处理的技术发展 为什么MapReduce会被取代 推荐阅读: 每次和来 ...

  8. 明风:分布式图计算的平台Spark GraphX 在淘宝的实践

    快刀初试:Spark GraphX在淘宝的实践 作者:明风 (本文由团队中梧苇和我一起撰写,并由团队中的林岳,岩岫,世仪等多人Review,发表于程序员的8月刊,由于篇幅原因,略作删减,本文为完整版) ...

  9. Python黑马头条推荐系统第一天 架构介绍和离线计算更新Item画像

    Python黑马头条推荐系统项目课程定位.目标 定位 课程是机器学习(包含推荐算法)算法原理在推荐系统的实践 深入推荐系统的业务流场景.工具使用 作为人工智能的数据挖掘(推荐系统)方向应用项目 目标 ...

最新文章

  1. 对人工神经网络“开刀”,利用神经科学消融法检测人工神经网络
  2. errorEruda解决移动端真机调试,bug收集问题
  3. 【转】NIO的定义和原理是什么?
  4. Linux下命令行ssh密钥连接服务器
  5. hdu 5424(dfs搜索)
  6. 理解DDoS防护本质:基于资源较量和规则过滤的智能化系统
  7. 计算机超级语言,我发现原来计算机最原始的语言是那么的内涵。。。。
  8. eclipse分级,分级列表显示 - bieshixuan的个人博客 - OSCHINA - 中文开源技术交流社区...
  9. 建议收藏!数据中台行业发展概况及展望
  10. ffmpeg 提高编解码效率_介绍几款强大常用的PS插件,让你的工作效率大大提高(含插件如何安装使用教程)...
  11. 边界条件(求解偏微分方程的边界条件)
  12. Oracle 列转行函数 Listagg()
  13. lora发射和接收原理_LoRa 的扩频技术
  14. Redis 彻底禁用RDB持久化
  15. 德国人制作的 Windows 2000/XP 优化脚本2.2_build9 (2008-05-31)
  16. devc 能优化吗_Devc 、一元多项式的加法、减法、乘法的实现 【问题描述】 设有 联合开发网 - pudn.com...
  17. 力软敏捷开发平台7.0.6旗舰版功能更新介绍
  18. centerOS 安装redis
  19. 忘记MySQL密码如何重置再到重新设置密码
  20. 数值分析 计算机科学,数值分析与算法.pdf

热门文章

  1. 让皮肤变水嫩的15条小妙招 - 健康程序员,至尚生活!
  2. RabbitMQ 交换器、持久化
  3. ByteBuffer
  4. Scrum 项目7.0
  5. 批量解锁源代码管理器的文件命
  6. 计时器Chronometer和时钟(AnalogClock和DigitalClock)
  7. Oracle RAC在思科UCS上的应用
  8. Lesson_7 上课笔记_1 ----static关键字和导包
  9. Django2.+ path配置
  10. Form表单中的button导致页面刷新而无法进入Ajax请求回调函数