分布式离线计算—Spark—基础介绍
原文作者:饥渴的小苹果
原文地址:【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使用先进的DAG(Directed Acyclic Graph,有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可比Hadoop MapReduce快上百倍,基于磁盘的执行速度也能快十倍;
- 容易使用:Spark支持使用Scala、Java、Python和R语言进行编程,简洁的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程;
- 通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算;
- 运行模式多样:Spark可运行于独立的集群模式中,或者运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源。
Spark相对于Hadoop的优势
- 表达能力有限。计算都必须要转化成Map和Reduce两个操作,但这并不适合所有的情况,难以描述复杂的数据处理过程;
- 磁盘IO开销大。每次执行时都需要从磁盘读取数据,并且在计算完成后需要将中间结果写入到磁盘中,IO开销较大;
- 延迟高。一次计算可能需要分解成一系列按顺序执行的MapReduce任务,任务之间的衔接由于涉及到IO开销,会产生较高延迟。而且,在前一个任务执行完成之前,其他任务无法开始,难以胜任复杂、多阶段的计算任务。
- Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更灵活;
- Spark提供了内存计算,中间结果直接放到内存中,带来了更高的迭代运算效率;Spark最大的特点就是将计算数据、中间结果都存储在内存中,大大减少了IO开销
- Spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制。
- Spark提供了多种高层次、简洁的API,通常情况下,对于实现相同功能的应用程序,Spark的代码量要比Hadoop少2-5倍。
Spark生态系统
Spark的生态系统主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX 等组件,各个组件的具体功能如下:
- Spark Core:Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等。Spark建立在统一的抽象RDD之上,使其可以以基本一致的方式应对不同的大数据处理场景;通常所说的Apache Spark,就是指Spark Core;
- Spark SQL:Spark SQL允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析;
- Spark Streaming:Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流式计算分解成一系列短小的批处理作业。Spark Streaming支持多种数据输入源,如Kafka、Flume和TCP套接字等;
- MLlib(机器学习):MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作;
- GraphX(图计算):GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化,Graphx性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。
Spark基本概念
在具体讲解Spark运行架构之前,需要先了解几个重要的概念:
- RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型;
- DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系;
- Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行任务,并为应用程序存储数据;
- 应用:用户编写的Spark应用程序;
- 任务:运行在Executor上的工作单元;
- 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作;
- 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。
Spark结构设计
Spark各种概念之间的关系
Executor的优点
与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:
- 利用多线程来执行具体的任务(Hadoop MapReduce采用的是进程模型),减少任务的启动开销;
- Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时,就可以直接读该存储模块里的数据,而不需要读写到HDFS等文件系统里,因而有效减少了IO开销;或者在交互式查询场景下,预先将表缓存到该存储系统上,从而可以提高读写IO性能。
Spark运行基本流程
- 当一个Spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责和资源管理器(Cluster Manager)的通信以及进行资源的申请、任务的分配和监控等。SparkContext会向资源管理器注册并申请运行Executor的资源;
- 资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上;
- SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAG调度器(DAGScheduler)进行解析,将DAG图分解成多个“阶段”(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时,SparkContext将应用程序代码发放给Executor;
- 任务在Executor上运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所有资源
Spark运行架构的特点
- 每个应用都有自己专属的Executor进程,并且该进程在应用运行期间一直驻留。Executor进程以多线程的方式运行任务,减少了多进程任务频繁的启动开销,使得任务执行变得非常高效和可靠;
- Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可;
- Executor上有一个BlockManager存储模块,类似于键值存储系统(把内存和磁盘共同作为存储设备),在处理迭代计算任务时,不需要把中间结果写入到HDFS等文件系统,而是直接放在这个存储系统上,后续有需要时就可以直接读取;在交互式查询场景下,也可以把表提前缓存到这个存储系统上,提高读写IO性能;
- 任务采用了数据本地性和推测执行等优化机制。数据本地性是尽量将计算移到数据所在的节点上进行,即“计算向数据靠拢”,因为移动计算比移动数据所占的网络资源要少得多。而且,Spark采用了延时调度机制,可以在更大的程度上实现执行过程优化。比如,拥有数据的节点当前正被其他的任务占用,那么,在这种情况下是否需要将数据移动到其他的空闲节点呢?答案是不一定。因为,如果经过预测发现当前节点结束当前任务的时间要比移动数据的时间还要少,那么,调度就会等待,直到当前节点可用。
Spark的部署模式
Spark三种部署方式
Spark可运行于YARN之上,与Hadoop进行统一部署,即“Spark on YARN”,其架构如图9-13所示,资源管理和调度依赖YARN,分布式存储则依赖HDFS
Hadoop和Spark的统一部署
- 计算资源按需伸缩;
- 不用负载应用混搭,集群利用率高;
共享底层存储,避免数据跨集群迁移
分布式离线计算—Spark—基础介绍相关推荐
- 分布式离线计算—MapReduce—基础介绍
原文作者:哪有天生的学霸,一切都是厚积薄发 原文地址:MapReduce介绍 目录 场景 MapReduce产生背景 MapReduce功能: 总结 场景 比如有海量的文本文件,如订单,页面点击事件的 ...
- 分布式离线计算—Spark—SparkStreaming
原文作者:阿里中间件 原文地址:一文读懂 Spark 和 Spark Streaming 目录 MapReduce 的问题所在 Spark 与 RDD 模型 流计算框架:Spark Streaming ...
- 分布式实时计算—Storm—基础介绍
目录 一.概念 二.编程模型(spout->tuple->bolt) 三.Topology 运行 四.Storm Streaming Grouping 一.概念 Storm 是一个免费并开 ...
- 分布式实时计算—Spark—Spark Core
原文作者:bingoabin 原文地址:Spark Core 目录 一.Spark Core 1. 主要功能 2. Spark Core子框架 3. Spark架构 4. Spark计算模型 二.组件 ...
- 分布式离线计算—HiveSQL
原文作者:极客教程 原文地址:Hive 简介 目录 MapReduce实现SQL的原理 Hive的架构 Hive如何实现join操作 总结 Hive 简介,Hive是Hadoop大数据仓库Hive.在 ...
- 分布式离线计算—MapReduce—基本原理
原文作者:黎先生 原文地址:MapReduce基本原理及应用 目录 一.MapReduce模型简介 1. Map和Reduce函数 2. MapReduce体系结构 3. MapReduce工作流程 ...
- 分布式离线计算—MapReduce—为什么被淘汰了?
原文作者:蔡元楠 原文地址:为什么MapReduce会被硅谷一线公司淘汰?time.geekbang.org 目录 超大规模数据处理的技术发展 为什么MapReduce会被取代 推荐阅读: 每次和来 ...
- 明风:分布式图计算的平台Spark GraphX 在淘宝的实践
快刀初试:Spark GraphX在淘宝的实践 作者:明风 (本文由团队中梧苇和我一起撰写,并由团队中的林岳,岩岫,世仪等多人Review,发表于程序员的8月刊,由于篇幅原因,略作删减,本文为完整版) ...
- Python黑马头条推荐系统第一天 架构介绍和离线计算更新Item画像
Python黑马头条推荐系统项目课程定位.目标 定位 课程是机器学习(包含推荐算法)算法原理在推荐系统的实践 深入推荐系统的业务流场景.工具使用 作为人工智能的数据挖掘(推荐系统)方向应用项目 目标 ...
最新文章
- 对人工神经网络“开刀”,利用神经科学消融法检测人工神经网络
- errorEruda解决移动端真机调试,bug收集问题
- 【转】NIO的定义和原理是什么?
- Linux下命令行ssh密钥连接服务器
- hdu 5424(dfs搜索)
- 理解DDoS防护本质:基于资源较量和规则过滤的智能化系统
- 计算机超级语言,我发现原来计算机最原始的语言是那么的内涵。。。。
- eclipse分级,分级列表显示 - bieshixuan的个人博客 - OSCHINA - 中文开源技术交流社区...
- 建议收藏!数据中台行业发展概况及展望
- ffmpeg 提高编解码效率_介绍几款强大常用的PS插件,让你的工作效率大大提高(含插件如何安装使用教程)...
- 边界条件(求解偏微分方程的边界条件)
- Oracle 列转行函数 Listagg()
- lora发射和接收原理_LoRa 的扩频技术
- Redis 彻底禁用RDB持久化
- 德国人制作的 Windows 2000/XP 优化脚本2.2_build9 (2008-05-31)
- devc 能优化吗_Devc 、一元多项式的加法、减法、乘法的实现
【问题描述】
设有 联合开发网 - pudn.com...
- 力软敏捷开发平台7.0.6旗舰版功能更新介绍
- centerOS 安装redis
- 忘记MySQL密码如何重置再到重新设置密码
- 数值分析 计算机科学,数值分析与算法.pdf