spark
spark概述
- spark定义:spark是基于内存的快速、通用、易扩展的大数据分析计算引擎
- 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最基本、最核心的功能和基本分布式算子,基本功能有:任务调度、内存管理、故障修复以及和存储系统的交互
核心模块
-
RDD:一个只读的,可分区的分布式数据集(分布式弹性数据集)。这个数据集的全部或部分课缓存在内存中,在多次计算间重用
- 基本操作:
- Transformation:通过Scala集合或数据集构建新的RDD;通过已有的RDD构建新的RDD
- Action: 通过RDD计算得到一个或一组值
- 基本操作:
-
Spark SQL:用于分布式结构化数据的SDL查询和分析,在编写程序中,可直接使用SQL语句
-
Spark Streaming:用于处理流数据的分布式流处理框架,它将数据以时间片为单位进行分割形成RDD,能够以比较小的时间间隔对流数据进行处理,严格意义上说是一个准实时处理系统
-
Mllib:分布式机器学习库,在spark平台上对一些常用的机器学习算法进行分布式实现
-
Graph X:分布式图处理框架,在Spark上实现了大规模图计算的功能,提供对图计算和图挖掘的各种接口
-
紧密集成的优点:
- 如果spark底层优化了,则基于底层的组件也优化
- 节省了各个组件组合使用时的部署、测试等时间
- 当向spark增加新组件时,其他组件可以立刻想用新组件等功能
- 无缝连接不同的处理模型
运行模式
- 本地模式Local Mode:将spark应用程序中任务task运行在一个本地JVM Process进程中,通常供开发测试或小数据集使用
- 启动一个JVM进程,运行所有task任务,每个task运行需要1core CPU
- 并行度parallelism决定同时运行几个task
- 设置2个CPU Core相当于同时运行两个task,相当于并行计算
- 集群模式:将spark应用运行在YARN集群或框架自身集群Strandalone,及Apache Mesos集群,启动多个JVM进程运行Task程序
- YARN集群模式:运行在yarn集群上,由yarn负责资源管理,spark负责任务调度和计算。好处:
- 计算资源按需延伸
- 集群利用率高
- 共享递增存储,避免数据集群迁移
- Standlone集群模式(开发测试及生产环境使用):类似Hadoop yarn架构,典型的Master/Slaves模式,使用zookeeper搭建,避免Master单点故障(Master相当于yarn的RM,Worker类似于yarn的NM)
- Apache Mesos集群模式:运行在mesos资源管理器框架智商,由mesos负责资源管理,Spark负责任务调度和计算
- 三种模式的区别
- YARN集群模式:运行在yarn集群上,由yarn负责资源管理,spark负责任务调度和计算。好处:
- 云服务:spark2.3开始支持将spark开发应用运行到K8s上
spark总体流程
spark整体框架
spark运行流程
- 基础概念:
- application:用户基于spark代码,由一个driver和多个executor组成
- application jar:装着spark应用程序的jar包。
- Driver program:是Spark的核心组件,一个运行Main方法的进程,负责创建Spark Context(Spark应用的入口,负责和整个集群交互,创建需要的变量,还包含集群的配置信息等);将用户提交的job转换为DAG图,根据策略将DAG图划分为多个stage,根据分区从而生成一系列的tasks,根据tasks要求想资源管理器申请资源;提交任务并检测任务状态。
- Executor:在工作节点上的进程,可以运行task,也可以将数据保存在内存和磁盘中。每个应用程序都有自己的executors,一个Work Node上可以有多个Executor
- Cluster Manager:负责获取集群资源的外部服务(如standerlone的Master和yarn的RM)
- Deploy Node:用来区分driver进程的运行位置。在cluster模式中,spark框架在集群内部启动driver,在client模式中,由submitter在集群外启动driver
- Worker Node:集群中任何可以运行spark应用程序代码的节点
- Task:最小的工作单元,会被送往executor执行,也是Stage的子集,以并行度来衡量,一个task对应一个RDD分区
- Job:一个job由许许多多的task,每个Action都会触发一个job,
- Stage:job的子集,一个job被拆分为多个Stage,可以在driver日志中观察到
- 运行流程:spark提供多层分解的概念,spark组件将应用程序分解为内部执行的任务并提供执行容器,资源管理组件为spark组件提供资源管理和调度
- spark组件:Driver Program;Executor
- Spark任务:应用程序;job;stage;task
- 资源管理组件:Yarn;Standalone(spark自带)
- 运行整体流程:
1.