内存计算的缓存优化方法技术

技术编号:9765741 阅读:138 留言:0更新日期:2014-03-15 10:25
本发明专利技术提供一种内存计算的缓存优化方法,该方法包括:在Spark源程序中插入监听代码,对应用程序进行动态语义分析以构造DAG图;计算DAG中各顶点出度并筛选出出度大于1的顶点对应的RDD,筛选出的RDD为需要缓存至内存的RDD;根据贪心算法调整Action的执行顺序以优化RDD数据计算的访问顺序;计算RDD的权重,根据内存替换算法决定内存中被替换出的RDD;及根据多级缓存算法决定如何处理被替换出的RDD。应用本发明专利技术所述内存计算的缓存优化方法,无需程序员在编程时考量内存使用以及显示指定加载内存的RDD,降低程序员的编程负担,同时提高了内存的利用率进而提升大数据处理的速度。

【技术实现步骤摘要】

本专利技术涉及分布式大数据处理的领域,尤其涉及。
技术介绍
Spark与Hadoop相似,是一个基于内存计算的开源集群计算系统,能够并行处理大数据集的计算,可以实现大数据的交互式查询以及优化迭代工作负载。Spark将数据集缓存在内存中,缩短了 I/O访问延迟。但是随着数据量的激增以及人们对任务执行速度的要求越来越高,提高Spark的性能成为一个迫切的需求。通过对内存加速提高内存使用效率以提高运行速度,是提高Spark系统性能的一种方式。目前,程序员需要在Spark中利用cache O方法将RDD显示载入内存,此种方式要求程序员对内存使用有一定的基础,而该方式使得内存利用率的高低很大程度依赖于程序员编写的代码质量的优劣,在有些情况下,仅通过优化代码本身无法提高内存使用率。
技术实现思路
鉴于上述内容,有必要提供一种,能够充分利用内存资源,提高内存使用率,降低程序员编程负担。所述的,该方法包括:在Spark的源程序代码中插入监听代码,以样本数据作为输入预先执行应用程序,对应用程序进行动态语义分析,获取所有RDD函数操作的输入RDD ID、操作类型、输出RDD ID,根据获取的信息构造DAG ;遍历上述DAG,计算各顶点的出度,筛选出出度大于I的顶点对应的RDD并建立RDD集合S,该集合S中的RDD为需要缓存至内存中的RDD ;调整上述RDD集合S中所有RDD的Action执行顺序,以优化需要缓存至内存的RDD数据计算的访问顺序;计算所述RDD集合S中所有RDD的权重;当输入真正的作业数据执行应用程序时,根据优化的RDD数据计算的访问顺序,依次将RDD缓存至内存,若内存已满,根据内存替换算法决定从内存中被替换出的RDD ;根据多级缓存算法确定被替换出的RDD是直接丢弃还是存储至磁盘。相比于现有技术,本专利技术所述能够对Spark应用程序进行动态语义分析得出DAG图,调整Action执行顺序以优化RDD数据计算的访问顺序,计算RDD的权重,根据内存替换算法决定内存中被替换出的RDD以及根据多级缓存算法决定被替换出的RDD的处理方式。应用本专利技术所述,程序员无需在编程时显示指定加载内存的RDD以及考量内存使用情况,降低程序员的编程负担,同时提高了内存的利用率进而提升大数据处理的速度。【附图说明】图1是本专利技术所述的较佳实施例的方法流程图。图2是本较佳实施例中进行动态语义分析的样例PageRank算法的伪代码。图3是本较佳实施例中对PageRank算法进行动态语义分析后,构造的DAG的示意图。图4是本较佳实施例中用于说明调整Action执行顺序可优化RDD访问顺序的Spark拉取模型样例的伪代码。图5是本较佳实施例中分析Spark拉取模型样例代码得出的RDD访问顺序的示意图。图6是本较佳实施例中调整Spark拉取模型代码的Action执行顺序后的RDD访问顺序的示意图。图7是本较佳实施例中根据贪心算法调整Action执行顺序的伪代码。图8是本较佳实施例中说明RDD权重影响的示意图。图9是本较佳实施例中多级缓存算法的伪代码。图10是不同操作类型对RDD的数据量大小影响的示意图。【具体实施方式】本专利技术所述(以下简称“内存优化方法”)是对现有开源项目Spark的优化,应用该内存优化方法,可以提高内存的利用率,进一步提升并行处理大数据的运行速度。Spark利用Scala语言实现,是一个允许集群上对数据集进行交互式分析的有效、通用的编程语言框架。Scala语言是一种基于JVM (Java Virtual Machine, Java虚拟机)的静态类型、函数式、面向对象的语言。其中,RDD (Resilient Distributed Dataset,弹性分布式数据集)是Spark的一个重要的抽象概念,是分布在集群节点上的具有容错机制且进行并行操作的只读记录分区集合,可以将所有数据加载至内存,允许在大型集群上执行基于内存的计算。本专利技术所述的内存优化方法,对Spark应用程序进行动态语义分析以构造DAG(Directed Acyclic Graph,有向无环图),根据该DAG选取需要缓存至内存的RDD,利用贪心算法调整Action的执行顺序以优化RDD数据计算的访问顺序,根据内存替换算法决定被替换出内存的RDD以及根据多级缓存算法决定从内存中被替换出的RDD的处理方式。以下将具体结合附图,详细说明所述内存优化方法中各步骤的具体实现。参阅图1所示,是本专利技术所述内存优化方法的流程图。步骤S01,在Spark源代码中插入监听代码,以样本数据作为输入预先执行应用程序,对应用程序进行动态语义分析,获取所有RDD函数操作的输入RDD ID、操作类型、输出RDD ID,根据获取的信息构造DAG (Directed Acyclic Graph,有向无环图)。软件工程中,性能分析(Performance Analysis或Profiling)是以收集程序运行时的信息为手段研究程序行为的分析方法,旨在根据运行时信息决定如何对程序优化从而提高程序运行速度或者内存使用率。本专利技术所述内存优化方法基于Profiling的思想,预先执行应用程序进行动态语义分析,获取所有RDD的函数操作的信息以构造DAG,根据该DAG进一步分析出在应用程序执行过程中需要加载内存的RDD并优化RDD数据计算的访问顺序(具体参见步骤S02、S03)。需要说明的是,预先执行应用程序主要目的是为了获取程序运行时信息以优化内存使用,而大数据处理的数据集是TB级别的大规模数据量,故预先执行应用程序时输入的数据为数据量不大的模拟数据,本较佳实施例中,取作业数据(待处理的数据集)中一定大小的数据(例如256M的数据量)作为样本,以样本数据作为预先执行应用程序的输入数据。RDD支持两种操作:转换(Transformation)和动作(Action,动作或行为)。其中,转换操作是根据现有数据集创建一个新的数据集,例如,属于转换操作类型的函数操作:map、filter> flatmap、ReduceByKey和join等;动作是在数据集运行计算后返回一个值给应用程序或向外部存储写入数据,例如,属于动作或行为操作类型的函数操作:saVe、count、collect 等。本较佳实施例中,在Spark源代码的类库中于RDD的各种函数操作的实现代码中插入监听代码,使得Spark的应用程序执行过程中(Spark的应用程序也称作驱动程序),当执行RDD的函数操作代码的同时,执行RDD函数操作的实现代码中插入的监听代码,实时获取RDD函数操作的输入RDD ID、操作类型和输出RDD ID,以输入RDD ID和输出RDD ID为顶点,输入和输出的RDD之间所进行函数操作的操作类型为边,构造DAG。图2为本较佳实施例中进行动态语义分析的PageRank算法的伪代码,图3为对PageRank算法进行动态语义分析后构造的DAG,为了方便表示,以方框代替DAG的点,每个方框为一个RDD。以下结合图2、图3,详细说明DAG的构造过程。图2所不代码的循环体中,contribs是links和ranks进行join和flatmap操作返回的数据集,如图3中顶点ranksO至顶点contribsO的边和顶点lin本文档来自技高网...

【技术保护点】
一种内存计算的缓存优化方法,其特征在于,该方法包括:构造DAG步骤:在Spark的源程序代码中插入监听代码,以样本数据作为输入预先执行应用程序,对应用程序进行动态语义分析,获取所有RDD函数操作的输入RDD?ID、操作类型、输出RDD?ID,根据获取的信息构造DAG;筛选RDD步骤:遍历上述DAG,计算各顶点的出度,筛选出出度大于1的顶点对应的RDD并建立RDD集合S,该集合S中的RDD为需要缓存至内存中的RDD;Action执行顺序调整步骤:调整上述RDD集合S中所有RDD的Action执行顺序,以优化需要缓存至内存的RDD数据计算的访问顺序;RDD权重计算步骤:计算所述RDD集合S中所有RDD的权重;RDD替换步骤:当输入真正的作业数据执行应用程序时,根据优化的RDD数据计算的访问顺序,依次将RDD缓存至内存,若内存已满,根据内存替换算法决定从内存中被替换出的RDD;RDD处理步骤:根据多级缓存算法确定被替换出的RDD是直接丢弃还是存储至磁盘。

【技术特征摘要】
1.一种内存计算的缓存优化方法,其特征在于,该方法包括: 构造DAG步骤:在Spark的源程序代码中插入监听代码,以样本数据作为输入预先执行应用程序,对应用程序进行动态语义分析,获取所有RDD函数操作的输入RDD ID、操作类型、输出RDD ID,根据获取的信息构造DAG ; 筛选RDD步骤:遍历上述DAG,计算各顶点的出度,筛选出出度大于I的顶点对应的RDD并建立RDD集合S,该集合S中的RDD为需要缓存至内存中的RDD ; Action执行顺序调整步骤:调整上述RDD集合S中所有RDD的Action执行顺序,以优化需要缓存至内存的RDD数据计算的访问顺序; RDD权重计算步骤:计算所述RDD集合S中所有RDD的权重; RDD替换步骤:当输入真正的作业数据执行应用程序时,根据优化的RDD数据计算的访问顺序,依次将RDD缓存至内存,若内存已满,根据内存替换算法决定从内存中被替换出的RDD ; RDD处理步骤:根据多级缓存算法确定被替换出的RDD是直接丢弃还是存储至磁盘。2.如权利要求1所述的内存计算的缓存优化方法,其特征在于,在所述构造DAG步骤中,将输入RDD ID和输出RDD ID作为顶点,输入RDD和输出RDD进行的函数操作的操作类型为边,构造DAG。3.如权利要求1所述的内存计算的缓存优化方法,其特征在于,在所述Action执行顺序调整步骤中,是根据贪心算法调整集合S中所有RDD的Action执行顺序,包括以下步骤: a)查找所述RDD集合S中的所有RDD的Action,合并有依赖关系的Action为一个新Action,合并后的多个新Action与无依赖关系的Action共同形成一个Action集合A ; b)创建空集合R和空序列S’; c)从Action集合A中任意选取一个ActionAi,将AiW入序列S的末尾,将Ai对应的RDD加入到集合R ; d)迭代执行步骤C,直至集合A中的元素为空,则序列S’即为调整的Action执行顺序,其中,迭代执行从集合A中选取Action Ai时,选取的依据是所选取的Ai对应的RDD与集合R的交集最大。4.如权利要求1所述的内存计算的缓存优化方法,其特征在于,在所述权重计算步骤中,RDD权重的计算公式为: 5.如权利要求4所述的内存计算的缓存优化方法,其特征在于,所述RDD的大小根据动态采样法进行计算: 采样:取作业数据中的一定大小的数据作为样本数据; 计算对象大小:将样本数据作为输入,执行应用程序,计算执行过程中的对象大小,所述对象包括各类型变量; 汇总:汇总RDD的所有对象的大小即为RDD的大小。6.如权利要求5所述的内存计算的缓存优化方法,其特征在于,通过以下步骤计算对象大小: a)定义所有基础类型变量的大小,...

【专利技术属性】
技术研发人员:陈康艾智远冯琳周佳祥
申请(专利权)人:深圳清华大学研究院
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1