Spark

刘超 21天前 ⋅ 2455 阅读   编辑

目录

  1、Spark源码地址

  2、Spark源码介绍

  3、Spark核心理论

  4、Spark技术架构

  5、Spark二开列表

 

一、Spark源码地址

分类 地址 描述
HDP
Apache
CDH
CDP

  以下地址没有spark源码(sources jar),但有spark依赖的一些jar,例如antlr等

  1、talend-update.talend

二、Spark源码介绍

分类 版本
BlockManager
2.0.2 MapOutputTracker

三、Spark核心理论

四、Spark技术架构

  1、Spark应用运行流程
  介绍Spark的安装部署与系统架构,然后通过一个简单的Spark应用例子简介Spark应用运行的基本流程,最后讨论Spark的编程模型

  2、Spark逻辑处理流程

  3、Spark内存管理
    (1)、内存管理方法总结
      a、内存消耗来源多种多样,难以统一管理。Spark在运行时的内存消耗主要包括3个方面:Shuffle数据、数据缓存、用户代码运行。由于内存空间有限,如何对这些缓存数据和计算过程中的数据进行统一管理呢?Spark采用的主要方法是将内存划分为3个区域,每个区域分别负责存储和管理一项内存消耗来源。如何平衡数据计算与缓存的内存消耗?Spark采用的统一内存管理模型通过“硬界限+软界限”的方法来限制每个区域的内存消耗,并通过内存共享达到平衡。硬界限指的是Spark将内存分为固定大小的用户代码空间(User memory)和框架内存空间(Framework memory)。软界限指的是框架内存空间(Framework memory)由框架执行空间(Execution memory)和数据缓存空间(Storage memory)共享。如何解决内存空间不足的问题?框架执行空间或者数据缓存空间不足时可以向对方借用,如果还不够,则会采取spill到磁盘上、缓存数据替换、丢弃等方法。
      b、内存消耗动态变化难以预估,为内存分配和回收带来困难。Spark在运行时的内存消耗与多种因素相关,难以预估。用户代码的内存用量与func的计算逻辑、输入数据量有关,也难以预估。而且这些内存消耗来源产生的内存对象的生命周期不同,如何分配大小合适的内存空间,何时对这些对象进行回收?由于内存消耗难以提前估计,Spark采取的方法是边监控边调整,如通过监控Shuffle Write/Read过程中数据结构大小来观察是否达到框架执行空间界限、监控缓存数据大小观察是否达到数据缓存空间界限,如果达到界限,则进行数据结构扩容、空间借用或者将缓存数据移出内存。
      c、task之间共享内存,导致内存竞争。在Spark中,多个task以线程方式运行在同一个Executor JVM中,task之间还存在内存共享和内存竞争,如何平衡内存共享和内存竞争呢?在Spark的统一内存管理模型中,框架执行空间和数据缓存空间都是由并行运行的task共享的,为了平衡task间的内存消耗,Spark采取均分的方法限制每个task的最大使用空间,同时保证task的最小使用空间。
  (2)、内存管理优化
      虽然Spark的统一内存管理模型可以解决多个内存消耗来源的共享和平衡问题,但在不少方面还有提升空间。
      a、堆内内存和堆外内存管理问题:目前,Spark主要利用堆内内存来进行数据Shuffle和数据缓存,内存消耗高、GC开销大。虽然部分Shuffle方式可以利用堆外内存,但主要适用于无聚合、无排序的场景,而且需要用户自己设定堆外内存大小。使用堆外内存虽然可以降低GC开销,但也有弊端,如应用场景受限,也容易出现内存泄漏等问题。所以,Spark还需要提高堆内内存和堆外内存的利用能力,降低用户负担,提高内存利用率。
      b、存储与计算分离问题:当前,Spark的统一内存管理模型将数据缓存和数据计算都放在一个内存空间中进行,会产生内存竞争问题。实际上,Spark团队已经意识到这个问题,设计实现了分布式内存文件系统Alluxio(之前名为Tachyon)来分离数据存储和数据计算:将数据缓存在Alluxio的内存空间里,而Executor内存空间主要用于用户代码和框架执行Shuffle Write/Read。
      c、更高效的Shuffle方式:我们讨论了不同Shuffle Write/Read方式的内存消耗,也讨论了Serialized Shuffle的优势。然而,针对RDD操作,Spark目前只提供了Serialized Shuffle Write方式,没有提供Serialized Shuffle Read方式。实际上,在SparkSQL项目中,Spark利用SQL操作的特点(如SUM、AVG计算结果的等宽性),提供了更多的Serilaized Shuffle方式,直接在序列化的数据上实现聚合等计算,详情可以参考UnsafeFixedWidthAggregationMap、ObjectAggregationMap等数据结构的实现。未来,希望能将这些Serialized Shuffle方式应用在RDD操作上。

 

五、二开列表

版本 分类 需求 状态
2.0.2 jdbc Spark jdbc打印出insert语句 已完成

注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: