CN107807983A - 一种支持大规模动态图数据查询的并行处理框架及设计方法 - Google Patents
一种支持大规模动态图数据查询的并行处理框架及设计方法 Download PDFInfo
- Publication number
- CN107807983A CN107807983A CN201711034642.3A CN201711034642A CN107807983A CN 107807983 A CN107807983 A CN 107807983A CN 201711034642 A CN201711034642 A CN 201711034642A CN 107807983 A CN107807983 A CN 107807983A
- Authority
- CN
- China
- Prior art keywords
- task
- file
- tasktracker
- reduce
- jobtracker
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种支持大规模动态图数据查询的并行处理框架及设计方法,设计方法如下:该并行处理框架结合了MapReduce框架和BSP框架,以Hadoop框架为底层基础,采取“MapReduce+BSP”模式来满足图计算数据量大和多次迭代的需求,同时该并行处理框架通过构建迭代控制模块、构建实时监听模块、Map阶段功能设计、Reduce阶段功能设计来实现实时监控功能来检查图文件的动态变化。本发明设计出的框架将MapReduce框架和BSP框架的优势合二为一,在解决BSP框架无法实现高吞吐量计算的同时,避免了MapReduce框架无法进行多次迭代计算的缺点。
Description
技术领域
本发明属于大规模图技术领域,特别涉及一种图数据的处理框架设计,具体涉及一种支持大规模动态图数据查询的并行处理框架的设计。
背景技术
随着“大数据”和“云计算”技术的快速发展,新一代信息通信技术已经崛起。智能交通、社交网络等领域已经很难用传统互联网技术来满足大众的需求。如何处理这些领域背后复杂图结构的问题,已经成为越来越多研究机构关注的重点。在信息量增长和数据间关系复杂的环境下,大规模动态图的处理技术日新月异,以Google、Facebook、Apache等为代表的研究机构针对大规模动态图的存储、索引、迭代处理等技术推出了一系列框架平台,以此来满足不同背景领域的需求。
目前,针对于大规模动态图的处理框架主要集中在MapReduce和BSP两个框架上。图1、图2分别给出了MapReduce和BSP框架的工作流程。对比两个基础框架,MapReduce框架能够对大块文件进行批处理,如图1所示,该框架拥有比较成熟的编程接口,易于编程实现,具有较高的通用性和抽象度,但是对于迭代计算只能在外部多次链式启动作业,产生较高网络传输开销,大大降低了处理效率,故不适合迭代计算和对实时性要求较高的计算;而BSP框架引入“超步”概念,是一个状态框架,如图2所示,该框架能够较好地解决迭代计算的问题,适用于迭代计算和矩阵计算,但由于其是基于内存计算的框架,对于集群中各节点的内存性能要求较高,而且现有实现框架中在版本稳定性和各项机制等方面都不够成熟,数据计算吞吐量较弱。因此,设计一种针对大规模动态图数据查询的处理框架是非常必要的。
发明内容
为了解决现有大规模图处理框架的不足,本发明提供一种支持大规模动态图数据查询的并行处理框架及设计方法,能够有效地支持大规模动态图的处理操作。
本发明采用的技术方案是:设计并实现了一种专门针对大规模动态图处理算法的轻量级框架,框架结合MapReduce框架和BSP框架的优势,针对大规模动态图处理算法对数据规模、迭代效率、时效性等要求较高的特点,以Hadoop框架为底层基础,采取“MapReduce+BSP”模式来满足图计算数据量大和多次迭代的需求,在HDFS分布式文件系统的基础上对Hadoop核心源码包进行部分修改,保留了Hadoop框架原有的分布式文件系统、主从集群架构模式、RPC通信机制、容错控制机制、任务调度机制等特性外,同时增加了实时监控功能来检查图文件的动态变化,依次增加了迭代控制模块(JobTracker)、实时监听模块、Map阶段缓存数据获取模块、Reduce阶段本地溢写模块四个主要模块,分别用于BSP迭代控制,Hadoop实时监听以及MapReduce框架优化。
本发明的设计方法具体如下:
步骤1 构建JobTracker迭代控制模块。用户在提交作业时,通过实现迭代控制接口及相应图处理算法的迭代收敛条件来完成框架的迭代控制功能。
框架的主从节点间通过Hadoop框架的心跳机制,来进行任务执行状态的通信,从而判断是否满足作业的迭代终止条件,最终实现控制各节点任务的迭代执行。JobTracker模块避免了通过外部链式多次启动作业实现迭代处理所带来的作业多次初始化和作业多次与HDFS文件系统交互所带来的开销。
步骤1-1 初始化JobTracker
JobTracker模块通过脚本命令start-mapred.sh进行启动,JobTracker进程启动后,会通过调用offerService()方法启动一些服务或线程,如RPC服务器、内置jetty服务器、TaskScheduler调度器等。在初始化过程中,还要启动一些监听线程来跟踪作业的状态并及时向JobTracker反馈:jobQueueJobInProgressListener用来跟踪各个JobInProgress实例在作业执行过程中的改变;eagerTaskInitializationListener不断监听Job初始化队列,如果有新提交的Job就进行初始化。同时在初始化工作中还要启动迭代监听线程loopListener,进行循环监听各TaskTracker发送给JobTracker的心跳信息,获取其中循环控制标志位的信息,并判断是否满足迭代终止条件,不满足则向JobTracker反馈继续执行MapTask命令,满足则向JobTracker反馈将临时文件结果写入HDFS文件系统命令。
步骤1-2 RPC通信机制和心跳机制
步骤1-2-1 建立通信连接
首先,TaskTracker在初始化时会执行run()方法来与JobTracker建立连接,并且每隔一段心跳间隔与JobTracker主动通信一次。同时TaskTracker还会启动多个线程服务来循环发送当前节点任务运行的状态信息并且接收处理由JobTracker返回来的命令信息。TaskTracker首先检查当前任务的执行情况和本地磁盘的使用情况等,若可以接收新的任务,则通过transmitHeartBeat()方法按照一定心跳间隔主动向JobTracker发送心跳信息,将目前记录的任务的执行状况汇报给JobTracker,这个心跳时间是由节点完成的任务数动态控制的。
步骤1-2-2 接收心跳信息
其次,JobTracker接收到TaskTracker发送过来的心跳信息后,首先检查心跳信息是否来自于合法的TaskTracker节点,然后根据status、acceptNewTasks、responseId等参数来获得TaskTracker的状态信息、心跳编号等,处理发送过来的心跳信息。等到所有TaskTracker任务完成后,JobTracker还会处理来自loopListener线程发来的迭代标志位的信息,若继续进行迭代则会将任务放入actions列表,返回给TaskTracker继续执行,最后返回response响应信息。
步骤1-2-3 完成迭代任务
最后,TaskTracker接收到JobTracker发送回来的响应信息后,通过调用getActions方法获得TaskTrackerAction数组中的命令,进行下一轮的迭代任务。
步骤1-3 清理本地临时文件
当loopListener线程发来迭代结束的标志位信息时,JobTracker会实例化Task类中的NewDirectOutputCollector对象,将最后结果直接输出到HDFS分布式文件系统,同时将JobCleanup任务返回给TaskTracker执行,进行清理本地系统的临时文件,包括数据文件、分片信息、Job配置信息、Job的jar文件等。
步骤2 构建实时监控模块。监听进程模块作为单独的一个进程来运行,与JobTracker进程同时启动,主要负责实时监控HDFS分布式文件系统的文件变化,通过设定相应的路径和时间间隔,来采取轮询机制定时监控固定的文件输入目录是否发生变化,从而实现处理动态图算法的功能。
步骤2-1 初始化监听进程
监听进程模块作为单独的一个进程来运行,与JobTracker进程同时启动,主要负责实时监控HDFS分布式文件系统的文件变化,通过设定相应的路径和时间间隔,来采取轮询机制定时监控固定的文件输入目录是否发生变化,从而实现处理动态图算法的功能。
监听进程模块主要由Listener和Monitor两部分构成,整体采用了观察者的设计模式,定义了对象间一对多的依赖关系,通过多个观察者对象监听HDFS分布式文件系统内文件夹和文件的创建、修改、删除等事件源,当这些事件源被触发时,通知所有依赖于此的观察者对象,使得观察者根据此反馈进行后续操作。当JobTracker进程启动时,监听进程模块同时启动并初始化Listener和Monitor,接收来自客户端传入的被监控对象的路径和监控扫描时间间隔等参数信息,调用start()方法开始定时扫描固定路径下的文件,完成实时监听模块的初始化工作。
步骤2-2 开启监听进程工作流程
步骤2-2-1 添加对象
首先,Monitor会实例化带有监控扫描周期间隔interval(由用户根据动态图更新的实时性要求进行设定)的对象,同时添加观察者observer来监控HDFS分布式文件系统的指定路径,然后观察者observer会将监听不同事件源的listener加入进来,接下来调用start()方法启动Monitor进行监控。
步骤2-2-2 监听变化
其次,Listener会按照固定的时间周期interval对HDFS分布式文件系统指定路径进行不间断循环监听扫描工作。当有用户上传文件或者对文件进行部分更新或者删除等涉及到HDFS分布式文件系统指定路径下文件变化的操作时,Listener会向Monitor进行信息反馈,Monitor同时向各个监听者进行状态更新,调用相应方法进行处理。
步骤2-2-3 更新状态
最后,当Monitor接收到来自于Listener的反馈后,会向客户端返回提示信息,报告监测出指定路径下文件发生变化,是否提交新的作业对输入文件进行处理。通过监听进程不断地对HDFS分布式文件系统指定路径进行实时监控并与客户端进行信息反馈来实现对动态图的处理。
步骤3 Map阶段功能设计。Mapper将会从执行完毕的Reducer本地缓存文件目录中拷贝待处理文件,并且与TaskTracker保持通信,按照相应命令进行处理下一轮迭代任务。
步骤3-1 初始化MapTask
TaskTracker会加载一些本机配置信息,初始化并启动HTTP服务器,同时获取Map任务的最大slot数量,创建从HDFS分布式文件系统下载到本地的文件目录,构造一个TaskController接口来控制任务执行,包括初始化、杀死任务、清理工作目录等工作。
在MapTask初始化的过程中,会通过TaskTracker调用localizeJob方法首先对作业进行本地化,在本地创建一些目录,并从HDFS下载job的jar文件以及JobToken和job.xml等作业配置信息文件到本地,之后的task只对待执行的任务本地化,以减少作业相关信息的远程拷贝。在MapTask中还会启动一个mapLauncher线程,这个线程的任务就是循环监测待执行Map任务队列中是否有新的任务,如果有则从队列中取出,然后启动一个task任务并执行。
步骤 3-2 开启MapTask工作流程
步骤 3-2-1 启动MapTask
首先,MapTask会启动一个进程来占用一个JVM执行Map任务,Child通过执行run()方法来完成具体的MapTask任务。Child通过TaskUmbilicalProtocol协议保持与TaskTracker的通信,并从TaskTracker获取相应的任务,报告任务的进度及完成状态,TaskTracker负责接收Child所报告的信息和状态并监控任务执行的进度。
步骤 3-2-2 获取信息
其次,MapTask会在本地临时工作目录中获取配置信息、用户编写的Mapper类、用户指定的InputFormat对象、相应的分片信息split等。拷贝待执行的数据分片就是从执行完Reduce任务的各个节点里,按照JobTracker所分配的key值获取相应的Reduce输出文件。通过实例化MapCopier对象,并且同时启动多个Copier线程将Reduce函数的输出拷贝至Map所在节点工作目录
步骤3-2-3 数据通信
再次,Map端通过HTTP协议获取Reduce端的数据,当某个节点有Reduce输出任务完成,Map端就开始拷贝它的输出,JobTracker通过各TaskTracker汇报的心跳信息可以获得Reduce输出与TaskTracker的映射关系,Map端会启动一个线程通过RPC协议周期性地向TaskTracker询问获得Reduce的输出地址,并保存到映射表中,这样就可以按照映射表从Reduce输出端获取到所需的全部数据。在Map拷贝数据时会预先判断待拷贝数据的大小,如果小于给定阈值,则Map会将他们复制到内存中,否则会将它们复制到本地磁盘上的工作目录中。不论是复制到磁盘上还是内存中,为了防止文件数过多,Map都会启动线程对磁盘或内存上的文件进行合并。
步骤3-2-4 完成MapTask
最后,当所有的Reduce输出被成功复制完成后,Map将进入归并排序阶段。Map会调用工具类Merger对所有拷贝的文件进行归并排序,最终生成一个合并了所有本节点待处理的文件,同时删除从其他节点拷贝过来的数据分片,这样就完成了数据分片的拷贝工作。Map阶段最后读取本地工作目录中的配置文件,按照用户编写的Map程序处理数据分片,完成本次迭代任务的Map阶段。
步骤 3-3 拷贝数据分片
MapTask通过启动线程轮询并调用getReduceCompletionEvents方法与TaskTracker进行通信,获得Reduce任务的完成信息列表,包括TaskID和IP地址等信息,同时获取属于自己节点MapTask任务所对应的ID,开启多个Copier线程,通过调用copyOutput方法做具体的拷贝工作。
copyOutput()方法首先检查Reduce输出文件列表中的文件是否已经拷贝过或者存在于当前MapTask本地节点中,如果已经拷贝过或者存在就直接返回;然后按照TaskID和IP地址等信息与远程TaskTracker建立连接,获取输入流,通过检查文件大小来决定放入内存或者本地磁盘中,最终返回Output对象,并将拷贝的结果放入copyResults中。成功拷贝后,向TaskTracker返回SUCCEEDED信息,TaskTracker将列表中相应的记录移除并删除相关临时文件。若拷贝不成功,则返回FAILED信息,TaskTracker会将该条记录进行标记,并且优先进行下次拷贝,若果拷贝失败次数超过设定阈值则杀死对应MapTask,由TaskTracker重新调度分配新的MapTask进行拷贝工作。
步骤4 Reduce阶段功能设计。框架针对图处理多次迭代的特点,Reduce阶段结束后会将中间结果写到本地磁盘系统而非HDFS文件系统,等到作业中所有迭代任务完成后,再将最终结果写入到HDFS中,最终清除缓存目录,完成作业。
步骤4-1 初始化ReduceTask
TaskTracker首先会加载一些作业相关配置信息,初始化控制任务执行的相关线程,如启动reporter进程向TaskTracker汇报任务执行状态信息,启动reduceLauncher线程监测Reduce任务队列中是否有新的任务。通过调用initialize方法来初始化任务,进行一些和任务输出相关的设置,例如,实例化NewOutputCollector对象进行本地磁盘输出操作,设置本地磁盘输出文件缓存目录,清理文件输出目录等。同时,ReduceTask会初始化添加reduce执行过程中经历的三个阶段:copyPhase、sortPhase、reducePhase,通过这三个阶段通知TaskTracker当前ReduceTask完成任务的状态。最后,启动一个ReduceEventsFetcher线程来获取Reduce任务的输出数据信息,获取已成功完成的Reduce Task列表,为MapTask下一次迭代拷贝数据做准备。
步骤4-2 开启ReduceTask工作流程
步骤4-2-1 拷贝数据
首先,ReduceTask先将Map任务的输出结果通过ReduceCopier拷贝到本地节点的工作目录。接下来,等到所有的Map输出结果都拷贝完成后,合并排序所有Map任务输出结果,并产生待处理文件,然后按照用户编写的Reduce程序对待处理文件进行归约操作,完成Reduce阶段的处理工作。
步骤4-2-2 完成ReduceTask
其次,将Reduce输出的结果保存在临时文件目录下,并向TaskTracker汇报当前任务状态。如果JobTracker返回继续迭代的命令,ReduceTask将已完成的任务放入TaskCompletionEvent列表中,列表保存了TaskTracker与已完成任务的映射关系等信息,然后等待各节点下一轮的MapTask按照列表将中间临时结果拷贝完成后,删除中间结果文件及当前TaskID所对应的临时工作目录。如果JobTracker返回终止迭代的命令,等待所有节点迭代结束后,调用moveFromLocalFile()方法将各节点本地临时文件上传到HDFS文件系统中,并调用merge()方法将多个临时输出文件排序合并生成最终结果文件,完成最终结果的输出,返回Job成功完成的信息给客户端。
步骤4-2-3 写出缓冲区文件
最后,当ReduceTask完成Reduce阶段任务后,开始向本地磁盘输出中间结果文件。此时,需要实例化NewOutputCollector对象,通过调用collect方法来对输出的数据进行分区操作,即按照配置信息中Mapper的个数通过HashPartitioner对相应的key值进行Hash散列操作,确定输出的数据文件要拷贝到哪个Mapper节点。
步骤4-3 缓冲区文件溢写操作
当Reduce阶段进行数据输出时,会使用一个环形缓冲区来暂存输出数据,当环形缓冲区达到一定阈值(默认为80%)或者缓冲区中有无法容纳的超大数据记录时,会触发环形缓冲区溢写操作,通过唤醒spill线程调用sortAndSpill()方法将缓冲区中的数据溢写到磁盘上,在向磁盘溢写文件的同时仍然可以继续向缓冲区剩余空间写入数据,从而实现读写并行,最大程度地利用内存和磁盘资源。如果数据较少没有达到阈值触发溢写操作,当关闭输出流后,则会调用flush方法将缓冲区的数据写入到本地文件。触发溢写操作时,首先计算待写入文件的大小,接下来会获取溢写文件的编号及文件名,通过构造一个输出流将缓冲区数据向spill.out文件写入,同时也会将包含在文件中的偏移量等分区数据的元信息写到索引文件spill.out.index中,然后使用快速排序法对缓冲区的数据记录进行排序,先按分区编号进行排序,相同分区的数据再按key值进行排序,这样输出的数据按照分区聚集在一起,各节点的MapTask就可以按照输出数据的分区列表进行拷贝。
本发明的有益效果:本发明在分布式集群环境下,结合大规模动态图处理算法数据规模大、迭代次数多、有一定时效性要求等特点,设计出一种支持大规模动态图数据查询的并行处理框架;相比现有的MapReduce框架和BSP框架,本发明设计出的框架将MapReduce框架和BSP框架的优势合二为一,在解决BSP框架无法实现高吞吐量计算的同时,避免了MapReduce框架无法进行多次迭代计算的缺点,使整个框架更好的支持大规模动态图的复杂计算,符合大数据时代的数据处理特点。
附图说明
图1 MapReduce框架工作流程图。
图2 BSP框架工作流程图。
图3 本发明框架总体架构图。
图4 本发明总体流程图。
图5 本发明JobTracker初始化流程图。
图6 本发明心跳机制示意图。
图7 本发明监听进程工作流程图。
图8 本发明MapTask拷贝数据流程示意图。
图9 本发明ReduceTask工作流程图。
图10 本发明缓冲区文件溢写流程示意图。
图11 图文件数据结构定义示意图。
图12 基于MapReduce的单源最短路径算法示意图。
具体实施方式
结合附图对本发明做进一步描述:
为了测试本发明大规模动态图处理框架的性能,作为本发明的一个实例,我们构造了一个小型集群环境,集群架构示意图如图3所示,流程图如图4所示。集群由三台相同的PC机组成,其中一台作为Master节点,另外两台作为Slave节点。每台机器的硬件配置均为Intel(R) Pentium(R) CPU G3220 @ 3.00GHz,4.00GB内存和500 GB硬盘;软件配置为Ubuntu14.04操作系统,安装JDK1.7;三台机器的IP分别设置为192.168.31.131(Master),192.168.31.132(Slave1),192.168.31.133(Slave2)。同时,为三台机器安装Hadoop1.2.1,将修改编译好的源码打包成hadoop-core-1.2.1.jar文件,并且替换掉原文件。安装配置SSH免密码登陆环境,确保集群间各节点可以相互访问。
为了测试此大规模动态图处理框架的性能,本发明采用用单源最短路径算法对大规模动态图文件进行处理。大规模图文件数据集的格式为文本文件,数据集采用合成的模拟数据集。原始图文件大小为119M,由4096000个顶点组成,出度数为6144000。文件中有向图的存储方式采用邻接表,每一行代表有向图的一个顶点。图文件中数据结构定义如图11所示
下面集合附图给出本发明的一个实例:
(1) 构造了一个小型集群,集群由三台相同的PC机组成,其中一台作为Master节点,另外两台作为Slave节点。采用经典的Dijkstra单源最短路径算法来处理图文件。在单源最短路径算法中,给定图G=(V,E,W),其中V为顶点集,E为有向边集,W为非负权值集。在V中选取一个顶点v作为源,计算从v到其他顶点的最短路径长度,即求得各边权值之和的最小值。
(2) Dijkstra算法按照顶点集中各顶点与源点间权值的递增次序,生成源点到各顶点的最短路径。其算法类似于图的广度优先搜素遍历算法,即先求出权值最小的最短路径,再参照它求出权值次小的一条最短路径,以此类推,全部求出从源点到其它各顶点的最短路径。
图5为本发明JobTracker初始化流程图。当用户提交图数据后,框架首先实例化JobTracker用以接受用户请求,由于JobTracker与TaskTracker之间通过心跳机制进行各节点状态以及任务的执行情况的传递和沟通。图5中按照图6所示心跳机制原理,监听各个TaskTracker的心跳信息,确保Dijkstra算法可进入到MapReduce阶段。
(3) 对框架进程进行监听。
图7给出了监听进程工作流程。监听进程模块主要由Listener和Monitor两部分构成,框架启动后,系统会初始化Listener和Monitor,并指定监听路径和扫面文件的时间间隔,同时,添加observe和listener对象,条用star()方法启动监听。当Listener监听到指定路径下文件发生变化时,会反馈给Monitor,有Monitor通知各个监听者实时更新状态信息,并调用相应方法处理。
(4) MapReduce阶段程序处理
图12为基于MapReduce的单源最短路径整体算法示意图。基于MapReduce框架实现Dijkstra单源最短路径算法需要编写Map和Reduce两个函数。其中Map函数将图文件中的数据按行进行读取,每行数据为一个顶点的全部信息,并以< key,value>键值对的形式存储,当且仅当value中的处理标志位值为1时,对当前记录进行处理,否则直接输出原记录。如图8所示,Map函数在处理当前记录时,会遍历value中所有出度节点及其权值,并计算源点到出度节点的路径值,同时将当前节点的处理标志位置为2,表示处理结束,将出度节点的处理标志位置为1,表示待处理。最后将所有处理后的记录以< key,value >键值对的形式进行输出。
在MapReduce框架中间的Shuffle过程中,会将Map输出的相同key值的记录(即将源点到同一顶点不同的路径值集合)交给同一Reduce进行处理。如图9所示,Reduce函数会将< key,value-list>中的路径值进行比较,选出最短的路径值进行最终输出,同时将各节点的处理标志位置为2,表示处理结束。当所有节点的处理标志位值均为0或2时,表示迭代停止,算法程序处理结束。当ReduceTask所有输出操作结束后,图10所示,如果产生多个溢写文件,则会调用mergeParts()方法将所有溢写文件合并成一个file.out文件并存到本地工作目录中,同时也会在本地工作目录中生成一个索引文件file.out.index。在进行溢写文件合并的时候,ReduceTask按照分区对spill文件进行递归合并,最终合并生成一个文件,并删除所有的spill文件。
Claims (6)
1.一种支持大规模动态图数据查询的并行处理框架,其特征在于:该并行处理框架结合了MapReduce框架和BSP框架,以Hadoop框架为底层基础,采取“MapReduce+BSP”模式来满足图计算数据量大和多次迭代的需求,在HDFS分布式文件系统的基础上对Hadoop核心源码包进行部分修改,保留了Hadoop框架原有的分布式文件系统、主从集群架构模式、RPC通信机制、容错控制机制、任务调度机制,同时该并行处理框架通过构建迭代控制模块JobTracker、构建实时监听模块、Map阶段功能设计、Reduce阶段功能设计来实现实时监控功能来检查图文件的动态变化以及实现BSP迭代控制、Hadoop实时监听、MapReduce框架优化。
2.一种支持大规模动态图数据查询的并行处理框架的设计方法,采用了按照权利要求1所述的并行处理框架,其特征在于具体设计方法如下:
步骤1 构建JobTracker迭代控制模块:用户在提交作业时,通过实现迭代控制接口及相应图处理算法的迭代收敛条件来完成框架的迭代控制功能;
步骤2 构建监听进程模块:监听进程模块作为单独的一个进程来运行,与JobTracker进程同时启动,主要负责实时监控HDFS分布式文件系统的文件变化,通过设定相应的路径和时间间隔,来采取轮询机制定时监控固定的文件输入目录是否发生变化,从而实现处理动态图算法的功能;
步骤3 Map阶段功能设计:Mapper将会从执行完毕的Reducer本地缓存文件目录中拷贝待处理文件,并且与TaskTracker保持通信,按照相应命令进行处理下一轮迭代任务;
步骤4 Reduce阶段功能设计:框架针对图处理多次迭代的特点,Reduce阶段结束后会将中间结果写到本地磁盘系统而非HDFS文件系统,等到作业中所有迭代任务完成后,再将最终结果写入到HDFS中,最终清除缓存目录,完成作业。
3.按照权利要求2所述的一种支持大规模动态图数据查询的并行处理框架的设计方法,其特征在于所述JobTracker迭代控制模块的构建方法如下:
步骤1-1 初始化JobTracker
JobTracker模块通过脚本命令start-mapred.sh进行启动,JobTracker进程启动后,会通过调用offerService()方法启动一些监听线程来跟踪作业的状态并及时向JobTracker反馈;jobQueueJobInProgressListener用来跟踪各个JobInProgress实例在作业执行过程中的改变;eagerTaskInitializationListener不断监听Job初始化队列;
步骤1-2 RPC通信机制和心跳机制
首先,TaskTracker在初始化时会执行run()方法来与JobTracker建立连接,JobTracker接收到TaskTracker发送过来的心跳信息后,首先检查心跳信息是否来自于合法的TaskTracker节点,然后根据status、acceptNewTasks、responseId等参数来获得TaskTracker的状态信息、心跳编号等,处理发送过来的心跳信息,最后,TaskTracker接收到JobTracker发送回来的响应信息后,通过调用getActions方法获得TaskTrackerAction数组中的命令,进行下一轮的迭代任务;
步骤1-3 清理本地临时文件
当loopListener线程发来迭代结束的标志位信息时,JobTracker会实例化Task类中的NewDirectOutputCollector对象,将最后结果直接输出到HDFS分布式文件系统,同时将JobCleanup任务返回给TaskTracker执行,进行清理本地系统的临时文件。
4.按照权利要求2所述的一种支持大规模动态图数据查询的并行处理框架的设计方法,其特征在于所述监听进程模块的构建方法如下:
步骤2-1 初始化监听进程
监听进程模块主要由Listener和Monitor两部分构成,整体采用了观察者的设计模式,定义了对象间一对多的依赖关系,通过多个观察者对象监听HDFS分布式文件系统内文件夹和文件的创建、修改、删除等事件源,当这些事件源被触发时,通知所有依赖于此的观察者对象,使得观察者根据此反馈进行后续操作;当JobTracker进程启动时,监听进程模块同时启动并初始化Listener和Monitor,接收来自客户端传入的被监控对象的路径和监控扫描时间间隔等参数信息,调用start()方法开始定时扫描固定路径下的文件,完成监听进程模块的初始化工作;
步骤2-2 开启监听进程工作流程
Monitor会实例化带有监控扫描周期间隔interval的对象,观察者observer会将监听不同事件源的listener加入进来,接下来调用start()方法启动Monitor进行监控,Listener会按照固定的时间周期interval对HDFS分布式文件系统指定路径进行不间断循环监听扫描工作,当Monitor接收到来自于Listener的反馈后,会向客户端返回提示信息,报告监测出指定路径下文件发生变化,是否提交新的作业对输入文件进行处理。
5.按照权利要求2所述的一种支持大规模动态图数据查询的并行处理框架的设计方法,其特征在于所述Map阶段功能设计,包括如下步骤:
步骤3-1 初始化MapTask
在MapTask初始化的过程中,会通过TaskTracker调用localizeJob方法首先对作业进行本地化,在本地创建一些目录,并从HDFS下载job的jar文件以及JobToken和job.xml等作业配置信息文件到本地,之后的task只对待执行的任务本地化,以减少作业相关信息的远程拷贝;在MapTask中还会启动一个mapLauncher线程,这个线程的任务就是循环监测待执行Map任务队列中是否有新的任务,如果有则从队列中取出,然后启动一个task任务并执行;
步骤 3-2 开启MapTask工作流程
首先,MapTask会启动一个进程来占用一个JVM执行Map任务,Child通过执行run()方法来完成具体的MapTask任务;MapTask会在本地临时工作目录中获取配置信息、用户编写的Mapper类、用户指定的InputFormat对象、相应的分片信息split等;拷贝待执行的数据分片就是从执行完Reduce任务的各个节点里,按照JobTracker所分配的key值获取相应的Reduce输出文件;Map端通过HTTP协议获取Reduce端的数据,JobTracker通过各TaskTracker汇报的心跳信息可以获得Reduce输出与TaskTracker的映射关系,Map端会启动一个线程通过RPC协议周期性地向TaskTracker询问获得Reduce的输出地址,并保存到映射表中,这样就可以按照映射表从Reduce输出端获取到所需的全部数据;最后,当所有的Reduce输出被成功复制完成后,Map将进入归并排序阶段;
步骤 3-3 拷贝数据分片
MapTask通过启动线程轮询并调用getReduceCompletionEvents方法与TaskTracker进行通信,获得Reduce任务的完成信息列表,包括TaskID和IP地址等信息,同时获取属于自己节点MapTask任务所对应的ID,开启多个Copier线程,通过调用copyOutput方法做具体的拷贝工作。
6.按照权利要求2所述的一种支持大规模动态图数据查询的并行处理框架的设计方法,其特征在于所述Reduce阶段功能设计,包括如下步骤:
步骤4-1 初始化ReduceTask
TaskTracker首先会加载一些作业相关配置信息,初始化控制任务执行的相关线程,如启动reporter进程向TaskTracker汇报任务执行状态信息,启动reduceLauncher线程监测Reduce任务队列中是否有新的任务;通过调用initialize方法来初始化任务,进行一些和任务输出相关的设置,同时,ReduceTask会初始化添加reduce执行过程中经历的三个阶段:copyPhase、sortPhase、reducePhase,通过这三个阶段通知TaskTracker当前ReduceTask完成任务的状态;最后,启动一个ReduceEventsFetcher线程来获取Reduce任务的输出数据信息,获取已成功完成的Reduce Task列表,为MapTask下一次迭代拷贝数据做准备;
步骤4-2 开启ReduceTask工作流程
首先,ReduceTask先将Map任务的输出结果通过ReduceCopier拷贝到本地节点的工作目录,其次,将Reduce输出的结果保存在临时文件目录下,并向TaskTracker汇报当前任务状态,最后,当ReduceTask完成Reduce阶段任务后,开始向本地磁盘输出中间结果文件;
步骤4-3 缓冲区文件溢写操作
当Reduce阶段进行数据输出时,会使用一个环形缓冲区来暂存输出数据,当环形缓冲区达到一定阈值或者缓冲区中有无法容纳的超大数据记录时,会触发环形缓冲区溢写操作,通过唤醒spill线程调用sortAndSpill()方法将缓冲区中的数据溢写到磁盘上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711034642.3A CN107807983B (zh) | 2017-10-30 | 2017-10-30 | 一种支持大规模动态图数据查询的并行处理框架的设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711034642.3A CN107807983B (zh) | 2017-10-30 | 2017-10-30 | 一种支持大规模动态图数据查询的并行处理框架的设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107807983A true CN107807983A (zh) | 2018-03-16 |
CN107807983B CN107807983B (zh) | 2021-08-24 |
Family
ID=61582506
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711034642.3A Active CN107807983B (zh) | 2017-10-30 | 2017-10-30 | 一种支持大规模动态图数据查询的并行处理框架的设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107807983B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110069334A (zh) * | 2019-05-05 | 2019-07-30 | 重庆天蓬网络有限公司 | 一种基于包管理的分布式数据作业调度的方法和系统 |
CN111427698A (zh) * | 2020-03-26 | 2020-07-17 | 平安医疗健康管理股份有限公司 | 基于Azakban的数据同步方法、装置和计算机设备 |
CN112037874A (zh) * | 2020-09-03 | 2020-12-04 | 合肥工业大学 | 一种基于映射归约的分布式数据处理方法 |
CN112765177A (zh) * | 2021-01-26 | 2021-05-07 | 武汉大学 | 一种基于负载驱动的分布式图数据分割和复制方法 |
WO2022001430A1 (zh) * | 2020-06-29 | 2022-01-06 | 中兴通讯股份有限公司 | 一种高吞吐量流处理方法、装置及计算机可读存储介质 |
US20230267120A1 (en) * | 2022-01-26 | 2023-08-24 | Oracle International Corporation | Using temporary tables to store graph algorithm results for a relational database management system |
US11989178B2 (en) | 2020-10-26 | 2024-05-21 | Oracle International Corporation | Efficient compilation of graph queries including complex expressions on top of sql based relational engine |
US12124448B2 (en) * | 2022-01-26 | 2024-10-22 | Oracle International Corporation | Using temporary tables to store graph algorithm results for a relational database management system |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279543A (zh) * | 2013-05-13 | 2013-09-04 | 清华大学 | 海量图数据上的路径模式查询系统 |
CN103279546A (zh) * | 2013-05-13 | 2013-09-04 | 清华大学 | 图数据查询方法 |
CN103336808A (zh) * | 2013-06-25 | 2013-10-02 | 中国科学院信息工程研究所 | 一种基于bsp模型的实时图数据处理系统及方法 |
CN103488775A (zh) * | 2013-09-29 | 2014-01-01 | 中国科学院信息工程研究所 | 一种用于大数据处理的计算系统及计算方法 |
CN103617087A (zh) * | 2013-11-25 | 2014-03-05 | 华中科技大学 | 一种适合迭代计算的MapReduce优化方法 |
WO2015183253A1 (en) * | 2014-05-28 | 2015-12-03 | Hewlett-Packard Development Company, L.P. | Dynamic graphic entity determination |
US20160205172A1 (en) * | 2015-01-08 | 2016-07-14 | Futurewei Technologies, Inc. | Offloading graph based computations to a backend device |
CN105786864A (zh) * | 2014-12-24 | 2016-07-20 | 国家电网公司 | 一种实现海量数据离线分析的方法 |
US9563697B1 (en) * | 2014-02-24 | 2017-02-07 | Amazon Technologies, Inc. | Calculating differences between datasets having differing numbers of partitions |
CN106777351A (zh) * | 2017-01-17 | 2017-05-31 | 中国人民解放军国防科学技术大学 | 基于art树分布式系统图存储计算系统及其方法 |
-
2017
- 2017-10-30 CN CN201711034642.3A patent/CN107807983B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279543A (zh) * | 2013-05-13 | 2013-09-04 | 清华大学 | 海量图数据上的路径模式查询系统 |
CN103279546A (zh) * | 2013-05-13 | 2013-09-04 | 清华大学 | 图数据查询方法 |
CN103336808A (zh) * | 2013-06-25 | 2013-10-02 | 中国科学院信息工程研究所 | 一种基于bsp模型的实时图数据处理系统及方法 |
CN103488775A (zh) * | 2013-09-29 | 2014-01-01 | 中国科学院信息工程研究所 | 一种用于大数据处理的计算系统及计算方法 |
CN103617087A (zh) * | 2013-11-25 | 2014-03-05 | 华中科技大学 | 一种适合迭代计算的MapReduce优化方法 |
US9563697B1 (en) * | 2014-02-24 | 2017-02-07 | Amazon Technologies, Inc. | Calculating differences between datasets having differing numbers of partitions |
WO2015183253A1 (en) * | 2014-05-28 | 2015-12-03 | Hewlett-Packard Development Company, L.P. | Dynamic graphic entity determination |
CN105786864A (zh) * | 2014-12-24 | 2016-07-20 | 国家电网公司 | 一种实现海量数据离线分析的方法 |
US20160205172A1 (en) * | 2015-01-08 | 2016-07-14 | Futurewei Technologies, Inc. | Offloading graph based computations to a backend device |
CN106777351A (zh) * | 2017-01-17 | 2017-05-31 | 中国人民解放军国防科学技术大学 | 基于art树分布式系统图存储计算系统及其方法 |
Non-Patent Citations (2)
Title |
---|
于戈 等: ""云计算环境下的大规模图数据处理技术"", 《计算机学报》 * |
李金忠 等: ""迭代式MapReduce研究进展"", 《计算机工程与应用》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110069334A (zh) * | 2019-05-05 | 2019-07-30 | 重庆天蓬网络有限公司 | 一种基于包管理的分布式数据作业调度的方法和系统 |
CN111427698A (zh) * | 2020-03-26 | 2020-07-17 | 平安医疗健康管理股份有限公司 | 基于Azakban的数据同步方法、装置和计算机设备 |
CN111427698B (zh) * | 2020-03-26 | 2022-11-15 | 深圳平安医疗健康科技服务有限公司 | 基于Azakban的数据同步方法、装置和计算机设备 |
WO2022001430A1 (zh) * | 2020-06-29 | 2022-01-06 | 中兴通讯股份有限公司 | 一种高吞吐量流处理方法、装置及计算机可读存储介质 |
CN113934531A (zh) * | 2020-06-29 | 2022-01-14 | 中兴通讯股份有限公司 | 一种高吞吐量流处理方法及装置 |
CN112037874A (zh) * | 2020-09-03 | 2020-12-04 | 合肥工业大学 | 一种基于映射归约的分布式数据处理方法 |
CN112037874B (zh) * | 2020-09-03 | 2022-09-13 | 合肥工业大学 | 一种基于映射归约的分布式数据处理方法 |
US11989178B2 (en) | 2020-10-26 | 2024-05-21 | Oracle International Corporation | Efficient compilation of graph queries including complex expressions on top of sql based relational engine |
CN112765177A (zh) * | 2021-01-26 | 2021-05-07 | 武汉大学 | 一种基于负载驱动的分布式图数据分割和复制方法 |
CN112765177B (zh) * | 2021-01-26 | 2022-04-29 | 武汉大学 | 一种基于负载驱动的分布式图数据分割和复制方法 |
US20230267120A1 (en) * | 2022-01-26 | 2023-08-24 | Oracle International Corporation | Using temporary tables to store graph algorithm results for a relational database management system |
US12124448B2 (en) * | 2022-01-26 | 2024-10-22 | Oracle International Corporation | Using temporary tables to store graph algorithm results for a relational database management system |
Also Published As
Publication number | Publication date |
---|---|
CN107807983B (zh) | 2021-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107807983A (zh) | 一种支持大规模动态图数据查询的并行处理框架及设计方法 | |
Liu et al. | Adaptive asynchronous federated learning in resource-constrained edge computing | |
Dobbelaere et al. | Kafka versus RabbitMQ: A comparative study of two industry reference publish/subscribe implementations: Industry Paper | |
CN103414761B (zh) | 一种基于Hadoop架构的移动终端云资源调度方法 | |
Neary et al. | Javelin 2.0: Java-based parallel computing on the Internet | |
Mostafa et al. | Fog resource selection using historical executions | |
KR20060045788A (ko) | 데이터 오버레이, 자가-조직 메타데이터 오버레이 및애플리케이션 레벨 멀티캐스팅 | |
CN106484713A (zh) | 一种基于面向服务的分布式请求处理系统 | |
CN108885641A (zh) | 高性能查询处理和数据分析 | |
CN103116525A (zh) | 一种Internet环境下MapReduce计算方法 | |
Ji et al. | Wide area analytics for geographically distributed datacenters | |
Costa et al. | Large-scale volunteer computing over the Internet | |
CN102882943B (zh) | 服务副本读写方法及系统 | |
Jose et al. | Towards a peer-to-peer framework for parallel and distributed computing | |
e Silva et al. | Application execution management on the InteGrade opportunistic grid middleware | |
Yang et al. | Faasrs: Remote sensing image processing system on serverless platform | |
Ogasawara et al. | A P2P approach to many tasks computing for scientific workflows | |
Gu et al. | Arana: A cross-domain workflow scheduling system | |
Gao et al. | SBFT: A BFT consensus mechanism based on DQN algorithm for industrial Internet of Thing | |
Bao et al. | Las: Logical-block affinity scheduling in big data analytics systems | |
CN117130622B (zh) | 一种分布式在线代码编译运行方法及系统 | |
US20230283663A1 (en) | Randomization of heartbeat communications among multiple partition groups | |
CN117909053A (zh) | 业务处理系统以及用于其的方法、计算设备和存储介质 | |
Furano | Large scale data access: Architectures and performance | |
KR20220073947A (ko) | 에너지 빅데이터 분산 병렬 처리를 위한 알고리즘 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |