一种异常处理方法和装置与流程

文档序号:12719203阅读:173来源:国知局
一种异常处理方法和装置与流程

本发明涉及计算机技术,尤指一种基于Hadoop分布式的异常处理方法和装置。



背景技术:

Hadoop是由Apache基金会所开发的分布式系统基础架构。Hadoop分布式框架的核心设计是:分布式文件系统(HDFS,Hadoop Distributed File System)和映射(Map)/规约(Reduce)。其中,HDFS为海量的数据提供了存储,Map/Reduce为海量的数据提供了计算。

Map/Reduce框架是一个简易的分布式计算软件框架,基于Hadoop分布式架构编写的应用程序能够运行在由上千个商用机器组成的大型分布式集群系统上,并且能够以一种可靠容错性的方式并行处理超过T级别的数据集。Map/Reduce框架由一个单独的主节点(Master)和多个集群从节点(Slave)共同组成。针对Hadoop分布式的实现,现有的系统使用集群完全分布式配置模式,在完全分布式中,Master负责调度构成一个作业的所有任务并分布到不同的Slave上,Master监控Slave的执行,并重新执行失败的任务,Slave仅负责执行由Master指派的任务。

Hadoop分布式系统中,由于Slave分布在不同的机器上,且分布在未知的线程上,当不同的Slave执行Map或者Reduce产生异常时,相关技术中通常利用异常信息获取函数e.getMessage()对异常进行处理,但是该函数只能获取异常的原因,但是,由于不知道异常的具体位置,导致不能及时处理异常,影响了系统运行和维护。



技术实现要素:

为了解决上述技术问题,本发明提供了一种异常处理方法和装置,能够获取分布式系统的异常的原因和位置,从而保证对发生的异常进行及时处理。

为了达到本发明目的,本发明提供了一种异常处理方法,包括:

获取业务处理过程中发生异常的原因和位置;所述业务处理过程包括执行Map程序和Reduce程序;

将所述获取的原因和位置存储在预先创建的Hadoop数据库Hbase中;

所述Hbase包括由行键和列簇组成的记录异常日志事件表;其中,

所述列簇包括:用于记录业务处理过程运行失败的相关信息的列簇Job、用于记录业务处理过程中Map程序运行失败的异常的原因和位置的列簇Map,以及用于记录业务处理过程中Reduce程序运行失败的异常的原因和位置的列簇Reduce。

可选地,所述获取异常的原因和位置之前,还包括:

判断所述业务处理过程运行是否失败,当判断出所述业务处理过程运行失败时将所述业务处理过程运行失败的相关信息保存到所述Hbase中;

其中,所述运行失败的相关信息包括:所述业务处理过程运行失败的开始时间、运行失败的结束时间、当前运行的任务名称、失败的状态。

可选地,当所述业务处理过程包括组件Combiner处理时,所述方法还包括:

获取所述组件Combiner处理过程中的异常的原因和位置并存储在所述Hbase中。

可选地,所述获取业务处理过程中的异常的原因和位置包括:利用打印异常信息函数PrintStackTrace()获取所述异常的原因和位置。

可选地,所述获取业务处理过程中的异常的原因和位置之后,所述将所述异常的原因和位置存储在Hadoop数据库Hbase中之前,还包括:将所述异常的原因和位置的格式转换成字符串格式。

本发明还提供一种异常处理装置,其特征在于,包括获取模块、处理模块;其中,

获取模块,用于获取业务处理过程中的异常的原因和位置;所述业务处理过程包括执行Map程序和Reduce程序;

处理模块,用于将所述异常的原因和位置存储在预先创建的Hadoop数据库Hbase中;

所述Hbase包括由行键和列簇组成的记录异常日志事件表;其中,

所述列簇包括:用于记录业务处理过程运行失败的相关信息的列簇Job、用于记录业务处理过程中Map程序运行失败的异常的原因和位置的列簇Map,以及用于记录业务处理过程中Reduce程序运行失败的异常的原因和位置的列簇Reduce。

可选地,还包括判断模块,用于:

判断出所述业务处理过程运行失败,通知所述获取模块执行获取业务处理过程中的异常的原因和位置的步骤;通知所述处理模块将所述业务处理过程运行失败的相关信息保存到所述Hbase中;

其中,所述运行失败的相关信息包括:所述业务处理过程运行失败的开始时间、运行失败的结束时间、当前运行的任务名称、失败的状态。

可选地,所述获取模块,还用于当所述业务处理过程包括组件Combiner处理时,获取所述组件Combiner处理过程中的异常的原因和位置并存储在所述Hbase中。

可选地,所述获取模块具体用于:利用打印异常信息函数PrintStackTrace()获取所述异常的原因和位置。

可选地,所述处理模块还用于:将所述异常的原因和位置的格式转换成字符串格式后再执行存储在Hadoop数据库Hbase中的步骤。

与现有技术相比,本发明包括:在业务处理过程中获取发生异常的原因和位置,并将发生的异常的原因和位置保存在Hbase。通过本发明提供的技术方案,获取了分布式系统发生的异常的原因和位置,保证了对异常的及时处理,便于后期进行程序调试和系统维护。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。

图1为本发明实现异常获取方法的流程图;

图2为本发明实现判断Map/Reduce程序运行是否出现异常的流程图;

图3为本发明实现异常获取装置的组成结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1为本发明实现异常获取的流程图,如图1所示,包括:

步骤100:获取业务处理过程中发生异常的原因和位置,业务处理过程包括执行Map程序和Reduce程序;

其中,在Hadoop分布式系统中可以利用Map/Reduce进行业务处理过程,即业务处理过程包括执行Map程序和Reduce程序,而由于数据源等多方面的原因,会在Map/Reduce执行过程中产生异常,从而导致Map/Reduce运行失败,为了获取产生的异常,本步骤中,可以利用获取异常信息的函数,如打印异常信息函数PrintStackTrace()获取异常的原因和位置。

步骤101:将获取的原因和位置存储在预先创建的Hadoop数据库Hbase中。

其中,Hbase至少包括由行键和列簇组成的记录异常日志事件表。

本发明的记录异常日志事件表的列簇至少包括:列簇job、列簇map、列簇reduce,其中,

列簇job:用于记录业务处理过程运行失败的相关信息,比如包括:程序运行失败的开始时间job:beginTime、程序运行失败的结束时间job:endTime、任务的名称job:name、任务的状态job:status等;

列簇map:用于记录业务处理过程中Map程序运行失败的异常的原因和位置map:errorInfo。进一步地还用于记录Map程序运行中导致异常的输入源数据map:errorInputData;

列簇reduce:用于业务处理过程中Reduce程序运行失败的异常的原因和位置reduce:errorInfo。进一步地,还用于记录Reduce程序运行中导致异常的输入源数据reduce:errorInputData。

进一步地,本步骤之前还包括:

将获得的异常的原因及位置信息转换成可阅读的字符串形式,再保存在预先创建的Hbase中。

本发明提供的技术方案,通过利用打印异常信息函数PrintStackTrace()获取异常的原因和位置,并将其存储在Hadoop数据库Hbase。一方面,获取了分布式系统发生异常的原因和位置,另一方面,保证了对异常的及时处理,便于后期进行程序调试和系统维护。

可选地,当业务处理过程即Map/Reduce执行过程中包括组件Combiner处理时,本发明方法还包括:

获取组件Combiner处理过程中的异常并存储在Hbase中。

这里,组件Combiner程序相当于预先在各个节点进行局部的Reduce程序的操作。同样可以利用与步骤100中相同的方法,即利用打印异常信息函数PrintStackTrace()获取获取组件Combiner处理过程中的异常信息的原因和位置。

可选地,在步骤100的获取异常信息之前,还包括:

判断业务处理过程运行是否失败,当判断出业务处理过程运行失败时,如Map/Reduce运行失败,将业务处理过程运行失败的相关信息保存到Hbase中。其中,

运行失败的相关信息包括:业务处理过程运行失败的开始时间、运行失败的结束时间、当前运行的任务名称、失败的状态。

具体地,判断业务处理过程是否运行异常的实现过程如图2所示,包括:

步骤200:判断业务处理过程是否失败。

本步骤包括:可以通过获取job.waitForCompletion(true)函数的布尔值,判断业务处理过程中的Map/Reduce程序是否运行失败,该布尔值为程序运行失败的状态值,通过该布尔值判断本次Map/Reduce是否运行失败,比如如果该值为false则程序运行失败。

步骤201:将运行失败的相关信息保存到Hbase中。

其中,运行失败的相关信息包括但不限于:运行失败的开始时间beginTime、运行失败的结束时间endTime、当前运行的任务名称jobName、失败的状态。

本发明可以在异常日志事件表的行键(RowKey)前加入前缀。前缀为系统当前时间函数Long.Max_Value-System.currentTimeMills()。由于Hbase中数据是按照字典排序的,为了加快查询最新的异常信息,将系统当前时间函数Long.Max_Value-System.currentTimeMills()作为行健RowKey的前缀,可以保证最新的按照异常事件发生的时间倒叙排列实现快速查询。

可选地,如果经常针对某具体任务进行查询,可以将该任务字段名job_name放在RowKey的前缀,也可以根据时间和任务拼接的RowKey来获取指定的数据。

例如,RowKey定义为:

<Long.Max_Value-System.currentTimeMills()>_<job_name>

本发明提供的异常处理方法中,由于异常的原因和位置存储在Hbase中,方便了后期维护时基于RowKey索引对Hbase中的异常进行快速查询。比如:设定查询时间范围,以程序运行失败的结束时间作为RowKey开始查询时间,以运行失败的开始时间作为行键停止查询时间,通过行键在行键开始查询时间和行键停止查询时间的范围内查询异常,这样,除了查找到异常的原因、位置,还可以进一步查找到异常的数据源,方便了后续对异常的处理。

例如,设置Long.maxValue-endTime作为行键的开始查询值StartRowKey,设置Long.maxValue-beginTime作为行键的结束查询值StopRowKey,在该范围内利用Hbase的RowKey查询出该段时间是否发生异常。根据查询到的信息,运营或开发人员及时获知系统出现的异常,也为快速分析以定位出异常的原因提供了保障。

下面结合一个实例描述异常获取过程的实现。

在预先编辑好的异常捕获Try/Catch程序中引入获取异常信息的函数,如打印异常信息PrintStackTrace()函数,利用PrintStackTrace()函数获取异常的原因及程序出错的位置。具体来看:

可以在Try/Catch程序中加入以下代码:

e.printStackTrace();//在命令行打印异常信息以及在程序中出错的位置及原因;

StringWritersw=new StringWriter();//获取字符流的一个对象;

e.printStackTrace(new PrintWriter(sw,true));//将异常的信息传入到上述字节流对象;

String errorInfo=sw.toString();//将获取的异常信息的字节流对象转成可阅读的字符串;

其中,异常信息errorInfo中包含了导致异常的原因,并能够定位异常的位置。将异常信息errorInfo保存到Hbase中,保存的异常信息包括了异常的原因和引起异常的数据源的位置。

图3为本发明实现异常信息获取装置的组成结构示意图,如图3所示,至少包括获取模块、处理模块,其中,

获取模块,用于获取业务处理过程中的异常的原因和位置,业务处理过程包括执行Map程序和Reduce程序。

处理模块,用于将异常的原因和位置存储在预先创建的Hadoop数据库Hbase中;

其中,

Hbase包括由行键和列簇组成的记录异常日志事件表;其中,

列簇包括:用于记录业务处理过程运行失败的相关信息的列簇Job、用于记录业务处理过程中Map程序运行失败的异常的原因和位置的列簇Map,以及用于记录业务处理过程中Reduce程序运行失败的异常的原因和位置的列簇Reduce。

可选地,还包括判断模块,用于:

判断出业务处理过程运行失败,通知获取模块执行获取业务处理过程中的异常的原因和位置的步骤;通知处理模块将业务处理过程运行失败的相关信息保存到所述Hbase中;

其中,运行失败的相关信息包括:业务处理过程运行失败的开始时间、运行失败的结束时间、当前运行的任务名称、失败的状态。

可选地,获取模块还用于:当业务处理过程包括组件Combiner处理时,获取组件Combiner处理过程中的异常的原因和位置并存储在Hbase中。

可选地,获取模块具体用于:利用打印异常信息函数PrintStackTrace()获取异常的原因和位置。

可选地,处理模块还用于:将异常的原因和位置的格式转换成字符串格式后再执行存储在Hadoop数据库Hbase中的步骤。

虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

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