一.Spark 简介
- Spark 和Scala
1.1 Spark 是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序;
1.2 Spark 的特点: - 1.3 Scala是一门现代的多范式编程语言,可扩展式语言;
1.4 Scala 特性: - 1.5 Scala 是Spark的主要编程语言,但Spark 还支持Java 、Python ,R语言编程。提供了REPL(交互式解析器),提高程序开发效率。
- Spark 和Hadoop 的比较
2.1 Hadoop 是基于磁盘的大数据计算框架;Spark 性能比Hadoop 优越;
2.2 Spark 的优点:
Spark的计算模式也属于MapReduce ,但不局限与Map 和Reduce 操作,还提供了多种数据集操作类型,编程模型比Hadoop MapReduce 更灵活。
Spark提供了内存计算,可将中间结果发放到内存中,对于迭代计算效率更高;
Spark 基于DAG 的任务调度执行机制,要优于 Hadoop MapReduce 的迭代执行机制;
二.Spark 生态系统
- 大数据处理主要的三个类型:
复杂的批量数据处理;基于历史数据的交互式查询;基于实时数据流的数据处理; - 同时部署三种不同的软件,以满足三种不同的业务需求。
MapReduce ; Cloudera Impala; Storm; - 框架
- 3.1 Spark 可以部署在资源管理器YARN 之上,提供一站式的大数据解决方案;
3.2 Spark 所提供的生态系统足以满足上述三种场景即同时支持批处理、交互式查询和流数据处理.
3.3 Spark 生态系统已经成为伯克利数据分析软件栈BDAS的重要组成部分;
3.4 BDAS架构 - Spark Core 实现了 Spark 基于内存的计算;
Spark Streaming 来实现流计算;
Saprk SQL和BlinkDB完成交互式的SQL 查询;
GraphX:完成图计算;
ML Base和MLlib:完成机器学习和数据挖掘; - 3.5 Spark 组件应用场景
三. Spar 运行架构
- 基本概念
- 架构设计
- 2.1 与Hadoop MapReduce 计算框架相比,Spark 采用Excutor 的两个有点;
–>利用多线程来执行具体的任务,减少任务的启动开销;
–>Excutor 中有一个BlockManager 存储模块,会将内存和磁盘共同作为 存储设备,有效减少IO 开销. - Spark 运行基本流程
- 3.1 为应用程序构建其基本的运行环境,即由Driver 创建一个SparkContex进行资源的申请,任务的分配和监控;
3.2 资源管理器为Excutor 分配资源,并启动Excutor 进程;
3.3 SparkContext根据RDD 的依赖关系构建DAG图,DAG 图提交给DAG Schufule解析成Starge,然后把一个个TaseSet提交给底层调度器Task Schudule 处理.Excutor 向SparkContext 申请Task ,Task Schudule 将Task 发放给Excutor 运行并提供应用程序代码;
3.4 Task 在Excutor 上运行把执行结果反馈给Task Schudule ,然后反馈给DAG Schudule ,运算完毕后写入数据并释放所有资源.
3.5 运行架构特点 - RDD 组件
许多迭代式算法和交互式数据挖掘,不同计算阶段之间会重用中间结果.MapReduce 都是把结果写入磁盘,带来大量数据复制,磁盘IO和序列化开销大;
4.1 RDD概念
RDD就是为满足这种需求而设计的,提供了一个抽象的数据结构;
不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理.
不同RDD 之间的转换操作形成依赖关系,可以实现管道化,避免中间数据存储;
一个RDD(弹性分布式数据集)就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分为多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算.
4.2 RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区集合,不能直接修改,只能基于稳定的物理存储中的数据集创建RDD,或者通过其他RDD 上执行确定的转换操作(如map,jion,group by)而创建得到新的RDD. - 4.3 RDD的执行过程
- 上述图示中的处理过程,即 DAG 拓扑排序结果,反应了不同RDD的相互依赖关系.
优点:惰性调用,管道化.避免同步等待,不需要保存中间结果,每次操作变得简单;
4.4 RDD特性 - 4.5 RDD 的依赖关系和运行过程
RDD 之间的依赖关系(宽依赖,窄依赖)是划分Stage的依据.
窄依赖:表现为一个父RDD的分区对应一个自RDD 的分区或多个父RDD 的分区对应与一个子RDD的分区; - 宽依赖:表现为存在一个父RDD的分区对应一个子RDD的多个分区;
- 4.6 Stage 的划分
Spark通过分析各个RDD 的依赖关系生成DAG 再通过分析各个RDD中分区之间的依赖关系来决定如何划分Stage; - 如下划分情况:
- 4.7 Stage 类型
–>ShuffleMapStage - –>ResultStage
- 4.8 RDD 运行过程
- Spark SQL组件
5.1 Spark SQL 架构
5.2 Spark SQL 与Hive关系
5.3 Spark 的部署和应用方式
5.4 Spark 编程