一种基于Hadoop的分布式系统的健康度量方法与流程

文档序号:12464144阅读:197来源:国知局
一种基于Hadoop的分布式系统的健康度量方法与流程
本发明属于软件健康监测领域,主要涉及软件健康的度量,适用于Hadoop的分布式系统,具体地说,是指一种收集分布式系统软件的健康表征数据,应用高斯模型计算软件健康度的技术方案。
背景技术
:Hadoop的分布式系统是以Hadoop为基础架构进行开发的。Hadoop是由Apache软件基金会设计的分布式系统基础架构,它的主要功能是用来存储和计算海量数据,用户可以在不了解Hadoop分布式底层细节的情况下,以Hadoop为基础开发分布式程序,充分利用集群的威力进行高速运算和存储。Hadoop的分布式系统的典型结构如图1所示,它具有高可靠性、高可拓展性、高容错性和高效性的特点,因此备受大企业的青睐,例如百度用Hadoop分布式系统处理每周200TB的数据,从而进行搜索日志分析和网页数据挖掘工作;中国移动研究院基于Hadoop开发了“大云”(BigCloud)系统,不但用于相关数据分析,还对外提供服务;淘宝的Hadoop分布式系统用于存储并处理电子商务交易的相关数据等。随着网络发展的日新月异,人们面对的数据规模非常庞大,分布式系统的使用场景变化复杂,尽管Hadoop的分布式系统被设计成有着很高的容错机制,但是在使用过程中很少有方法能对它进行故障预警,来提醒客户及时对软件系统进行维护,以免发生故障造成损失。基于此,本发明的核心思想是引入“软件健康”来表征Hadoop的分布式系统的使用情况是否正常,是“系统健康”在软件研究领域的一个新分支。所谓的软件健康是指在使用过程中,软件完成规定任务的能力程度。目前系统健康度量技术主要是解决系统中硬件部件的健康度量和预警问题,并没有应用于解决系统中软件的健康问题,比如如何利用软件健康度来对12306火车订票系统的软件崩溃进行提前告警。究其原因主要是因为,目前的研究成果仅仅将软件健康度量与软件质量评估进行笼统地研究,或者单纯地从软件是否失效来判断软件是否健康,不能起到提前为系统故障预警的作用。综上,目前软件健康领域已有的研究成果,并不是专门应用于在使用过程中为基于Hadoop的分布式系统的使用情况进行预警的,更没有形成一套能够直接应用在基于Hadoop的分布式系统上的健康度量方法。技术实现要素:本发明针对Hadoop的分布式系统软件尚不存在具体的软件健康度量方法的问题,提出了一种基于Hadoop的分布式系统的健康度量方法,通过监测分布式系统在使用过程中,由于Aging-relatedBugs(老化缺陷)的存在而引起的健康表征元素的变化,收集期望正常状态和待度量运行状态下的数据,建立健康度量模型,计算出软件健康度,为软件的故障告警和故障预测提供依据。一种基于Hadoop的分布式系统的健康度量方法,针对分布式系统软件,实现步骤如下:步骤一、选取软件健康表征元素。考虑老化缺陷的影响,选取的健康表征元素容易受到使用时间的影响,并且易于获取数据。步骤二、数据收集。运行软件,分别在期望正常状态下以及待度量运行状态下,收集健康表征元素的数据。步骤三、建立健康度量高斯混合模型。设共选取n个健康表征元素,表示为集合X=(X1,X2,...,Xi,...,Xn),其中第i个健康表征元素为Xi,1≤i≤n;第i个健康表征元素Xi的一组观测值表示为(xi1,xi2,…,xij,…,xim),m为观测值个数,xij表示对健康表征元素Xi的第j次观测值,1≤j≤m;用表示第i个健康表征元素的高斯分布概率密度,xi表示第i个健康表征元素的变量,μi表示第i个健康表征元素的均值,表示第i个健康表征元素的方差。软件健康表征元素X的高斯混合模型的概率密度G(x1,x2,...,xi,...,xn)表示为:其中,wi为第i个健康表征元素的权重;分别利用期望正常状态下和待度量运行状态下的健康表征元素的数据估计高斯混合模型的参数μi、和wi,得到对应两种情况下的高斯混合模型的概率密度G1(x1,x2,...,xn)和G2(x1,x2,...,xn)。步骤四、获取分布式系统软件的健康度h。根据步骤三获得的期望正常状态下的高斯混合模型的概率密度函数G1(x1,x2,...,xn),待度量运行状态下的高斯混合模型的概率密度函数G2(x1,x2,...,xn),确定软件的健康度h如下:其中,Ci表示第i个健康表征元素的最大值,i=1,2,…,n。软件健康度h的取值范围是[0,1],当软件健康度h=1时,表示软件运行正常,此时处于健康态;当软件健康度h=0时,表示软件性能状态恶化,此时的软件处于失效态;当软件健康度处于(0,1)之间时,表示软件稳定性、可用性逐渐下降,此时的软件处于亚健康状态。根据软件可接受的运行状态,设置健康度的阈值,来判断软件是否需要进行维护以防止性能状态的进一步恶化。当高于该阈值时,说明软件运行状态处于可以接受的范围之内,当低于该阈值时,说明软件出现不可接受的衰退,应采取相应的软件健康管理措施,防止进一步恶化,这样便方便了维护人员对软件进行维护。本发明方法的优点和积极效果在于:首次提出了软件健康的概念和在健康理论指导下的健康度量方法,提供了能直接应用在基于Hadoop的分布式系统上的健康度量方法,通过监测由于老化缺陷的存在而引起的健康表征元素的变化,收集期望正常状态和当前运行状态下的数据,建立健康度量模型,计算出软件健康度,为软件的故障告警和故障预测提供依据,从而在系统出现异常情况之前提前告警,使维护人员及时采取措施,保证系统的运行稳定。附图说明图1是典型的基于Hadoop的分布式系统架构图;图2是Hadoop的体系结构示意图;图3是HDFS的结构图;图4是HDFS文件读取流程图;图5是本发明的基于Hadoop的分布式系统的健康度量方法的步骤流程图;图6是虚拟机建立的Hadoop系统结构图;图7是期望正常状态下的标准数据示例图;图8是待度量运行状态的数据示例图。具体实施方式下面结合附图,将本发明的具体方法应用于Hadoop的分布式文件系统(HDFS),此处所描述的实施例仅用于说明和解释本发明,并不用于限定本发明。本发明提出的基于Hadoop的分布式系统的健康度量方法,用于度量Hadoop的分布式系统运行状态是否正常。可通过设置系统故障预警阀值,在系统出现异常情况之前提前告警,使维护人员及时采取措施,保证系统的运行稳定。由于Aging-relatedBugs(老化缺陷)的存在而引起的健康表征元素的变化,因此本发明方法在分布式系统的使用过程中,收集期望正常状态和当前运行状态下的数据,建立健康度量模型,计算出软件健康度,为软件的故障告警和故障预测提供依据。所谓的老化缺陷是指与软件退化有关的缺陷,它产生的原因是软件运行时错误条件的积累或者在系统交互过程中运行环境的改变,而错误的条件并没有马上导致失效,而是会有一个变化甚至延迟发生的过程。对于Hadoop的分布式系统,这些缺陷会引起软件使用资源的耗竭、数据损坏、错误累积,最终导致系统服务瘫痪,可以说老化缺陷是导致系统资源的损耗和性能衰退的根本原因。如图2所示,Hadoop的基础架构是由许多元素构成的,框架最核心的设计就是:HadoopDistributedFileSystem(Hadoop的文件分布式系统,HDFS)、MapReduce和Hbase(列式内存数据库)。Hadoop分布式文件系统HDFS的结构如图3所示。从图中可以看到,多个DataNode节点与一个NameNode节点组成了HDFS集群,对外提供数据服务。其中,DataNode提供数据文件的存储功能,是数据存放节点。一个DataNode节点是运行在安装有Linux操作系统的机器的一个进程。当用户需要写入文件的时候,写入的这个文件会分成若干个数据块,分放于多个DataNode节点上。DataNode节点可以运行在任意一台可以工作的、并安装有HDFS软件的机器上。NameNode节点是HDFS系统中的中心节点,主要负责来自HDFS客户端以及DataNode节点请求任务的调度。由上述分析可知HDFS的主要功能是为海量的数据提供了存储,在实际运行过程中HDFS实现的文件读取流程如图4所示,客户端向NameNode发起文件读取的请求,NameNode返回DataNode存储的文件信息,再由客户端读取文件信息。本发明提供的基于Hadoop的分布式系统的健康度量方法的实现流程如图5所示,整体包括:选取健康表征元素、收集期望正常状态及待度量状态的数据、建立健康度量高斯混合模型以及计算获取分布式系统的健康度。下面结合HDFS,通过计算它的健康度,来说明本发明方法的使用。步骤一、选取软件健康表征元素。选取软件健康表征元素的理由可作为元素选取的约束条件,通常都是能够反映软件健康的重要因素。对于Hadoop的分布式系统软件,重点关注影响其存储功能有关的元素以及计算功能的元素。步骤1.1,确定软件的运行环境。本实施例是在虚拟机Linux系统中运行Hadoop,建立1台主服务器(namenode),3台子节点(datanode),运行Hadoop软件来模拟分布式系统的运行,针对HDFS的使用情况来度量它的健康度。模拟的分布式系统的架构如图6,具体的主机规划见表1,4台虚拟机的配置见表2。虚拟机的建立可在同一台物理机上建立,也可使用多台物理机。表1HDFS主机规划IP地址主机名角色192.168.1.128tong1NameNode,JobTracker192.168.1.129tong2DataNode,TaskTracker192.168.1.130tong3DataNode,TaskTracker192.168.1.131tong4DataNode,TaskTracker表2实验配置信息步骤1.2,选取HDFS软件的健康表征元素。根据系统的不同特点以及软件的使用功能,确定软件的健康表征元素。由于主要考虑的是老化缺陷的影响,选取的健康表征元素应该容易受到使用时间的影响。对于某些系统能够使用Hadoop的分布式系统,例如Windows系统、Linux系统等,主要考虑的健康表征元素可以在CPU、内存、缓存、磁盘的使用情况中选取。在选取健康表征元素时并不是选取的表征元素越多越好,也不可能把全部表征元素都考虑进去,只能选取一些最能反映软件健康的表征元素,而且这些元素要易于获取数据信息。对于HDFS软件来说,主要是客户端节点和系统软件之间进行数据存储管理。当HDFS软件功能出现明显的衰退现象时,它通常会出现以下2种表现:(1)系统内存资源耗尽、导致HDFS响应时间长、存取数据效率低;(2)CPU长时间处于高使用率、并且部分任务响应时间过长。内存对HDFS软件的影响是在发生内存泄漏时,HDFS软件可用内存被某个进程逐渐消耗,最终耗竭,从而影响HDFS软件任务的完成。CPU对HDFS软件的影响是在发生CPU“泄漏”时,指多个进程抢占CPU,导致CPU无暇处理其他任务,从而影响软件任务的完成。通过分析内存和CPU的使用情况来选取软件健康表征元素,在具体选取软件健康表征元素的过程中,可参照如表3所示的软件健康表征元素。表3HDFS软件健康表征类别及软件健康表征元素由于老化缺陷的激活而导致HDFS对Java虚拟机(JVM)内存不断的消耗,当JVM中的内存不足以维持HDFS软件运行时,就会触发JVM的垃圾回收机制,垃圾回收机制的作用是为了后续HDFS软件运行提供更多的内存。尽管有JVM垃圾回收机制的存在,但是在回收的阶段所有运行的Java线程都必须停止工作。如果内存持续性的泄漏,频繁地发生这种停止工作的情况,最直接的影响是服务的响应时间不断变长、服务的吞吐量不断的下降。并且老化缺陷引起的软件使用内存泄露而导致的内存耗尽是影响软件健康衰退的主要原因。因此内存泄漏问题变得十分关键,即使每次运行少量泄漏,长期运行之后,系统也会面临崩溃的问题。基于此,选取Java虚拟机(JVM)的内存可用量作为HDFS健康的表征元素。步骤二、数据收集。针对健康表征元素收集相关的数据,数据收集是后续软件健康度量的基础。对于Hadoop的分布式系统,本发明方法收集来自于主服务器运行状态的数据。步骤2.1,运行软件,根据选取的健康表征元素收集数据。打开各系统里的终端,本发明实施例中打开表1所示的各主机,使用root权限,输入运行Hadoop软件的命令,命令中必须包含启动文件的存放路径,否则会报错。或是用终端打开路径,输入./start-all.sh,即可运行软件。步骤2.2,收集数据可使用分布式系统自带的收集工具。也可以在系统里安装一些辅助工具插件来采集数据,使用的插件对系统的影响很小,可以忽略,不会影响到收集的数据的准确性。为方便起见,也可以执行操作系统提供的资源查看命令行来监测Hadoop的分布式系统的运行情况。不同的操作系统提供了不同的命令行工具,例如在Linux系统里可使用Jconsole命令、Jstat命令等来对JVM内存进行监控。步骤2.3,在期望正常状态下,收集软件健康表征元素的数据。所述的期望正常状态是由软件开发人员给出的、健康度为1的系统状态,在这个状态下,软件不会出现功能异常,这种状态是绝对正常状态。在此状态下可获得软件健康表征元素的数据。在本实例应用中,在安装配置完成Hadoop软件,使其能够稳定运行,这一状态可近似看作期望正常状态。使用sysstat软件工具包(若Linux系统未装有此工具包,可自行安装)的pidstat命令来收集主服务器节点上的JVM内存的使用量的数据,实验数据采集的时间间隔为10s,共采集5500次。在主服务器的终端中运行命令如下:pidstat-r-p3624105500收集的部分示例数据如图7,其中:minflt/s:表示进程每秒minorfaults的总数。majflt/s:表示进程每秒majorfaults的总数。VSZ:表示进程使用的虚拟内存大小(KB)RSS:表示进程使用的物理内存大小(KB)%MEM:表示占用内存比率。3624为主服务器namenode的进程ID号码,软件每次运行ID号码是不同的,可通过jps命令查询。经过处理后,选取的数据如下表4所示。表4期望正常状态下收集的标准数据序号内存使用百分比(a%)内存可用量百分比(b%)内存可用量(1024*b%MB)114.0485.96880.2304214.2585.75878.08314.2585.75878.08414.2585.75878.08514.2685.74877.9776614.2685.74877.9776714.2785.73877.8752814.2785.73877.8752914.2785.73877.87521014.2885.72877.77281114.2885.72877.77281214.2985.71877.67041314.3285.68877.36321414.3285.68877.36321514.3285.68877.36321614.3385.67877.26081714.3485.66877.15841814.3585.65877.0561914.3585.65877.0562014.3785.63876.85122114.3885.62876.74882214.3985.61876.64642314.3885.62876.74882414.3885.62876.74882514.3985.61876.64642614.4185.59876.44162714.4185.59876.44162814.4285.58876.33922914.4285.58876.33923014.4285.58876.3392步骤2.4,收集待度量运行状态的健康表征元素的数据。收集待度量的运行状态下的数据是指收集软件在使用过程中指定的任意一段时间内的健康表征元素的数据。以软件指定运行的时间T作为起点,通过命令设置获取数据的规则,定位软件的进程,获取软件进程对系统资源的使用情况,得到软件健康表征元素的数据。确定时刻T为开始时刻,通过Hadoop自带的nnbench软件工具可以逐步加大对HDFS软件访问,模拟内存泄漏,加速HDFS软件衰退,使HDFS软件执行任务期间出现JVM可用内存逐渐减少的现象。例如输入nnbench命令使用12个mapper和6个reducer来创建1000个文件,代码如下:$hadoopjarhadoop-2.6.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.3-tests.jarnnbench\-operationcreate_write-maps12-reduces6-blockSize1\-bytesToWrite0-numberOfFiles1000-replicationFactorPerFile3\-readFileAfterOpentrue-baseDir/benchmarks/NNBench-`hostname-s`使用mrbench命令来重复进行上述任务5000次,代码如下:$hadoopjarhadoop-2.6.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.3-tests.jarmrbench-numRuns5000收集到的示例数据如图8所示,经过处理后,选取的数据如下表5所示。表5收集指定运行状态下的数据步骤三、建立健康度量高斯混合模型。步骤3.1,建立软件健康表征函数的高斯混合模型。高斯混合模型是概率论与数理统计中非常关键的模型,其本质上是一个多维概率密度函数,只要有足够多的数据,从理论的角度来讲,就可以对数据空间的任何分布使用高斯混合模型来精确拟合。本发明采用高斯混合模型来度量Hadoop的分布式系统的软件健康。假设选取的软件健康表征元素为X=(X1,X2,...,Xi,...,Xn),即X是n维随机变量,n为步骤1中选取的健康表征元素的个数,1≤i≤n。可以根据实际的软件健康度量需求,收集每个健康表征元素Xi在(0,t)时间段内的取值序列,设(xi1,xi2,…,xij,…,xim)表示对第i个健康表征元素Xi在(0,t)时间内的一组观测值,其中,xij表示对健康表征元素Xi的第j次观测值,1≤j≤m,m表示对选取的健康表征元素Xi在(0,t)时间段内共观测了m次。用表示选取的第i个健康表征元素的高斯分布概率密度,其中μi表示第i个健康表征元素的均值,表示第i个健康表征元素的方差,xi是用于表示第i个软件健康表征元素的变量,其概率密度表达式为:X由n个健康表征元素组成,其高斯混合模型的概率密度G(x1,x2,...,xi,...,xn),即简写为G(x)表示为:其中,wi为第i个健康表征元素的权重,表示第i个健康表征元素的高斯分布概率密度。步骤3.2,估计两种情况下高斯混合模型的参数。步骤3.2.1,使用最大似然估计计算中的μi和使用极大似然估计(MaximumLikehoodEstimation,MLE)是因为MLE是一种具有渐进最优性质的参数估计方法,其满足的准则是让观测值出现的概率最大。可利用软件健康表征元素Xi的观测值(xi1,xi2,…,xij,…,xim)对第i个软件健康表征元素的高斯概率密度函数进行参数估计,步骤如下:的对数似然函数如式(3)所示:通过对似然函数(3)的未知参数μi和求偏导数,并令偏导函数等于0,得到如下表达式:解得μi和的参数估计结果如下:根据参数估计的无偏性对结果(8)进行偏差修正,修正后的结果如下公式(8):使得将标准数据和收集到的数据代入上述过程(6)和(8),便可估计出两种情况下的μi和的值。代入公式(1),即可求得两种情况下的高斯混合模型。3.2.2,计算高斯混合模型公式中的权值wi。为求解权重系数wi,先求混合模型的似然函数:为方便计算,且对求解的参数进行验证,定义一个函数βi(xi1,xi2,…,xim),表达式如下:因其满足引入拉格朗日乘子λ,然后得到新的目标函数,定义如下:对wi求偏导数,并令其结果为零,如下:解得结果如下:将式(13)的左右项分别相加,可得:可知λ=m,因此可得:联立n个wi(i=1,2,…,n)组成的方程组,求得w1,w2,…,wn的值。将根据(6)、(8)得到的μi和估计值和获取的w1,w2,…,wn的值代入公式(2),即可求得两种情况下的高斯模型G1(x1,x2,...,xn)、G2(x1,x2,...,xn),分别简写为G1(x)、G2(x),G1(x)表示期望正常运行状态的软件健康表征元素的标准概率密度函数,G2(x)表示待度量运行状态下的健康表征元素的概率密度函数。对于本发明实施例,执行如下过程:1.利用matlab软件工具将表4中期望正常状态下收集的数据代入。利用matlab计算得到的期望正常状态下单高斯模型的参数估计为:θ1={μ,σ2}={877.339,0.6402};得到期望正常状态下的基准单高斯模型为:2.利用matlab软件工具将表5中收集到的指定运行状态下的数据代入。得到当前运行状态下的高斯模型的参数估计为:θ2={μ,σ2}={836.134,0.05954};得到当前运行状态下的高斯模型为:步骤四,将上述求得两个高斯模型代入软件健康度公式,求得健康度。软件健康度是对软件健康一种定量化的评价指标,软件偏离预期正常状态的相对数值,它表征软件健康能力的百分比,用符号h表示。预期正常状态就是指的是期望正常状态。令C=[C1,C2,…,Ci,...,Cn],分别对应n个软件健康表征元素x1,x2,...,xn的最大值,其中,Ci表示第i个健康表征元素的最大值。软件健康度h的取值范围是[0,1],当软件健康度h=1时,表示软件运行正常,此时处于健康态;当软件健康度h=0时,表示软件性能状态恶化,此时的软件处于失效态;当软件健康度处于(0,1)之间时,表示软件稳定性、可用性逐渐下降,此时的软件处于亚健康状态。不同运行状态下经过计算得到的健康度有所不同,如果定义某一种状态为“可接受”的状态,那么可以把这种状态所对应的健康度作为一个阈值,比如h=0.8。如果高于这个阈值,就说明运行状态处于可以接受的范围之内,如果低于这个阈值,则说明软件出现不可接受的衰退,应采取相应的软件健康管理措施,防止进一步恶化,这样便方便了维护人员对软件进行维护。本发明实施例中由于只选取了一个健康表征元素,健康度量公式可简化如下:其中,C表示系统运行时健康表征元素的最大值。此时C=1024MB,通过健康度公式计算HDFS的健康度,代码如下:symsxy=normpdf(x,877.339,0.8001)g=normpdf(x,836.134,0.244)F=int(y*g,0,1024)G=sqrt(int(y^2,0,1024)*int(g^2,0,1024))h=F/G运行后可得当前HDFS健康度h=0.8233。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1