美文网首页
Spark计算引擎

Spark计算引擎

作者: 溯水心生 | 来源:发表于2018-03-05 21:11 被阅读378次

一、Spark简介

  • 由加州大学伯克利分校的AMP实验室开源
  • 大规模分布式通用计算引擎
  • 具有高吞吐、低延时、通用易扩展、高容错等特点
  • 使用Scala语言开发,提供了丰富的开发API,支持Scala、Java、
  • Python、R开发语言
  • Spark提供多种运行模式
    Spark架构

二、Spark特点

  • 计算高效
    • 使用内存计算引擎,提供Cache缓存机制支持迭代计算或多次数据共享,减少数据读取的IO开销
    • DAG引擎,减少多次计算之间中间结果写到HDFS的开销
    • 使用多线程池模型来减少task启动开销,shuffle过程中避免不必要的
    • sort操作以及减少磁盘IO操作
  • 通用易用
    • 提供了丰富的开发API,支持Scala、Java、Python、R开发语言
    • 集成批处理、流处理、交互式计算、机器学习算法、图计算
  • 运行模式多样

三、Spark核心概念-RDD

  • RDD:Resilient Distributed Datasets弹性分布式数据集
    • Spark基于RDD进行计算
    • 分布在集群中的只读对象集合(由多个Partition构成)
    • 可以存储在磁盘或内存中
    • 可以通过并行转换操作构造
    • 失效后自动重构
      RDD

1.RDD操作

  • Transformation
    • 将Scala集合或者Hadoop数据集构造一个新的RDD
    • 通过已有的RDD产生新的RDD
    • 只记录转换关系,不触发计算
    • 如:map、filter等
      -Action
    • 通过RDD计算得到一个或者一组值
    • 真正触发执行
    • 如:count、collect、saveAsTextFile

RDD操作

2.RDD操作示例

rdd1.map(_+1).saveAsTextFile("hdfs://node01:9000/")

RDD输出

3.Transformation与Action对比

  • 接口定义方式不同
    • Transformation:RDD[X] -> RDD[Y]
    • Action:RDD[X] -> Z
  • 执行计算方式不同
    • Transformation采用惰性执行方式,只记录RDD转化关系,不会触发真正计算执行
    • Action真正触发计算执行

4.Transformation Lazy Execution

  • 惰性执行

懒惰执行

5.程序执行流程

  • Spark中的WordCount
val rdd1 = sc.textFile("hdfs://192.168.183.101:9000/data/wc/in")
val rdd2 = rdd1.flatMap(_.split("\t"))
val rdd3= rdd2.map((_,1))
val rdd4 = rdd3.reduceByKey(_ + _)
rdd4.saveAsTextFile(“hdfs://192.168.183.100:9000/data/wc/out”)

Spark程序执行流程

6.RDD Dependency依赖

  • Narrow Dependency窄依赖
    • 父RDD中的分区最多只能被一个子RDD的一个分区使用
    • 子RDD如果只有部分分区数据丢失 或者损坏只需要从对应的父RDD重新计算恢复
  • Shuffle Dependency宽依赖
    • 子RDD分区依赖父RDD所有分区
    • 子RDD如果部分分区或者全部分区 数据丢失或者损坏需要从所有父RDD重新计算,相对窄依赖付出的
      代价更高,尽量避免宽依赖的使用

窄依赖
宽依赖

7.RDD Cache缓存

  • Spark允许将RDD缓存到内存或磁盘上,方便重用,提高性能
  • Spark提供了多种缓存级别
  • 用户可以根据实际需求进行调整
val rdd = sc.textFile(inputArg)
rdd.cache()//实际上是调用了rdd.persist(StorageLevel.MEMORY_ONLY)
//data.persist(StorageLevel.MEMORY_AND_DISK)

RDD缓存

四、Spark程序架构

  • Driver:一个Spark程序有一个Driver,一个Driver创建一个Spark Context,程序的main
    函数运行在Driver中。Driver主要负责Spark程序的解析、划分Stage,调度Task到Executor上执行
  • SparkContext:加载配置信息,初始化Spark程序运行环境,创建内部的DAGScheduler和TaskScheduler
  • Executor:负责执行Driver分发的Task任务,集群中一个节点可以启动多个Executor,每个一个Executor通过多线程运行多个Task任务
  • Task:Spark运行的基本单位,一个Task负责处理RDD一个分区的计算逻辑
    Spark程序架构

五、Spark运行模式

  • Local本地模式
    • 单机运行,通常用于测试
  • Standalone独立模式
    • Spark集群单独运行
  • Yarn/Mesos
    • 运行在其他资源管理系统上,如Yarn、Mesos

1.Spark Local模式

  • Local本地模式
    • 将Spark应用以多线程方式,直接运行在本地,方便调试
  • 本地模式分类
local:只启动一个线程运行executor
local[n]:启动n个线程运行executor
local[*]:启动跟cpu数目相同的executor

2.Spark Standalone模式

3.YARN程序运行流程

Yarn执行流程

4.Spark YARN模式

  • yarn-cluster

Spark on yarn

5.Spark内部执行流程

Spark 内部执行流程
  • 生成逻辑查询计划
sc.textFile(inputArg)
.flatMap(_.split("\t"))
.map((_,1))
.reduceByKey(_ + _)
.saveAsTextFile(outArg)

逻辑查询计划

六、Spark调度模块

  • DAG:Directed Acyclic Graph有向无环图
  • DAGScheduler
    • 根据计算任务的依赖关系建立DAG
    • 根据依赖关系是否是宽依赖,将DAG划分为不同的Stage阶段
    • 将各个Stage中的Task组成的TaskSet提交到TaskScheduler
  • TaskScheduler
    • 负责Application的Job调度
    • 重新提交执行失败的Task
    • 为执行速度慢的Task启动备份任务
      Sparkr 模块调度

1.Spark任务类型和Job划分

  • Spark中task类型
    • ShuffleMapTask:除了最后一个输出Task,其他Task类型都是 ShuffleMapTask
    • ResultTask:只有最后一个阶段输出的Task是ResultTask
  • Appication中调用一次Action就会生成一个Job
    Spark 任务划分

相关文章

  • Spark计算中的数据倾斜

    本文的讨论场景限定在spark计算引擎,但是并不局限于spark,相关的讨论可以迁移到其他的计算引擎Spark计算...

  • 2018-07-23

    spark 概念 spark 特点 DAG引擎,减少过程写入磁盘开销 内存计算引擎,支持cache机制,使得中间过...

  • window环境下安装spark

    spark是大数据计算引擎,拥有Spark SQL、Spark Streaming、MLlib和GraphX四个模...

  • Spark计算引擎

    一、Spark简介 由加州大学伯克利分校的AMP实验室开源 大规模分布式通用计算引擎 具有高吞吐、低延时、通用易扩...

  • 计算引擎SPARK

    Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AM...

  • Spark基础与数仓应用调优

    计算引擎的发展 了解Spark Spark核心理念 数据应用Spark-sql Spark四大组件 Spark-s...

  • 第 1 章 Spark 概述

    1.1 什么是 Spark Spark 是一个快速(基于内存), 通用, 可扩展的集群计算引擎。并且 Spark ...

  • Spark应用运行流程

      Apache Spark是开源的、分布式的、集成计算引擎,支持在计算机集群上的并行数据计算。Spark支持多种...

  • Spark快速入门(1) 核心概念和抽象:RDD

    Spark简介 Spark是目前比较流程的大数据计算引擎。在Spark出现之前,MapReduce已经作为大数据领...

  • Spark 配置Kryo序列化机制

    一、Spark 的序列化 序列化Spark 是一个高性能、分布式的、基于内存计算的计算引擎,Spark 集群中包含...

网友评论

      本文标题:Spark计算引擎

      本文链接:https://www.haomeiwen.com/subject/oslkfftx.html