笔记:Spark简介

Spark简介

Spark是什么

  • Spark是基于内存计算的大数据并行计算框架
  • Spark是MapReduce的替代方案

Spark与Hadoop

Spark是一个计算框架,而Hadoop中包含计算框架MapReduce和分布式文件系统HDFS,Hadoop更普遍地说还包括在其生态系统上的其余系统.算法

Spark的优点

中间结果输出

  • 基于MapReduce的计算引擎一般会将中间结果输出到磁盘上,进行储存和容错.当一些查询翻译到MapReduce任务是,每每会产生多个Stage,而这些串联的Stage又依赖于底层的文件系统来存储每个Stage的输出结果.
  • Spark将执行模型抽象为通用的有向无环图执行计划(Directed Acyclic Graph,DAG).这能够将多个Stage的任务串联或者并行执行,而无须将Stage中间结果输出到HDFS中.相似的引擎包括Dryad,Tez

数据格式和内存布局

Spark抽象出分布式内存储存结构弹性分布式数据集RDD,进行数据存储.RDD能支持粗粒度写操做,但对于读取操做,RDD能够精确到每条记录,这使得RDD能够用来做为分布式索引.sql

执行策略

MapReduce在数据Shuffle以前花费了大量的时间来排序,Spark任务在Shuffle中不是全部情景都须要排序.因此支持Hash的分布式聚合,调度中采用更为通用的任务执行计划图(DAG),每一轮次的输出结果在内存中缓存.编程

任务调度的开销

  • 传统的MapReduce系统,如Hadoop,是为了运行常达数小时的批量做业而设计的
  • Spark采用了事件驱动的类库AKKA来启动任务,经过线程池复用线程来避免进程或线程启动和切换开销

Spark能带来什么

打造全栈多计算范式的高效数据流水线

Spark支持复杂查询(SQL查询,流式计算,机器学习和图算法)缓存

轻量级快速处理

  • 这是因为Scala语言的简洁和丰富的表达力
  • Spark充分利用和集成Hadoop等其余第三方组件
  • Spark经过将中间结果缓存在内存减小磁盘I/O来达到性能的提高

易于使用,Spark支持多语言

  • Spark支持经过Scala,Java,Python编写程序
  • 同事容许在Shell中进行交互计算
  • 用户能够利用Spark像书写单机程序同样编写分布式程序

与HDFS等存储层兼容

  • Spark能够独立运行,除了能够运行在当下的YARN等集群管系统以外,它还能够读取已有的任何Hadoop数据
  • 它能够运行在任何Hadoop数据源上,好比Hive,HBase,HDFS等

Spark的局限性

  • RDD模型适合的是粗粒度的全局数据并行计算,不适合细粒度的,须要异步更新的计算
  • 若是针对特定工做负载达到最优性能,仍是须要使用一些其余的大数据系统

Spark生态系统BDAS

Spark

  • Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不只实现了MapReduce的算子map函数和reduce函数的计算模型,还提供了更为丰富的算子,如filter,join,groupByKey等.
  • Spark将分布式数据集(RDD),实现了应用任务调度,RPC,序列化和压缩,并为运行在其上的上层组件提供API.
  • 底层采用Scala这种函数式语言书写成
  • 所提供的API深度借鉴Scala函数式的编程思想,提供与Scala相似的编程接口
  • Spark将数据在分布式环境下分区,而后将做业转化为有向无环图(DAG),并分阶段进行DAG的调度和任务的分布式并行处理

Shark

  • Shark是构建在Spark和Hive基础上的数据仓库
  • Shark已经完成学术使命,终止开发,但其架构和原理仍具备借鉴意义
  • 提供了可以查询Hive中所储存数据的一套SQL接口,兼容现有的Hive QL语法
  • 熟悉Hive QL和SQL的用户能够基于Shark进行快速的Ad-Hoc,Reporting等类型的SQL查询
  • Shark底层复用Hive的解析器,优化器以及元数据存储和序列化接口
  • Shark将Hive QL编译转化为一组Spark任务,进行分布式运算

Spark SQL

  • Spark SQL提供在大数据上的SQL查询功能
  • Spark SQL使用Catalyst作查询解析和优化器,并在底层使用Spark做为执行引擎实现的SQL的Operator
  • 用户能够在Spark上直接书写SQL

Spark Streaming

  • Spark Streaming经过将流数据按指定时间片累积为RDD,而后将RDD进行批处理,进而实现大规模的流数据处理

GraphX

  • GraphX基于BSP模型,在Spark之上,封装相似Pregel的接口,进而大规模同步全局的图计算
  • 当用户进行多轮迭代时,基于Spark内存计算的优点尤其明显

Tachyon

  • Tachyon是一个分布式内存文件系统,能够理解为内存中的HDFS
  • 为了提供更高的性能,将数据存储剥离Java Heap
  • 用户能够经过Tachyon实现RDD或者文件的跨应用共享,并提升容错机制,保证数据的可靠性

Mesos

  • Mesos是一个资源管理框架
  • 提供相似于YARN的功能
  • 用户能够在其中插件式地运行Spark,MapReduce,Tez等计算框架任务
  • Mesos对资源和任务进行隔离,并实现高效的资源任务调度

BlinkDB

  • BlinkDB是一个用于在海量数据上进行交互式SQL的近似查询引擎
  • 容许用户经过查询准确性和查询时间之间作出权衡,完成近似查询
  • 核心思想:经过一个自适应优化框架,随着时间的推移,从原始数据创建并维护一组多维样本,经过一个动态样本选择策略,选择一个适当大小的示例,而后基于查询的准确性和响应时间知足用户查询需求

Spark架构

  • Spark是整个BDAS的核心,各个组件经过Spark来实现对分布式并行任务处理的程序支持

Spark代码结构

Spark Core
名称 说明
scheduler 文件夹中含有负责总体的Spark应用,任务调度的代码
broadcast 含有Broadcast(广播变量)的实现代码,API中是Java和Python API的实现
deploy 含有Spark部署与启动运行的代码
common 不是一个文件夹,而是表明Spark通用的类和逻辑实现
metrics 是运行时状态监控逻辑代码,Executor中含有Worker节点负责计算的逻辑代码
partial 含有近似评估代码
network 含有集群通讯模块代码
serializer 含有存储模块的代码
storage 含有存储模块的代码
ui 含有监控界面的代码逻辑,其余的代码模块分别是对Spark生态系统中其余组件的实现
其余
名称 说明
streaming Spark Streaming的实现代码
YARN Spark on YARN的部分实现代码
praphx 含有GraphX实现代码
interpreter 交互式Shell代码
mllib 表明MLlib算法实现的代码
sql 表明Sqark SQL的代码

Spark的架构

  • Spark架构采用了分布式计算中的Master-Slave模型.Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点
    • Master做为整个集群的控制器,负责整个集群的正常运行
    • Worker至关因而计算节点,接受主节点命令与进行状态汇报
    • Executer负责任务的执行
    • Client做为用户的客户端,负责提交应用
    • Driver负责控制一个应用的执行
  • Spark集群部署后,须要在主节点和从节点分别启动Master进程和Worker进程,对整个集群进行控制
  • 在一个Spark应用的执行过程当中,Driver和Worker是两个重要角色
    • Driver程序是应用逻辑执行的起点,负责做业的调度,即执行Task任务的分发
    • 多个Worker用来管理计算节点和建立Executor并行处理任务
    • 在执行阶段,Driver会将Task和Task所依赖的file和jar序列化后传递给对应的Worker机器,同时Executor对相应数据分区的任务进行处理

Spark架构中的基本组件

组件名 介绍
ClusterManager 在Standalone模式中即为Master(主节点),控制整个集群,监控Master.在YARN中为资源管理器
Worker 从节点,负责控制计算节点.启动Executor或Driver.在YARN模式中为NodeManager,负责计算节点的控制
Driver 运行Application的main()函数并建立SparkContext
Executor 执行器,在worker node上执行任务的组件,用于启动线程池运行任务.每一个Application拥有独立的一组Executors
SparkContext 整个应用的上下文,控制应用的生命周期
RDD Spark的基本计算单元,一组RDD可造成执行的有向无环图RDD Graph
DAG Scheduler 根据做业构建基于Stage的DAG,并提交Stage给TaskScheduler
TaskScheduler 将任务分发给Executor执行
SparkEnv 线程级别的上下文,存储运行时的重要组件的引用

SparkEnv内建立并包含以下一些重要组件的引用架构

SparkEnv内建立并包含的重要组件的引用
组件 介绍
MapOutPutTracker 负责Shuffle元信息的存储
BroadcastManager 负责广播变量的控制与云信息的存储
BlockManager 负责存储管理,建立和查找块
MetricsSystem 监控运行时性能指标信息
SparkConf 负责存储配置信息

Spark的总体流程

  1. Client提交应用
  2. Master找到一个Worker启动Driver
  3. Driver向Master或者资源管理器申请资源,以后将应用转化为RDD Grath
  4. DAGScheduler将RDD Graph转化为Stage的有向无环图提交给TaskScheduler
  5. TaskScheduler提交任务给Executor执行
  6. 任务执行过程当中,其余组件协同工做

Spark运行逻辑

  • 在Spark应用中,整个执行流程在逻辑上会造成有向无环图.Action算子触发以后,将全部累积的算子造成一个有向无环图.
  • Action算子触发以后,将全部累积的算子造成一个有向无环图,而后由调度器调度该图上的任务进行运算
  • Spark根据RDD之间不一样的依赖关系切分红不一样的阶段,一个阶段包含一系列函数执行流水线
相关文章
相关标签/搜索