元数据输出方法、客户端和元数据服务器与流程

文档序号:12157517阅读:402来源:国知局
元数据输出方法、客户端和元数据服务器与流程

本发明属于云计算领域,具体地说,涉及一种元数据输出方法、客户端和元数据服务器。



背景技术:

文件系统的使用过程中,经常会对系统中的文件或者目录进行统计,以获取当前用户数据的特点,指导文件系统的后续开发;同时这些信息可以帮助文件系统的用户来分析数据使用,对不同的用户进行记账等用途。

目前互联网企业的生产系统上所采用的大规模分布式存储系统架构都采用了类似于GFS(谷歌文件系统)的架构。在这种架构下,所有的数据修改都会形成操作日志,在重启恢复的时候可以再次调用日志到内存中以达到进程重启前的内存状态。随着时间的积累,文件系统内的操作日志会越来越多,导致元数据服务(MetaServer)进程重启花费的时间也越来越长,同时需要保留所有操作日志会造成的存储空间不足的问题。为了提高元数据服务进程重启恢复速度和控制存储空间的无限使用,元数据服务进程会定期将内存中的内容输出到本地磁盘形成快照,然后将快照前的操作日志删除。在进程重启恢复内存状态时会先从磁盘将快照文件读取并恢复至内存,然后将快照后产生的操作日志应用到内存中来避免应用所有操作日志带来的长时间恢复问题。

在现有系统实现方案下,为了可以对部分或者全部文件进行分析,通常有如下方法来获取到与想要的时间点一致的元(meta)数据。

方法一:

1、在想要分析的时间点,触发元数据服务进程将内存信息输出为磁盘 上的快照(snapshot);

2、将快照拷贝到额外的一台空闲机器上,将快照加载到该机器的内存;

3、输出需要的元数据。

方法二:

1、拷贝元数据服务进程的任何一个快照和其后面产生的操作日志到额外的一台空闲机器上;

2、使用工具来加载快照并应用其后的操作日志到达某个时刻的内存状态;

3、输出需要的元数据。

现有的上述方法存在以下问题:当前无论需要的是部分还是全量的元数据,都需要将所有文件的内存状态恢复。在文件数量多造成元数据服务器内存使用率较高时,需要额外的闲置机器来保证在恢复内存的过程中不与原来的元数据服务进程竞争内存而导致系统不稳定,造成实现成本增加,尤其是在多个集群同时需要该功能的时候表现尤为严重。



技术实现要素:

有鉴于此,本申请提供了一种元数据输出方法、客户端和元数据服务器,以解决现有技术中在输出特定时间的元数据时,需要恢复所有文件的内存状态的技术问题。

为了解决上述技术问题,本申请公开了一种元数据输出方法,包括:接收到对元数据服务(MetaServer)进程的调用,所述调用包括元数据的输出配置参数;通过分叉(fork)函数创建所述元数据服务进程的子进程;控制所述子进程根据所述输出配置参数输出相应的元数据。

所述接收到对元数据服务进程的调用,所述调用包括元数据的输出配置参数包括:接收到来自客户端的对所述元数据服务进程的远程过程调用。

所述接收到对元数据服务进程的调用,所述调用包括元数据的输出配置参数包括:判断上一次创建的所述元数据服务进程的子进程是否已完成执 行;当上一次创建的所述元数据服务进程的子进程已完成执行时,保存所述输出配置参数至本地配置文件;当上一次创建的所述元数据服务进程的子进程未完成执行时,返回所述元数据服务进程当前繁忙的消息。

所述控制所述子进程根据所述输出配置参数输出相应的元数据包括:控制所述子进程根据所述输出配置参数将输出的元数据写入本地内存的临时文件;当所述元数据输出完毕时,标记所述子进程已完成执行。

所述输出配置参数包括多个输出对象。

所述控制所述子进程根据所述输出配置参数输出相应的元数据包括:判断所述子进程是否出现死锁状态;当所述子进程出现死锁状态时,杀死所述子进程。

所述控制所述子进程根据所述输出配置参数将输出的元数据写入本地内存的临时文件之前,所述方法还包括:判断未上传的所述临时文件的个数是否达到预设阈值;当未上传的所述临时文件的个数达到预设阈值时,进入等待状态,以等待未上传的所述临时文件被上传完毕。

所述调用还包括元数据的上传配置参数;所述控制所述子进程根据所述输出配置参数输出相应的元数据的同时,所述方法还包括:根据所述上传配置参数将所述输出的元数据上传至分布式存储系统。

所述上传配置参数包括上传速率和目标目录,其中,所述上传速率用于控制上传过程的数据传输速率;所述根据所述上传配置参数将所述输出的元数据上传至分布式存储系统包括:上传所述输出的元数据至所述分布式存储系统的临时目录;当所述输出的元数据被完整的上传完毕时,将所述临时目录重命名为所述目标目录,并标记本次任务已完成。

为了解决上述技术问题,本申请还公开了一种元数据输出方法,包括:配置元数据的输出配置参数;向元数据服务器发起对元数据服务进程的调用,以通过分叉函数创建出所述元数据服务进程的子进程,由所述子进程根据所述输出配置函数输出相应的元数据。

所述配置元数据的输出配置参数的同时,所述方法还包括:配置元数据的上传配置参数。

所述方法还包括:发送进度查询请求至元数据服务器;接收所述元数据服务器返回的任务状态信息。

为了解决上述技术问题,本申请还公开了一种元数据服务器,所述元数据服务器包括:接收模块,用于接收到对元数据服务(MetaServer)进程的调用,所述调用包括元数据的输出配置参数;创建模块,用于通过分叉(fork)函数创建所述元数据服务进程的子进程;处理模块,用于控制所述子进程根据所述输出配置参数输出相应的元数据。

所述接收模块包括:接收子模块,用于接收到来自客户端的对所述元数据服务进程的远程过程调用。

所述接收模块包括:第一判断子模块,用于判断上一次创建的所述元数据服务进程的子进程是否已完成执行;保存子模块,用于当上一次创建的所述元数据服务进程的子进程已完成执行时,保存所述输出配置参数至本地配置文件;返回子模块,用于当上一次创建的所述元数据服务进程的子进程未完成执行时,返回所述元数据服务进程当前繁忙的消息。

所述处理模块包括:写入子模块,用于控制所述子进程根据所述输出配置参数将输出的元数据写入本地内存的临时文件;标记子模块,用于当所述元数据输出完毕时,标记所述子进程已完成执行。

所述输出配置参数包括多个输出对象。

所述处理模块包括:第二判断子模块,用于判断所述子进程是否出现死锁状态;第一处理子模块,用于当所述子进程出现死锁状态时,杀死所述子进程。

所述处理模块还包括:第三判断子模块,用于判断未上传的所述临时文件的个数是否达到预设阈值;第二处理子模块,用于当未上传的所述临时文件的个数达到预设阈值时,进入等待状态,以等待未上传的所述临时文件被上传完毕。

所述调用还包括元数据的上传配置参数;所述元数据服务器还包括:上传模块,用于根据所述上传配置参数将所述输出的元数据上传至分布式存储系统。

所述上传配置参数包括上传速率和目标目录,其中,所述上传速率用于控制上传过程的数据传输速率;所述上传模块包括:上传子模块,用于上传所述输出的元数据至所述分布式存储系统的临时目录;重命名子模块,用于当所述输出的元数据被完整的上传完毕时,将所述临时目录重命名为所述目标目录,并标记本次任务已完成。

为了解决上述技术问题,本申请还公开了一种元数据输出客户端,包括:第一配置模块,用于配置元数据的输出配置参数;调用模块,用于向元数据服务器发起对元数据服务进程的调用,以通过分叉函数创建出所述元数据服务进程的子进程,由所述子进程根据所述输出配置函数输出相应的元数据。

所述客户端还包括:第二配置模块,用于配置元数据的上传配置参数。

所述客户端还包括:查询模块,用于发送进度查询请求至元数据服务器;接收模块,用于接收所述元数据服务器返回的任务状态信息。

与现有技术相比,本申请可以获得包括以下技术效果:不再需要恢复所有文件的内存状态,能够得到在分叉操作的时间点相应的输出目标的内存状态,从而保证元数据输出的时效性;不再需要配备额外的计算机,使实现成本降低。此外对当前元数据服务器的内存使用量的增加极少,只会为子进程分配由于父进程的写入操作而修改的内存量。

当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有技术效果。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是本申请实施例的一种元数据输出方法的流程示意图;

图2是本申请实施例的接收到对元数据服务进程的调用的流程示意图;

图3是本申请实施例控制子进程输出元数据的流程示意图;

图4是本申请实施例的一种元数据输出方法的流程示意图;

图5是本申请实施例上传元数据的流程示意图;

图6是本申请实施例的一种元数据输出方法的流程示意图;

图7是本申请实施例的一种元数据输出方法的流程示意图;

图8是本申请实施例的一种元数据输出方法的流程示意图;

图9是本申请实施例的一种元数据服务器的示例性结构框图;

图10是本申请实施例的一种元数据输出客户端的示例性结构框图。

具体实施方式

以下将配合附图及实施例来详细说明本发明的实施方式,藉此对本发明如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。

图1是本申请实施例提供的一种元数据输出方法,适用于服务器设备,该方法包括以下步骤。

在步骤S10中,接收到对元数据服务(MetaServer)进程的调用,调用包括元数据的输出配置参数。

该元数据服务进程运行在元数据服务器中,根据接收到的调用输出相应的元数据。对元数据服务进程的调用包括元数据的输出配置参数。

该输出配置参数包括输出目标、输出格式和输出内容存放路径。其中,输出目标是指需要输出的元数据当前所在的内存目录;输出格式是指元数据输出后的保存形式,如文件形式或者内存目录形式;输出内容存放路径是输出的元数据在内存中的存放路径。例如,输出目标为/var/log/abc,输出格式为文件形式,输出内容存放路径为/tmp/msv/abc;上述输出配置参数将/var/log/abc目录下的元数据以文件形式输出到/tmp/msv/abc目录。

在步骤S11中,通过分叉(fork)函数创建元数据服务进程的子进程。

元数据服务器接收到针对元数据服务进程的调用后,通过分叉函数创建元数据服务进程的子进程。该子进程用于输出在分叉操作这一时刻与输出目标对应的元数据;父进程继续进行有关元数据服务器的其他操作。该子进程 与元数据服务进程(父进程)共享内存地址空间,并且父进程采用写时拷贝技术(Copy-on-Write),在父进程对内存地址空间有写入操作时才会复制相应变化的内存地址空间分配给子进程。保证子进程对应的内存地址空间在分叉函数的分叉操作完成后可以定格在该分叉操作的时间点来实现元数据在某个时间点上的一致性,并通过该子进程根据输出配置参数输出相应的元数据。

在步骤S12中,控制子进程根据输出配置参数输出相应的元数据。

使元数据的输出不再需要将元数据服务器所有文件的内存状态恢复,通过分叉函数创建子进程,得到在分叉操作的时间点相应的输出目标的内存状态,能够保证元数据输出的时效性。同时,现有技术中在额外配备的计算机设备上恢复内存状态是为了避免与元数据服务进程竞争内存,而采用本申请的元数据输出方法,不再需要配备额外的计算机,使实现成本降低。此外对当前元数据服务器的内存使用量的增加极少,只会为子进程分配由于父进程的写入操作而修改的内存量。

在一个实施例中,步骤S10接收到对元数据服务进程的调用,是来自于客户端的对元数据服务进程的远程过程调用(Remote Procedure Call,RPC)。即由元数据服务器之外的客户端计算机来向元数据服务器发起针对元数据服务进程的调用。此时,针对分布式存储系统中所有元数据的输出操作都由该客户端计算机进行控制操作,通过该客户端计算机来设置输出配置参数并向元数据服务器的元数据服务进程发起远程过程调用。此时能够对元数据的输出进行远程集中控制,在同时为多个集群提供元数据服务的情况下,通过客户端计算机集中控制,有效将降低了系统的维护难度和成本,提高维护效率。

在一个实施例中,如图2所示,步骤S10接收到对元数据服务进程的调用进一步包括以下步骤。

在步骤S101中,接收到对元数据服务进程的调用。

在步骤S102中,判断上一次创建的元数据服务进程的子进程是否已完成执行。当上一次创建的元数据服务进程的子进程已执行完成时,执行步骤S103;当上一次创建的元数据服务进程的子进程未执行完成时,执行步骤 S104。

每次分叉操作创建的子进程,在完成元数据的输出之后都会标记相应的状态,例如已完成执行的子进程状态标记为“Done(完成)”。为了避免占用内存资源过多,判断上一次创建的子进程是否已完成执行。

在步骤S103中,保存输出配置参数至本地配置文件。

元数据服务器将本次调用的输出配置参数保存在本地配置文件,以备创建出的子进程来完成元数据输出。

在步骤S104中,返回元数据服务进程当前繁忙的消息,并返回步骤S102。

如果对元数据服务进程的调用来自远程客户端计算机,则将元数据服务进程当前繁忙的消息返回至远程客户端计算机。

在不同时间通过分叉函数创建的子进程所对应的内存空间具有不同的时间属性,内存中的元数据状态也会不同。在需要多个输出目标的元数据时,为了保证所输出的元数据的时效性,将需要输出的多个输出目标同时设置在输出配置参数中,通过对元数据服务进程的一次调用来完成。此时,分叉操作创建的子进程将完成多个输出目标的元数据输出,以保证所有输出目标的时效性。例如,输出配置参数共包括/var/log/abc、/var/log/efg、/var/log/chb等多个输出目标。

在一个实施例中,如图3所示,步骤S12控制子进程根据输出配置参数输出相应的元数据进一步包括以下步骤。

在步骤S121中,控制子进程根据输出配置参数将输出的元数据写入本地内存的临时文件。

子进程将与输出目标对应的元数据写入本地内存的临时文件。当该临时文件的大小达到预设阈值(如200M)或者相应的元数据已全部输出完毕时,将该临时文件命名为服务器上传进程可识别的文件名。可识别的文件名通常是与输出目标相对应的文件名,例如,输出目标为/var/log/abc,则该临时文件命名为abc_tmp,当该临时文件大小已达到阈值需要输出或者元数据已写入完毕需要输出时,将文件名从abc_tmp变为abc,如果按照文件大小的阈 值将输出的元数据划分为多个临时文件,则分别命名为:abc1、abc2、……

服务器上传进程用于将输出的元数据上传到分布式存储系统,以实现与元数据相关的其他功能,例如用户数据分析,用户行为统计等等。上传元数据的过程将在后续实施例中详细说明。

在步骤S122中,当元数据输出完毕时,标记子进程已完成执行。

在元数据输出过程中,该子进程通常标记为“等待(waiting)”,元数据输出完毕后,通常标记为“完成(Done)”,以继续下一次元数据输出。将元数据输出到本地内存,能够减少对元数据服务器本地磁盘的访问,避免影响元数据服务器的性能。

在一个实施例中,步骤S12控制子进程根据输出配置参数输出相应的元数据的同时,还需要判断该子进程是否出现死锁状态。当子进程需要输出的元数据被其他进程锁定(如排他锁),则该子进程有可能会一直等待其他进程释放,但其他进程需要的内存资源也有可能同时被该子进程锁定,需要等待该子进程释放,此时即出现死锁状态。检测到子进程进入死锁状态后,杀死该子进程,将该子进程标记为“失败”,为了保证元数据输出功能的正常运行,需要杀死已进入死锁状态的子进程。例如,利用该子进程的进程标识(PID)和相应命令杀死进入死锁状态的子进程。

图4是本申请实施例提供的一种元数据输出方法,适用于服务器设备,该方法包括以下步骤。

在步骤S20中,接收到对元数据服务进程的调用,调用包括元数据的输出配置参数和上传配置参数。

在设置输出配置参数的同时,设置相应的上传配置参数。上传配置参数包括上传速率、目标目录和压缩参数。其中,上传速率用于控制上传过程的数据传输速率,例如该上传速率为20Mb/S,则上传过程的数据传输速率会小于或等于20Mb/S。该目标目录是将输出的元数据上传至的目录,该目标目录可位于本地集群,也可以位于其他远程集群。该压缩参数用于控制输出的元数据在上传之前是否需要压缩处理,当需要上传的元数据过多时,为了提高效率,通过该压缩参数设置在上传之前对数据进行压缩处理。

在步骤S21中,通过分叉函数创建元数据服务进程的子进程。

在步骤S22中,控制子进程根据输出配置参数输出相应的元数据,同时根据上传配置参数将输出的元数据上传至分布式存储系统。

在元数据服务器中设置服务器上传进程,用于输出的元数据上传至分布式存储系统。该服务器上传进程被设置为每隔预设时长启动一次,以检查是否有输出的元数据需要上传。例如,利用Crontab命令设置每分钟运行一次服务器上传进程。服务器上传进程检测元数据服务器的本地配置文件是否包括输出配置参数和上传配置参数,检测到上述配置参数时开始根据上传配置参数进行元数据的上传操作。

元数据的输出过程和上传过程是并行过程,将输出的元数据尽快上传以减少对内存空间的占用,避免影响元数据服务器的性能。在控制子进程根据输出配置参数将输出的元数据写入本地内存的临时文件之前,判断当前未上传的临时文件的个数是否达到预设阈值,例如判断未上传的临时文件的个数是否达到5个。当未上传的临时文件的个数未达到预设阈值时,继续将输出的元数据写入本地内存的临时文件;当未上传的临时文件的个数达到预设阈值时,控制该子进程进入等待状态,以等待未上传的临时文件被上传完毕。从而使元数据的输出速度能够自适应上传速度,尽量保证内存不会被过多占用。

元数据服务器每次启动该服务器上传进程时,需要打开位于本地磁盘的执行文件。在打开执行文件时,对该执行文件添加排他锁,此时元数据服务器无法再启动第二个服务器上传进程,需等待本次启动的服务器上传进程执行完成后,将对执行文件的排他锁释放,才能再次启动下一个服务器上传进程。以防止上传元数据的过程占用网络带宽过多,影响元数据服务器的其他进程的网络数据传输。

元数据服务器成功启动该服务器上传进程之后,根据本地配置文件判断是否有需要执行上传的任务。如果没有则退出服务器上传进程;如果有则开始上传元数据并检测该任务是否已完成执行(元数据是否已全部输出),检测到该任务已完成执行时,设置本次上传为该任务的最后一次上传,直到检测到该任务的最后一次上传也已经上传完毕。

如图5所示,步骤S22根据上传配置参数将输出的元数据上传至分布式存储系统的过程中进一步包括:

在步骤S221中,上传输出的元数据至分布式存储系统的临时目录。

控制启动的服务器上传进程上传输出的元数据,并在上传的目标集群创建一临时目录以保存上传中的元数据。

在步骤S222中,当输出的元数据被完整的上传完毕时,将临时目录重命名为目标目录,并标记本次任务已完成。

即该任务的最后一次上传完毕之后,将临时目录修改为上传配置参数中的目标目录,从而将输出的元数据保存到分布式存储系统的目标目录,例如将临时目录/tmp/upload修改为目标目录/var/lib/abc。在元数据的上传完成后,将任务标记为“上传已完成”。

图6是本申请实施例提供的一种元数据输出方法,该方法包括以下步骤。

在步骤S301中,接收到对元数据服务进程的调用,调用包括元数据的输出配置参数和上传配置参数。

在步骤S302中,判断上一次创建的元数据服务进程的子进程是否已完成执行。当上一次创建的元数据服务进程的子进程已执行完成时,执行步骤S304;当上一次创建的元数据服务进程的子进程未执行完成时,执行步骤S303。

在步骤S303中,返回元数据服务进程当前繁忙的消息,并返回步骤S302。

在步骤S304中,保存输出配置参数和上传配置参数至本地配置文件。

在步骤S305中,通过分叉函数创建元数据服务进程的子进程。

在步骤S306中,控制该子进程从本地配置文件中获取输出配置参数。

在步骤S307中,判断当前未上传的临时文件的个数是否达到预设阈值。当未上传的文件个数未达到预设阈值时,执行步骤S308;当未上传的文件个数达到预设阈值时,执行步骤S309。

在步骤S308中,控制该子进程进入等待状态,以等待未上传的临时文件被上传完毕。

在步骤S309中,将输出的元数据写入本地内存的临时文件。

在步骤S310中,当临时文件的大小到达了某个阈值或者该输出元数据的任务执行完成时,将临时文件命名为服务器上传进程可识别的文件名,以等待服务器上传进程将输出的元数据上传至分布式存储系统。

步骤S305通过分叉函数创建元数据服务进程的子进程之后,元数据服务器在控制该子进程输出元数据时,还要并行的检测该子进程是否出现死锁状态,包括以下相关步骤。

在步骤S311中,判断子进程是否进入死锁状态。当子进程进入死锁状态时,执行步骤S312;当子进程未进入死锁状态时,继续执行步骤S311。

在步骤S312中,杀死子进程并标记本次输出任务执行失败。

本申请实施例中元数据服务进程执行的元数据输出过程,与服务器上传进程执行的元数据上传过程是并行的。元数据服务器每隔预设时长启动一次服务器上传进程,元数据上传过程包括以下步骤。

在步骤S313中,打开位于本地磁盘的服务器上传进程的执行文件。

在步骤S314中,判断该执行文件是否被成功打开。当该执行文件打开不成功时,返回步骤S313;当该执行文件被成功打开时,执行步骤S315。

在步骤S315中,根据本地配置文件判断是否有任务在运行。当判断出没有任务在运行时,执行步骤S316;当判断出有任务在运行时,执行步骤S317。

在步骤S316中,关闭服务器上传进程。

在步骤S317中,将输出的元数据上传至分布式存储系统的临时目录。

在步骤S318中,判断子进程输出元数据的任务是否已完成。当子进程输出元数据的任务已完成时,执行步骤S319;当子进程输出元数据的任务未完成时,返回步骤S317。

在步骤S319中,将本次上传设置为本任务的最后一次上传。

在步骤S320中,当输出的元数据被完整的上传完毕时,将临时目录重命名为目标目录,并标记本次上传已完成。

在输出元数据的同时异步并发上传该输出的元数据到分布式存储系统,及时回收内存,以达到不限量的元数据输出并减少网络带宽争抢。

图7是本申请实施例提供的一种元数据输出方法,适用于客户端设备,包括以下步骤。

在步骤S40中,配置元数据的输出配置参数。

客户端计算机根据用户操作配置元数据的输出配置参数,包括输出目标、输出格式和输出内容存放路径。

在步骤S41中,向元数据服务器发起对元数据服务进程的调用,以通过分叉函数创建出元数据服务进程的子进程,由子进程根据所述输出配置函数输出相应的元数据。

客户端计算机向元数据服务器发起对元数据服务进程的调用,该调用包括步骤S40中配置的输出配置参数。通过该调用使元数据服务器利用分叉函数创建出元数据服务进程的子进程,由子进程根据所述输出配置函数输出相应的元数据。

该调用可以是远程过程调用,从而在由多个集群组成的分布式存储系统中,实现对元数据输出的远程集中配置和管理,多个集群可以并行操作,降低系统维护难度和成本,提高效率。

在一个实施例中,步骤S40在配置元数据的输出配置参数的同时,还配置元数据的上传配置参数。上传配置参数包括上传速率、目标目录和压缩参数。使元数据服务器在输出相应的元数据后,根据目标目录将输出的元数据上传到分布式存储系统。

图8是本申请实施例提供的一种元数据输出方法,适用于客户端设备,包括以下步骤。

在步骤S50中,配置元数据的输出配置参数和上传配置参数。

在步骤S51中,向元数据服务器发起对元数据服务进程的调用,以通过分叉函数创建出所述元数据服务进程的子进程,由所述子进程根据所述输出 配置函数输出相应的元数据,并由元数据服务器的服务器上传进程将输出的元数据上传到分布式存储系统。

在步骤S52中,发送进度查询请求至元数据服务器。

在配置元数据的输出配置参数和上传配置参数并向元数据服务器发起调用后,客户端计算机生成相应的配置标识。可根据该配置标识向元数据服务器发送进度查询请求,以查询相应的配置任务的执行进度。发送的进度查询请求也可以不包含该配置标识,此时则默认查询当前正在执行的配置任务的进度或者最后一个执行完成任务状态。

在步骤S53中,接收元数据服务器返回的任务状态信息。

通过该任务状态信息,可查询到该配置任务的输出配置参数、上传配置参数和任务进度状态。如果是正在执行中的配置任务,该任务进度状态包括“执行中”和“等待中”;如果是已经执行完成的配置任务,该任务进度状态包括“执行失败”和“执行失败”,其中该任务进度状态为“执行失败”时还能够查询到造成执行失败的原因。

图9是本申请实施例提供的一种元数据服务器,所述元数据服务器包括:

接收模块60,用于接收到对元数据服务(MetaServer)进程的调用,调用包括元数据的输出配置参数;

创建模块61,用于通过分叉(fork)函数创建元数据服务进程的子进程;

处理模块62,用于控制子进程根据输出配置参数输出相应的元数据。

该接收模块60包括:

接收子模块,用于接收到来自客户端的对元数据服务进程的远程过程调用。

在一个实施例中,该接收模块60包括:

第一判断子模块,用于判断上一次创建的元数据服务进程的子进程是否已完成执行;

保存子模块,用于当上一次创建的元数据服务进程的子进程已完成执行 时,保存输出配置参数至本地配置文件;

返回子模块,用于当上一次创建的元数据服务进程的子进程未完成执行时,返回元数据服务进程当前繁忙的消息。

在一个实施例中,该处理模块62包括:

写入子模块,用于控制子进程根据输出配置参数将输出的元数据写入本地内存的临时文件;

标记子模块,用于当元数据输出完毕时,标记子进程已完成执行。

在一个实施例中,输出配置参数包括多个输出对象。

在一个实施例中,该处理模块62包括:

第二判断子模块,用于判断子进程是否出现死锁状态;

第一处理子模块,用于当子进程出现死锁状态时,杀死子进程。

在一个实施例中,该处理模块62还包括:

第三判断子模块,用于判断未上传的临时文件的个数是否达到预设阈值;

第二处理子模块,用于当未上传的临时文件的个数达到预设阈值时,进入等待状态,以等待未上传的临时文件被上传完毕。

在一个实施例中,该调用还包括元数据的上传配置参数;元数据服务器还包括:

上传模块,用于根据上传配置参数将输出的元数据上传至分布式存储系统。

上传配置参数包括上传速率和目标目录,其中,上传速率用于控制上传过程的数据传输速率;该上传模块包括:

上传子模块,用于上传输出的元数据至分布式存储系统的临时目录;

重命名子模块,用于当输出的元数据被完整的上传完毕时,将临时目录重命名为目标目录,并标记本次任务已完成。

图10是本申请实施例提供的一种元数据输出客户端,包括:

第一配置模块70,用于配置元数据的输出配置参数;

调用模块71,用于向元数据服务器发起对元数据服务进程的调用,以通过分叉函数创建出元数据服务进程的子进程,由子进程根据输出配置函数输出相应的元数据。

在一个实施例中,该客户端还包括:

第二配置模块,用于配置元数据的上传配置参数。

在一个实施例中,该客户端还包括:

查询模块,用于发送进度查询请求至元数据服务器;

接收模块,用于接收元数据服务器返回的任务状态信息。

下面结合应用场景对本申请实施例做进一步说明。

本申请实施例提供的元数据输出方法、服务器和客户端可以用于互联网企业的云计算平台,为云计算平台的分布式文件系统提供支持。对于分布在不同地区的多个存储集群,可通过客户端对各个集群的元数据服务器进行集中管理,从而控制各个集群的元数据输出。在分布式文件系统中,文件的元数据通常用于记录相应文件属性信息,例如文件的存储路径、占用空间、访问次数、读写操作次数等等,输出这些元数据使云计算平台能够对用户行为和该行为产生的文件进行分析。例如,通过客户端计算机配置元数据的输出配置参数和上传配置参数,将分布式文件系统中与某网站的用户文件的对应的元数据输出并上传到指定的目录,并每隔预设周期(例如每天或者每周)完成一次输出和上传。从上传的目标目录中获取与不同时间点对应的元数据,利用不同时间点的元数据分析该网站的用户文件的变化,进一步分析用户行为变化和趋势,为云计算平台提供可靠的元数据支持。

此外,在ODPS(Open Data Processing Service,开放数据处理服务)计算平台中也可以应用本申请实施例提供的元数据输出方法、服务器和客户端,ODPS提供针对TB/PB级数据、实时性要求不高的分布式处理能力,应用于数据分析、挖掘、商业智能等领域,使用户可以将更多的时间来专注于用户数据挖掘和分析。利用本申请实施例提供的元数据输出方法,用户可以根据实际的用户数据分析需求配置不同的输出参数。利用输出的元数据来分 析用户文件的变化,用户文件每天的增加量,各个集群的用户文件存储情况,已确定是否需要对相应的集群进行扩容。根据输出的元数据分析用户文件的访问量,已却确定需要将已成为“热点”数据的用户文件进行迁移等等;或者利用输出的元数据分析不同特征用户的分布情况。本申请实施例提供的元数据输出方法是为互联网企业推出的云计算平台以及大数据服务提供支持的基础性方案,为多集群的集中管理以及元数据需要频繁输出的场景带来了极大便利,提高了云计算平台以及大数据服务在用户数据挖掘和分析方面的效率。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

如在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题, 基本达到所述技术效果。此外,“耦接”一词在此包含任何直接及间接的电性耦接手段。因此,若文中描述一第一装置耦接于一第二装置,则代表所述第一装置可直接电性耦接于所述第二装置,或通过其他装置或耦接手段间接地电性耦接至所述第二装置。说明书后续描述为实施本发明的较佳实施方式,然所述描述乃以说明本发明的一般原则为目的,并非用以限定本发明的范围。本发明的保护范围当视所附权利要求所界定者为准。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。

上述说明示出并描述了本发明的若干优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

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