当前位置: 首页 > 专利查询>复旦大学专利>正文

一种建立层次化的映射/归约并行编程模型的方法技术

技术编号:6537930 阅读:404 留言:0更新日期:2012-04-11 18:40
本发明专利技术属计算机软件应用领域,涉及建立层次化的映射/归约并行编程模型的方法,包括使用C语言实现单节点上的作业处理逻辑,实现任务并行和数据局部性优化;对应于一般的集群环境中的双层并行架构,采用层次化的映射/规约框架,在单个计算节点上应用映射/规约模型实现多核架构上的并行处理。本发明专利技术能在分布式计算系统中,使用映射/规约并行编程模型处理大规模数据的应用,实现了高效的作业执行器,充分挖掘了单个计算节点的处理能力,特别是多核架构的并行处理能力和缓存及内存中的数据局部性,为映射/规约并行编程模型的整体性能带来速度提升;同时保留了Hadoop在集群级别的任务调度、负载均衡以及错误容忍等特性。

【技术实现步骤摘要】

本专利技术属计算机软件应用领域,具体涉及,本专利技术能在分布式计算系统中,使用映射/规约并行编程模型来处理大规模数据的应用。
技术介绍
随着用户业务需求的增长和网络技术的发展,海量数据的存储和计算对传统计算机系统提出了新的挑战。海量数据是指数据量极大(往往是万亿字节数量级以上)的数据集合,它比一般的通用数据库要大得多,远远超出单台计算机的存储和处理能力。为了解决海量数据的管理和存取问题,人们通过分布式系统将这样一个需要巨大的计算和存储能力的任务分成许多子任务,然后把这些子任务分配调度给多台互联的计算机进行并行处理, 最后再把各个计算机上的输出综合起来得到最后结果。分布式系统的出现使对海量数据进行高效处理和存储成为可能,但是分布式系统上的程序编写与传统单机上的程序有很大的不同软件程序设计者需要考虑系统不同节点间的同步,任务调度算法的有效性和公平性, 负载均衡和错误恢复等问题。因此如何在分布式系统上进行高效有序的并行程序设计成为当今计算机学术界和业界共同关注的焦点。在这个背景下,并行编程模型便被提出,使得程序员不用关注于并行体系结构的特点,而把注意力集中到程序业务逻辑本身。并行编程模型是指并行体系结构(如分布式系统,多核体系结构)上的编程模型, 它对于简化、规范并行编程有重大的意义。并行编程模型一直是并行计算研究领域中的重点内容,它和并行计算机体系结构紧密相关。映射/规约(MapReduce)并行编程模型是谷歌Google)公司为了解决其在集群上进行百万亿字节以上海量数据分布式计算的问题而提出的并行编程模型,该模型在2004年的国际操作系统设计与实现大会上被首次提出,并在其后得到广泛的应用,且已有多种并行体系结构上的开放源代码实现。它将并行计算抽象成作用于一系列键值对的操作,具有编程接口简单、不要求程序员有并行编程知识、能充分发挥并行体系结构的计算能力等优点。映射/规约并行编程模型主要由“映射”和“规约” 两个阶段构成,“映射”阶段根据输入数据产生一系列中间键值对,“规约”阶段则把具有相同键的所有中间键值对规约到一起(如图1所示)。Hadoop是第一个映射/规约模型在分布式系统上的开放源代码实现,它的代码使用Java语言编写。该项目由阿帕奇软件基金会 (Apache Software Foundation)支持,目前已为大量的公司企业所部署和应用。一个典型的Hadoop应用部署通常会采用分布式文件系统作为持久层,在此之上运行映射/规约应用框架。Hadoop与分布式文件系统之间协作如下一个映射/规约任务首先将来自文件系统的输入切分成可以并行处理的多份小数据,它们将提交给映射/规约框架作为各个映射任务的输入,经过映射阶段处理完后映射/规约框架会将其结果进行排序并作为输入传递给规约阶段处理,最后再将规约阶段的结果写回分布式文件系统。映射 /规约框架负责任务调度,监控并重新执行失败的任务。一般来说,计算节点和存储节点是相同的,就是说映射/规约框架和分布式文件系统是运行在相同的节点集上的。这样的部署使得映射/规约框架能够根据数据的实际位置在各个节点上有效地调度任务,从而在整个集群上达到极高的网络带宽利用率。Hadoop的映射/规约框架将负责调度的逻辑抽象成任务跟踪器对象,作为中央的调度节点;而具体执行任务的那部分逻辑则被抽象为作业跟踪器对象,作为工作节点。整个框架由一个任务跟踪器和多个作业跟踪器组成,集群上每个节点都有一个作业跟踪器。任务跟踪器负责调度组成任务的各个子作业在作业跟踪器上执行,监控并重新执行失败的任务。作业跟踪器在任务跟踪器的控制下执行作业。每个作业跟踪器可以同时执行多个作业,并不断地向任务跟踪器汇报当前其负责的作业队列状况。作业跟踪器在准备执行一个作业的时候,会通过作业执行器运行一个新的Java虚拟机实例独立地执行作业。无论作业成功或失败,所有临时的数据都会随着虚拟机实例的退出而销毁。另一方面随着多核技术的发展,单个计算节点的处理能力日益提升,而体系结构则日趋复杂。其中多核上的并行计算问题和数据局部性问题是决定程序执行性能的关键因素。如果程序不能充分地同时利用多个计算核心资源进行计算,空闲的核心就会造成计算资源的浪费,使得程序只能使用多核架构的部分计算能力。数据局部性包括空间局部性 (临近的数据会被相继访问)和时间局部性(相同数据会被多次访问),改善数据局部性可以有效地提高CPU高速缓存性能及输入输出子系统的性能,从而改善整体的运算性能。因此,为了最大限度地挖掘单个计算节点的运算能力,应用程序必须充分考虑上述两个问题,并根据应用程序特点进行相应的细粒度优化。但是现有的Hadoop作业执行器并不能很好地解决这两个问题。这是由于作业执行器是在Java虚拟机实例上进行作业处理,Java虚拟机为上层应用程序提供了统一的抽象的执行环境,使得应用程序无法通过底层操作系统去针对体系结构特点进行优化。
技术实现思路
本专利技术的目的是为克服现有技术的不足,针对现有的映射/规约框架无法充分利用单个计算节点上的处理能力这一问题,提供。现有的映射/规约框架如Hadoop主要注重于集群层次的并行计算,并没有考虑单个计算节点上的细粒度优化,忽视了普遍流行的多核架构的并行计算和数据局部性问题, 从而无法最大程度挖掘计算节点的处理能力。为解决上述问题,本专利技术建立层次化的映射/归约并行编程模型,其包括使用C 语言实现单节点上的作业处理逻辑,以实现原有Java虚拟机之上很难乃至无法实现的任务并行和数据局部性优化;对应于一般的集群环境中的双层并行架构(多个计算节点间的集群并行架构和单个计算节点内的多核并行架构),采用层次化的映射/规约框架,在单个计算节点上也应用映射/规约模型以实现多核架构上的并行处理,如图2所示。所述的作业处理逻辑,包括作业执行器全部,以及作业跟踪器相应部分的改进。作业执行器按照映射/规约模型用C语言重新实现;改进的作业跟踪器需要在自身初始化的时候编译作业执行器所需的库程序,在执行作业的时候根据作业类型调用相应的作业执行器执行(对于原有类型的作业调用原有作业执行器执行,对于新类型的作业调用C语言实现的高效作业执行器执行)。所述的任务并行优化,包括映射作业的数据获取与数据处理之间的并行,以及规约作业的数据获取与数据处理之间的并行。对于映射作业,作业执行器将创建一个独立的数据加载线程从分布式文件系统读取输入数据,与此同时数据处理线程不断地处理已读取的数据,每次处理数据的粒度可由用户控制;对于规约作业,也采用类似的并行作业方式, 所不同的是规约作业的数据获取线程以文件的粒度读取数据,当一个待处理文件被完整地读取之后,相应的处理线程才开始处理该输入文件。所述的数据局部性优化,包括高速缓存级别的数据局部性和内存级别的数据局部性。对于高速缓存级别的数据局部性,作业执行器将输入数据作进一步的切分,使得每次处理的数据单元能完整地加载到CPU上的一级高速缓存;对于内存级别的数据局部性,作业执行器将尽可能地重用内存中的数据与数据结构,如将原始文本读入内存再利用单词末尾的标点对单词进行划分,避免了多余的单词文本数据复制。本专利技术的有益效果是,实现了高效的作业执行器,充分挖掘了单个计算节点的处理能力,特别是多核架构的并行处理能力和缓存及内存中本文档来自技高网
...

【技术保护点】
1.一种建立层次化的映射/归约并行编程模型的方法,其特征在于,其包括:使用C语言实现单节点上的作业处理逻辑,实现任务并行和数据局部性优化;对应于一般的集群环境中的双层并行架构,采用层次化的映射/规约框架,在单个计算节点上应用映射/规约模型实现多核架构上的并行处理。

【技术特征摘要】
1.一种建立层次化的映射/归约并行编程模型的方法,其特征在于,其包括使用C语言实现单节点上的作业处理逻辑,实现任务并行和数据局部性优化;对应于一般的集群环境中的双层并行架构,采用层次化的映射/规约框架,在单个计算节点上应用映射/规约模型实现多核架构上的并行处理。2.按权利要求1所述的方法,其特征在于,所述的作业处理逻辑包括作业执行器全部, 以及作业跟踪器相应部分的改进。3.按权利要求2所述的方法,其特征在于,所述的作业执行器按照映射/规约模型用C 语言重新实现;改进的作业跟踪器在自身初始化的时候编译作业执行器所需的库程序,在执行作业的时候根据作业类型调用相应的作业执行...

【专利技术属性】
技术研发人员:陈海波肖之慰臧斌宇
申请(专利权)人:复旦大学
类型:发明
国别省市:31

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

1