spark理论

前言: 本文是之前19年学生时学习林子雨老师《Spark大数据 》网易公开课的中关于spark的理论部分的部分笔记。主要包括大数据产品与spark的一些概念与运行原理介绍。 

大数据产品与hadoop生态系统

大数据计算模式

解决问题

代表产品

批处理计算

针对大规模数据的批量处理

MapReduce、Spark等

流计算

针对流数据的实时计算

Storm、S4、Flume、Streams、Puma、DStream、Super Mario、银河流数据处理平台等

图计算

针对大规模图结构数据的处理

Pregel、GraphX、Giraph、PowerGraph、Hama、GoldenOrb等

查询分析计算

大规模数据的存储管理和查询分析

Dremel、Hive、Cassandra、Impala等

(19年时的图)

Hadoop不是单一的,是一个生态系统

HDFS:分布式文件系统,分布式批处理

MapReduce : 分布式计算框架

Hive : 数据仓库,相当于编程接口,将写的SQL语句转换为MapReduce的执行程序

Mahout : 数据挖掘库,机器学习函数库

Yarn : 资源管理框架

。。。。

MapReduce 工作流程(此了解即可,hadoop的原生mapReduce 已被弃用)

•    MapReduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被多个Map任务并行处理

Spark概念

spark也是一个生态系统

MapReduce工作流

Hadoop存在如下一些缺点:

•    表达能力有限

•    磁盘IO开销大

•    延迟高

•    任务之间的衔接涉及IO开销

•    在前一个任务执行完成之前,其他任务就无法开始,难以胜任复杂、多阶段的计算任务

Spark 本质上也是基于MapReduce的计算框架,但是提供了更多数据集的操作。

Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题

相比于Hadoop MapReduce,Spark主要具有如下优点:

•    Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型(包括groupBy、Filter、join等),编程模型比Hadoop MapReduce更灵活

•    Spark提供了内存计算,可将中间结果放到内存中,对于迭代运算效率更高

Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制

Spark 生态系统:通常是HDFS 存储数据,Spark负责数据的计算与处理。

实现SQL查询: Spark SQl

流式计算: Spark Streaming

机器学习: Spark MLlib

图算法组件: Spark 的GraphX

MapReduce与spark的比较

Spark是基于内存的计算,是指计算过程中能够不落磁盘的就尽量不落磁盘,能占内存的就尽量占内存,留在内存中计算。

MapReduce

Spark

数据存储结构:磁盘HDFS文件系统的split

使用内存构建弹性分布式数据集RDD

对数据进行运算和cache

编程范式:Map + Reduce

DAG: Transformation + Action

计算中间结果落到磁盘,IO及序列化、反序列化代价大

计算中间结果在内存中维护

存取速度比磁盘高几个数量级

Task以进程的方式维护,需要数秒时间才能启动任务

Task以线程的方式维护

对于小数据集读取能够达到亚秒级的延迟

                       

Spark 运行模式: 即可以单机模式又可以集群模式。

•       Spark可以部署在资源管理器YARN之上,提供一站式的大数据解决方案

•       因此,Spark所提供的生态系统同时支持批处理、交互式查询和流数据处理

Spark生态系统组件的应用场景

应用场景

时间跨度

其他框架

Spark生态系统中的组件

复杂的批量数据处理

小时级

MapReduce、Hive

Spark

基于历史数据的交互式查询

分钟级、秒级

Impala、Dremel、Drill

Spark SQL

基于实时数据流的数据处理

毫秒、秒级

Storm、S4

Spark Streaming

基于历史数据的数据挖掘

-

Mahout

MLlib

图结构数据的处理

-

Pregel、Hama

GraphX

Spark运行

Spark运行架构

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

一是利用多线程来执行具体的任务,减少任务的启动开销

二是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,有效减少IO开销

一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有Shuffle关系的Task组成

当执行一个Application时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行Task,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中

图 Spark运行基本流程图

SparkContext对象代表了和一个集群的连接

Spark运行基本流程

(1)首先为应用构建起基本的运行环境,即由Driver创建一个SparkContext,进行资源的申请、任务的分配和监控

(2)资源管理器为Executor分配资源,并启动Executor进程

(3)SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行,并提供应用程序代码

(4)Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源

总体而言,Spark运行架构具有以下特点:

(1)每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task

(2)Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可

(3)Task采用了数据本地性和推测执行等优化机制

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值