基于HADOOP的数据处理方法与流程

文档序号:11251017

本发明涉及大数据,特别涉及一种基于HADOOP的数据处理方法。



背景技术:

云计算通过互联网将庞大的数据存储和计算处理程序分布到集群系统的计算机中,并且提供相应的应用程序服务。用户在对资源提交访问请求时,系统能够自动地将请求切换到实际的存放资源的计算机和存储系统。虚拟化技术的云计算平台在海量数据处理方面取得了令人满意的成果。但云计算将海量数据分布在大规模集群上进行并行处理,由于目前主流云计算平台底层采用虚拟化技术,其上所有软件和应用均运行在虚拟硬件之上,这种策略必然带来一定程度上的性能降低。而且MapReduce内部实现机制是采用先存储数据再读出转发处理的策略,当中间数据量变大、个数增多时,这种模式必然产生大量的无用的磁盘I/O操作;如果数据在远端,这样会增加网络负载;如果数据在本地,则会受I/O瓶颈限制,从而降低了任务执行的效率。



技术实现要素:

为解决上述现有技术所存在的问题,本发明提出了一种基于HADOOP的数据处理方法,包括:

使用异构硬件架设云基础设施服务层,基于多级容错的并行计算接口建立分布式计算架构。

优选地,所述基于HADOOP的云计算平台架构包括异构计算节点、基于并行计算接口的容错单元、监控模块、作业管理模块、任务管理模块、分布式数据库和MapReduce计算框架;

所述作业管理模块,用于保存作业队列,管理作业的调度,监控作业的执行,支持远程作业提交以及结果返回;所述监控模块,用于管理可用主机列表,发现异常节点并根据负载情况对节点排序,首先选择负载最小的节点执行任务;所述任务管理模块用于任务划分和分配调度,任务执行,收集并返回结果。

优选地,所述作业管理模块中包含作业通信子模块,根据用户交互,实现作业提交与结果反馈;作业通信子模块初始化后,依照用户的设定,需要绑定的本地套接服务器地址以及作业管理子模块的套接服务器远程地址,并创建两个工作线程:等待线程:循环等待接收来自任务管理模块反馈的作业结果;发送线程,一旦用户提交了新作业,基于作业管理子模块的服务器地址,借助套接字把用户输入的作业打包发送给作业管理子模块;作业管理子模块等待作业通信子模块提交给自己的作业;创建两个工作线程:解析线程,维护本地的套接服务器,得到作业通信子模块远程提交的作业,解析该信息并确认该信息是否符合规则,将合格的作业绑定作业提交者的地址后放置到多优先级作业队列中,以待被调度执行;扫描线程,循环扫描多优先级作业队列以确定队列中是否有较高优先级的作业,若有较高优先级的作业存在,则取出作业,依据作业构造命令行并启动多个任务执行模块的进程来完成本次并行计算作业;循环等待本次并行计算作业执行结束;如果是作业不是正常执行完成则判断发生异常,则重新调度执行本次作业。

本发明相比现有技术,具有以下优点:

本发明提出了一种基于HADOOP的数据处理方法,提高了云计算的效率,以满足高性能云计算的需要。

附图说明

图1是根据本发明实施例的基于HADOOP的数据处理方法的流程图。

具体实施方式

下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。

本发明的一方面提供了一种基于HADOOP的数据处理方法。图1是根据本发明实施例的基于HADOOP的数据处理方法流程图。

本发明设计的高性能云计算平台不经过虚拟化,直接使用异构计算节点构建云平台底层;采用增加多级容错功能的并行计算接口技术和多线程技术重写MapReduce,在计算中避免大量的无用的I/O操作,从而提高了云计算的效率,以满足高性能云计算的需要。在节点异构环境下,基于HADOOP,使用异构硬件架设云基础设施服务层,实现作业二次调度,作业/任务回滚和动态迁移,基于多级容错并行计算接口的建立MapReduce架构。对中间结果进行直接处理,减少不必要的I/O操作。

本发明的基于HADOOP的云计算平台架构包括异构计算节点、基于并行计算接口的容错单元、监控模块、作业管理模块、任务管理模块、分布式数据库和MapReduce计算框架。

作业管理模块用于保存作业队列,管理作业的调度,监控作业的执行,提供相应的容错,支持远程作业提交以及结果返回。监控模块用于管理可用主机列表,发现异常节点并根据负载情况对节点排序,以首先选择负载最小的节点执行任务。任务管理模块用于任务划分和分配调度,任务执行,收集并返回结果。

作业管理模块中包含作业通信子模块,根据用户交互,实现作业提交与结果反馈;作业管理子模块据作业的管理和调度,维护作业队列,按优先级进行作业调度;监控模块据监控所有节点的运行情况和负载程度,并据此为任务执行模块提供所需的主机列表文件。

任务管理模块是作业的具体执行模块,对作业进行分片,并对分片进行合理调度,最后收集并反馈计算结果。任务管理模块得到作业管理与调度模块分发的作业后,按设定的策略将作业划分成多个任务,与监控模块进行交互以生成调度执行并行计算任务所需的主机列表文件;然后基于并行计算接口的动态进程创建与管理模型,分配符合主机列表文件要求的负载进程主节点将任务通过map过程分发给负载节点,并从负载节点那里通过reduce过程得到对应的任务结果;归并这些中间结果就可以得到本次并行计算作业的最终结果,最后把这个结果远程反馈给任务提交者。一旦主节点侦测到某一个负载节点发生异常,则与监控模块交互以产生新的主机列表文件,并分配新的负载节点来接替异常的负载节点执行任务。

作业通信子模块初始化后,依照用户的设定,需要绑定的本地套接服务器地址以及作业管理子模块的套接服务器远程地址,并创建两个工作线程:等待线程:循环等待接收来自任务管理模块反馈的作业结果;发送线程,一旦用户提交了新作业,基于作业管理子模块的服务器地址,借助套接字把用户输入的作业打包发送给作业管理子模块。

作业管理子模块等待作业通信子模块提交给自己的作业。在工作线程中,创建了两个工作线程。解析线程,用于维护本地的套接服务器,得到作业通信子模块远程提交的作业,解析该信息并确认该信息是否符合规则,将合格的作业绑定作业提交者的地址后放置到多优先级作业队列中,以待被调度执行。扫描线程,循环扫描多优先级作业队列以确定队列中是否有较高优先级的作业,若有较高优先级的作业存在,则取出作业,依据作业构造命令行并启动多个任务执行模块的进程来完成本次并行计算作业;循环等待本次并行计算作业执行结束;如果是作业不是正常执行完成则判断发生异常,则重新调度执行本次作业。

主节点进程启动后,分析传入的命令行参数以得到本次并行接口作业的相关信息。依据监控模块生成的主机列表文件,动态分配多个负载节点并构成一个通信域,然后等待负载节点申请任务或提交任务结果。

主节点将作业分成独立的任务,并维护一个初始值均为0的任务状态数组,用以记录任务执行情况。一但有负载节点申请任务,则先搜索得到状态数组中为0的项所对应的任务,将任务分配给申请者并将状态数组中对应项置1;如果某任务完成,则状态数组中对应项应该被置为2;如果执行某个任务的进程异常,则状态数组中对应项应该被重置为0,以等待重新分配给其他节点执行;如果状态数组中标记为1的某项所对应的任务在规定时间范围内没有反馈结果,则判定执行该任务的进程异常,并将状态数组中该任务对应的项重置0,以期被重新分配给其他节点执行。

如果主节点发现任务对应的状态数组中的所有项都是2,则表明本次并行计算作业已经完成,主节点将最终的作业结果通过套接字通信远程反馈给相对应的任务提交者。

负载节点启动后,分析其父进程是否存在,若不存在,则拒绝执行;若存在,则判定自身是由主节点启动。负载节点向主节点申请任务,得到任务后就按预定的业务方案执行任务;任务执行完成后,将任务的结果反馈给主节点并申请下一个任务。如果负载节点得到的任务信息是无效,则本次并行计算任务成功完成,负载节点结束业务。

在本发明提出的高性能云计算平台中包括三级容错方案:一级容错即作业二次调度。当系统侦测到集群中某一节点在执行任务中异常,则系统会立即重新调度执行本次任务。二级容错即作业/任务回滚。系统回滚作业/任务至最近检查点处执行。如果主节点异常,则本次并行计算作业失败,系统二次调度本次并行计算作业并回滚作业的执行状态至最近的检查点处并继续执行作业;如果负载节点异常,则系统尝试重启异常节点并回滚其任务执行状态至最近的检查点处并继续执行任务。三级容错是动态迁移。当异常的负载节点在短时间内无法得到回滚,也就是说二级容错失败的情况下,系统会主动将异常的工作节点的任务迁移至其他工作节点执行。为了保证并行接口集群计算能力的稳定性,并行云计算平台通过动态分配新的负载进程来替代异常负载进程。

本发明系统中监控模块用于生成可用的主机列表:根据cpu核心数目和正在执行任务的进程数量比较,若进程数小于核心数则将主机名加入主机列表。若进程数不小于cpu核心数,则将主机名从主机列表中移除。监控程序中的0号进程所在的节点为监控服务器,非0进程所在的节点任务节点。进程模型的监控的具体步骤为:

1)在每个非0进程上创建一个内核对象即事件信号,执行任务时进程打开此事件信号,计算完成触发事件信号。此信号用于获取进程是否等待退出。

2)得到主机名,计算出正在执行任务的进程数量M和进程中己经执行完成等待退出的数量K,建立可用主机列表文件。

3)若正在执行任务的进程数量M等于进程中己经执行完成等待退出的数量K,则将此主机名写入主机列表文件。

主机列表的更新有两种策略:定时更新和任务调度前更新。对于定时更新,监控程序保持一直运行,调度程序和监控不发生交互;对于任务前更新,监控程序的运行发生在分配任务前,监控程序在执行任务前自动启动更新主机列表,然后退出,主节点进程根据可用主机列表进行动态一组进程执行任务,若其中有进程任务中途失败,则再次自动启动监控程序更新列表,主节点进程再根据可用主机列表启动相应的数量的进程完成失败进程的任务。

本发明任务调度基于作业的分片。作业从作业队列里取出来以后,先进行作业的一级分片,将一级分片分配到节点,然后在节点内进行二次分片,将二级分片分配到线程,任务的分配采用负载池加线程池的方法。对于map操作,一级分片的分配是根据空闲负载节点申请原则,计算能力强的节点申请更多的分片,计算能力弱的节点完成较少的分片。负载节点进行完map任务之后,直接将map的结果作为reduce的输入进行第一次reduce,然后将结果发送给主节点做第二次reduce,并得到最终结果。

负载向负载池申请任务,主节点将查询查询一级分片表,若查到状态值为未执行的分片,就将此分片信息发送给负载进程。当主节点在执行任务动态迁移的容错策略吋,发送分片任务的起始点和终止点的位置,而且将待迁移的一级分片中的所有二级分片的执行信息表一起打包发送给负载。

若此作业是第一次被调度,则主节点将所有的一级分片都放入负载池进行调度。若作业不是第一次被调度,则主节点挑选状态值为未完成的片进行调度。在执行调度的过程中主节点持续更新执行状态表的内容。

主节点根据负载发送的负载内部状态表的内容,若检测到此时负载上的此一级分片执行到一定进度而未完成,则给它发送另外一个分片任务。主节点若检测到执行状态表中的内容都为已完成,则整个任务完成,给负载节点发送等待退出信号,此作业完成。对于负载节点,—级分片发送到负载之后,负载先对此一级分片做内存映射,然后检测节点上所有处理器总的核心数,开启相应数量的线程,启动线程池执行任务。

在负载中,用负载内部状态表代表一级分片。线程池根据负载内部状态表,取出还没有执行的分片执行map任务,然后将map任务的结果作为reduce任务的输入执行reduce任务,在执行的过程中,每完成一个二级分片就更新负载内部状态表的内容,并将执行得到结果和对负载内部状态表的修改信息一并发给主节点,主节点再根据负载内部状态表更新所有分片的执行状态表。直到执行状态全部为执行完成,所有分片执行完成。

作业从提交到得到结果的流程如下:作业通信子模块提交优先级的作业;作业管理子模块从任务队列取出最高优先级的作业;主节点对作业进行分片,得到一级分片,放入负载池。负载节点向主节点申请任务,主节点通过查询状态表得到一级分片的信息,然后获取到此分片中所有二级分片的执行信息打包发送给负载;负载接收到任务,对此片做内存映射和二次分片,检测总的核心数,建立线程池,然后将分片放入线程池,线程通过负载内部状态表取得二级任务片,直到表中内容全部为执行完成,退出线程,线程池销毁。负载节点的每个线程执行完成一个二级任务片后进行一次reduce,将reduce结果和内部状态表发送给主节点,主节点确定是否给此负载发送另外一个分片,若需要发送新的任务,则继续取任务发送给负载。直到状态表中内容全部为执行完成后,主节点给每个负载发送退出指令,负载触发事件信号,通知监控等待退出,所有负载和主节点等待一起退出。主节点将负载发送来的结果进行reduce操作。主节点将结果发送给作业的提交者作业通信子模块。

在节点数据缓存策略中,部署在云平台的负载节点缓存云平台中节点子网中的作业。将本地索引服务器被部署在每一个子网内,存储正在所处云平台内共享的作业,以及各个作业对应的节点列表。负载节点以资源提供者的身份向本地索引服务器注册自己所缓存的作业。本地索引服务器组织云平台内在线节点构建云平台中的子网,帮助子网用户方便地找到负载节点。管理服务器周期性地从每个云平台内的本地索引服务器收集作业请求信息;每次运行缓存算法之后,管理服务器为每个云平台生成两张缓存对象清单,并且将这两个作业列表分别发送给在云平台中部署的两个负载节点;每一个存储在节点中的作业的当前状态也周期性地上报给管理服务器。负载节点根据从管理服务器收到的作业列表,更新自己的进程空间;一旦某个新的缓存对象同步完成,负载节点就会计算它的内容hash值,并向所处云平台内的本地索引服务器注册作业。

当某个云平台的用户启动一个作业时,该节点同时加入全局节点子网以及云平台中的子网。并向本地索引服务器上报每个作业的运行状态,本地索引服务器监控云平台内子网,将云平台内每一个活动作业的相关信息发送给管理服务器,包括作业的唯一hash标识,作业大小,正在访问的用户数,云平台内当前可用的副本数,最近请求该作业的子网用户数等。根据从本地索引服务器收集到的信息,管理服务器定期执行一次缓存算法以得出每个云平台内的负载节点需要更新和删除的作业。并将得出的作业清单立即发送给各个负载节点。当同步完成一个作业之后,负载节点立即向云平台内的本地索引服务器注册该作业。然后负载节点为本地请求该作业的用户提供数据上传。

进一步地,通过以下过程把待分发的作业分片主动发送给有空闲带宽的节点。在管理服务器设置决策单元,根据收集到的信息,决定需要发送的作业,并对其进行分片,发送给辅助节点的大作业分片,并向用户的存储器分派存储作业。给每个选中的发送目标节点增加了一个作业,该作业在后台运行,该作业与用户自主执行的小作业同时进入资源提供状态,共用上传带宽。当用户离开系统,该后台运行的作业结束。管理服务器选择发送目标节点,通知每个被选中的节点存储发送目标作业的一个分片;接收到发送作业的节点从云平台和节点子网存储指定的作业分片。发送的作业分片存储完成后,发送目标节点为其他存储节点提供上传,作为辅助节点;当分发过程结束,管理服务器向所有接收过发送作业的节点发出消息,通知其存储器从用户的进程空间中清除先前发送的作业分片。

综上所述,本发明提出了一种基于HADOOP的数据处理方法,提高了云计算的效率,以满足高性能云计算的需要。

显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。

应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。

再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1