spark

  • spark概述
  • Spark特点
  • 快速的
  • 易用的
  • 通用的
  • 无处不在
  • Spark核心模块
  • 体系架构
  • 核心模块
  • 运行模式
  • spark总体流程
  • spark整体框架
  • spark运行流程
  • 执行组件
  • 执行模块
  • RDD
  • scheduler
  • Storage
  • shuffle
  • 运行
  • spark集群搭建


spark概述

  1. spark定义:spark是基于内存的快速、通用、易扩展的大数据分析计算引擎
  2. spark vs Hadoop
  • 从组成上看

Hadoop

spark

在分布式服务器集群上存储海量数据并运行分布式应用的开源框架

快速、通用、易扩展的大数据分析计算引擎

hdfs作为分布式存储系统存储所有数据,支持Hadoop的所有服务

spark core提供最基础、最核心的功能

MapReduce是编程模型,作为Hadoop的分布式计算模型,是Hadoop的核心

spark sql是spark操作结构化数据的组件

HBase是基于hdfs的分布式数据库

spark streaming是针对实时数据进行刘计算的组件,提供了丰富的处理数据对API

  • 从框架上看:MR和Spark都是数据处理框架
  • 从功能上看:
  • spark更适合于迭代计算较多的运算
  • spark比Hadoop更通用:spark提供多种数据集操作类型,Hadoop只有map和reduce两种操作;spark编程模型比Hadoop更灵活;由于rdd的特性,spark不适用于异步细粒度更新状态的应用,不适合增量修改
  • 容错性:
  • 可用性:spark通过提供丰富的Scala、Java、python API以及交互shell来提高可用性;可以直接对很多hdfs进行数据的读写,支持spark on yarn

mapreduce

spark

数据存储机构

磁盘hdfs文件系统

使用内存构建弹性分布式数据集,rdd对数据进行运算和缓存

编程范式

Map—Reduce

DAG(有向无环图)

中间结果存储

中间结果落地磁盘,IO及序列化、反序列化代价比较大

中间结果存储于内存

运行方式

task以进程方式维护,任务启动慢

task以县城方式维护,进程启动快

Spark特点

快速的

很多任务都能秒级完成,与Hadoop相比,spark基于内存的计算快100倍,基于硬盘的计算快10倍

易用的

spark支持使用Scala、Java、python、R、sql等多种语言,同时支持80多种高级算法,用户可以快速构建不用的应用;
支持交互式的python和spark的shell

通用的

容纳了很多之前独立的、分布式系统所拥有的功能:批处理、迭代计算、交互查询、实时流计算、机器学习、图计算等。这些不同类型的处理可以在一个应用中使用,减少了开发和维护的成本,并且,之前需要维护不同的集群,现在只需要维护一个spark集群

无处不在

数据源:spark可以从任意地方读取数据,比如hdfs、json、csv、Parquet、RDBs、ES、Redis、Kafka等
应用程序运行:

  • 本地模式:开发测试及小数据量
  • 集群模式:Yarn,Standalone,Mesos
  • 容器中:K8s

Spark核心模块

体系架构

Spark core为核心部分,包含了Spark最基本、最核心的功能和基本分布式算子,基本功能有:任务调度、内存管理、故障修复以及和存储系统的交互

核心模块

  1. RDD:一个只读的,可分区的分布式数据集(分布式弹性数据集)。这个数据集的全部或部分课缓存在内存中,在多次计算间重用
  1. 基本操作:
  • Transformation:通过Scala集合或数据集构建新的RDD;通过已有的RDD构建新的RDD
  • Action: 通过RDD计算得到一个或一组值
  1. Spark SQL:用于分布式结构化数据的SDL查询和分析,在编写程序中,可直接使用SQL语句
  2. Spark Streaming:用于处理流数据的分布式流处理框架,它将数据以时间片为单位进行分割形成RDD,能够以比较小的时间间隔对流数据进行处理,严格意义上说是一个准实时处理系统
  3. Mllib:分布式机器学习库,在spark平台上对一些常用的机器学习算法进行分布式实现
  4. Graph X:分布式图处理框架,在Spark上实现了大规模图计算的功能,提供对图计算和图挖掘的各种接口
  5. 紧密集成的优点:
  1. 如果spark底层优化了,则基于底层的组件也优化
  2. 节省了各个组件组合使用时的部署、测试等时间
  3. 当向spark增加新组件时,其他组件可以立刻想用新组件等功能
  4. 无缝连接不同的处理模型

运行模式

  1. 本地模式Local Mode:将spark应用程序中任务task运行在一个本地JVM Process进程中,通常供开发测试或小数据集使用
  1. 启动一个JVM进程,运行所有task任务,每个task运行需要1core CPU
  2. 并行度parallelism决定同时运行几个task
  3. 设置2个CPU Core相当于同时运行两个task,相当于并行计算
  1. 集群模式:将spark应用运行在YARN集群或框架自身集群Strandalone,及Apache Mesos集群,启动多个JVM进程运行Task程序
  1. YARN集群模式:运行在yarn集群上,由yarn负责资源管理,spark负责任务调度和计算。好处:
  • 计算资源按需延伸
  • 集群利用率高
  • 共享递增存储,避免数据集群迁移
  1. Standlone集群模式(开发测试及生产环境使用):类似Hadoop yarn架构,典型的Master/Slaves模式,使用zookeeper搭建,避免Master单点故障(Master相当于yarn的RM,Worker类似于yarn的NM)
  2. Apache Mesos集群模式:运行在mesos资源管理器框架智商,由mesos负责资源管理,Spark负责任务调度和计算
  3. 三种模式的区别
  1. 云服务:spark2.3开始支持将spark开发应用运行到K8s上

spark总体流程

spark整体框架

spark运行流程

  • 基础概念:
  1. application:用户基于spark代码,由一个driver和多个executor组成
  2. application jar:装着spark应用程序的jar包。
  3. Driver program:是Spark的核心组件,一个运行Main方法的进程,负责创建Spark Context(Spark应用的入口,负责和整个集群交互,创建需要的变量,还包含集群的配置信息等);将用户提交的job转换为DAG图,根据策略将DAG图划分为多个stage,根据分区从而生成一系列的tasks,根据tasks要求想资源管理器申请资源;提交任务并检测任务状态。
  4. Executor:在工作节点上的进程,可以运行task,也可以将数据保存在内存和磁盘中。每个应用程序都有自己的executors,一个Work Node上可以有多个Executor
  5. Cluster Manager:负责获取集群资源的外部服务(如standerlone的Master和yarn的RM)
  6. Deploy Node:用来区分driver进程的运行位置。在cluster模式中,spark框架在集群内部启动driver,在client模式中,由submitter在集群外启动driver
  7. Worker Node:集群中任何可以运行spark应用程序代码的节点
  8. Task:最小的工作单元,会被送往executor执行,也是Stage的子集,以并行度来衡量,一个task对应一个RDD分区
  9. Job:一个job由许许多多的task,每个Action都会触发一个job,
  10. Stage:job的子集,一个job被拆分为多个Stage,可以在driver日志中观察到
  • 运行流程:spark提供多层分解的概念,spark组件将应用程序分解为内部执行的任务并提供执行容器,资源管理组件为spark组件提供资源管理和调度
  • spark组件:Driver Program;Executor
  • Spark任务:应用程序;job;stage;task
  • 资源管理组件:Yarn;Standalone(spark自带)
  • 运行整体流程:
    1.

执行组件

执行模块

RDD

scheduler

Storage

shuffle

运行

spark集群搭建