Spark基础:第一章 spark概述
Spark基础:第一章 spark概述
-------------------------------spark guide-----------------------------------
文章目录
一、spark是什么?
- 基于内存计算的大数据并行计算框架
- 背景
(1) 于2009年开发,可用于构建大型的、低延迟的数据分析应用程序。
(2) 2013年Spark加入apache孵化器项目,如今是apache软件三大分布式计算系统开源项目之一(Hadoop、spark、storm)-> 批处理batch和流数据streaming data - 大数据分析引擎
- 底层操作的是RDD
二、为什么用spark?
1. 特点
(1) 运行速度快
使用DAG执行引擎以支持循环数据流与内存计算
(2) 容易使用
支持Scala、Java、python和R语言等进行编程,可以通过spark shell进行交互式编程(REPL)
(3) 通用性
一栈式,包括SQL查询、流式计算、机器学习和图算法组件
(4) 运行模式多样
可运行与集群模式、Hadoop等云环境,可以访问HDFS、Hive、HBase
2. MapReduce 与 Spark 对比
(1) MR的缺点
① 表达能力有限
② 磁盘IO开销大
③ 延迟高
(2) 二者的区别
① MR基于磁盘迭代处理数据;Spark 基于内存迭代处理数据
② Spark 中有DAG有向无环图,执行引擎,执行速度快
③ MR是细粒度资源申请;Spark 粗粒度资源申请
④ MR中只有mapper,reducer,业务逻辑要自己实现;spark中的map和reduceByKey两个算子,各种算子对应各种业务
三、spark生态系统
1. 原理
(1) 设计遵循 “一个软件栈满足不同应用场景” 的理念,逐渐形成了一套完整的生态系统。
(2) 一栈式,包括SQL查询、流式计算、机器学习和图算法组件等。
(3) 可以部署在YARN上,提供一站式的大数据解决方案批处理、交互查询、流数据处理。
2. 组件
Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX
① 复杂的批量数据处理 Spark Core
② 基于历史数据的交互式查询 Spark SQL
③ 基于实时数据计算的Spaek Streaming
四、spark中的基本概念
1. RDD 弹性分布式数据集是分布式内存一种抽象概念,提供了一种高度受限的共享内存模型(不存数据)(后续有详细讲解)
2. DAG Direction Acyclic Graph(有向无环图),反映RDD之间的依赖关系(实现管道化,避免中间数据存储)
窄依赖
宽依赖
3. Executor 运行在工作节点(work节点)的一个进程,负责运行Task(standalone模式)
4. Application 用户编写的spark应用程序
5. Task 运行在Executor上的工作单元
6. Job 一个Job包含多个RDD及作用于相应的RDD上的各种操作
阶段的划分:
一个Action算子对应一个Job 对应多个Stage
7. Stage 由一组并行的task组成,是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage或TaskSet,代表了一组关联的、相互之间没有shuffle依赖关系的任务组成的任务集
(1) Stage计算模式
- pipeline管道计算模式
① partition上的计算逻辑
② 一条条处理数据 - 管道中的数据何时落地?
① shuffle write
② 对RDD持久化
(2) Stage的并行度
- 由stage中finalRDD中partition个数决定
- 如何提高Stage的并行度?
① reduceByKey(xx,numpartitions)
② join(xxx,numpartition)
请参考后面的RDD详解
五、spark架构设计
集群资源管理器(Cluster)
一个stage由多个没有shuffle关系的task组成