Spark详解

一.Spark 简介

  1. Spark 和Scala
    1.1 Spark 是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序;

    1.2 Spark 的特点
    Spark详解

    1.3 Scala是一门现代的多范式编程语言,可扩展式语言;

    1.4 Scala 特性
    Spark详解

    1.5 Scala 是Spark的主要编程语言,但Spark 还支持Java 、Python ,R语言编程。提供了REPL(交互式解析器),提高程序开发效率。

  2. Spark 和Hadoop 的比较
    2.1 Hadoop 是基于磁盘的大数据计算框架;Spark 性能比Hadoop 优越;

    2.2 Spark 的优点
    Spark的计算模式也属于MapReduce ,但不局限与Map 和Reduce 操作,还提供了多种数据集操作类型,编程模型比Hadoop MapReduce 更灵活。
    Spark提供了内存计算,可将中间结果发放到内存中,对于迭代计算效率更高;
    Spark 基于DAG 的任务调度执行机制,要优于 Hadoop MapReduce 的迭代执行机制;

二.Spark 生态系统

  1. 大数据处理主要的三个类型:
    复杂的批量数据处理;基于历史数据的交互式查询;基于实时数据流的数据处理;

  2. 同时部署三种不同的软件,以满足三种不同的业务需求。
    MapReduce ; Cloudera Impala; Storm;

  3. 框架
    Spark详解
    3.1 Spark 可以部署在资源管理器YARN 之上,提供一站式的大数据解决方案;

    3.2 Spark 所提供的生态系统足以满足上述三种场景即同时支持批处理、交互式查询和流数据处理.

    3.3 Spark 生态系统已经成为伯克利数据分析软件栈BDAS的重要组成部分;

    3.4 BDAS架构
    Spark详解
    Spark Core 实现了 Spark 基于内存的计算
    Spark Streaming 来实现流计算
    Saprk SQL和BlinkDB完成交互式的SQL 查询;
    GraphX:完成图计算;
    ML Base和MLlib:完成机器学习和数据挖掘;
    Spark详解
    3.5 Spark 组件应用场景
    Spark详解

三. Spar 运行架构

  1. 基本概念
    Spark详解

  2. 架构设计
    Spark详解
    2.1 与Hadoop MapReduce 计算框架相比,Spark 采用Excutor 的两个有点;
    –>利用多线程来执行具体的任务,减少任务的启动开销;
    –>Excutor 中有一个BlockManager 存储模块,会将内存和磁盘共同作为 存储设备,有效减少IO 开销.
    Spark详解
    Spark详解

  3. Spark 运行基本流程
    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 运行架构特点
    Spark详解

  4. RDD 组件
    许多迭代式算法和交互式数据挖掘,不同计算阶段之间会重用中间结果.MapReduce 都是把结果写入磁盘,带来大量数据复制,磁盘IO和序列化开销大;

    4.1 RDD概念
    RDD就是为满足这种需求而设计的,提供了一个抽象的数据结构;

    不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理.

    不同RDD 之间的转换操作形成依赖关系,可以实现管道化,避免中间数据存储;

    一个RDD(弹性分布式数据集)就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分为多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算.

    4.2 RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区集合,不能直接修改,只能基于稳定的物理存储中的数据集创建RDD,或者通过其他RDD 上执行确定的转换操作(如map,jion,group by)而创建得到新的RDD.
    Spark详解
    4.3 RDD的执行过程
    Spark详解
    上述图示中的处理过程,即 DAG 拓扑排序结果,反应了不同RDD的相互依赖关系
    优点:惰性调用,管道化.避免同步等待,不需要保存中间结果,每次操作变得简单;

    4.4 RDD特性
    Spark详解Spark详解
    Spark详解
    4.5 RDD 的依赖关系和运行过程

    RDD 之间的依赖关系(宽依赖,窄依赖)是划分Stage的依据.

    窄依赖:表现为一个父RDD的分区对应一个自RDD 的分区或多个父RDD 的分区对应与一个子RDD的分区;
    Spark详解

    宽依赖:表现为存在一个父RDD的分区对应一个子RDD的多个分区;
    Spark详解

    4.6 Stage 的划分

    Spark通过分析各个RDD 的依赖关系生成DAG 再通过分析各个RDD中分区之间的依赖关系来决定如何划分Stage;
    Spark详解
    如下划分情况:
    Spark详解

    4.7 Stage 类型

    –>ShuffleMapStage
    Spark详解

    –>ResultStage
    Spark详解

    4.8 RDD 运行过程
    Spark详解

  5. Spark SQL组件

    5.1 Spark SQL 架构
    Spark详解
    Spark详解
    Spark详解

    5.2 Spark SQL 与Hive关系
    Spark详解
    5.3 Spark 的部署和应用方式
    Spark详解
    Spark详解
    Spark详解
    Spark详解
    Spark详解

    5.4 Spark 编程

    Spark详解
    Spark详解
    Spark详解
    Spark详解Spark详解
    Spark详解
    Spark详解