对jobTracker主机进行宕机保护的方法和系统的制作方法

文档序号:6426829阅读:221来源:国知局
专利名称:对jobTracker主机进行宕机保护的方法和系统的制作方法
技术领域
本发明涉及分布式计算机领域,尤其涉及一种对任务调度jobTracker主机进行宕机保护的方法和系统。
背景技术
分布式计算平台使用分布式的计算方法,利用多台主机协同运算以处理大规模数据,该平台可以简单,有效,快速地接入各种业务需求。分布式计算平台使用开源项目Hadoop作为其软件支撑,Hadoop是Apache开源组织的一个分布式计算开源框架,包括计算框架(MapReduce实现)和分布式存储(HDFS文件系统)两部分。其中=MapReduce是“任务的分解与结果的汇总”,HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。简言之,Hadoop被设计为存储与计算分离的·结构,即MapReduce计算框架与HDFS存储框架是松散耦合的。在Hadoop中,计算框架MapReduce包括Map和Reduce两个阶段。在Map阶段,输入任务(文件)被组织成便于分发传递的块,这一过程即split ;对这些块文件进行一个用户自定义的Map操作,按照业务的需求将输入数据以〈KEY,VALUE〉对的形式重新组织并分发出去。在Reduce阶段,系统收集Map阶段分发的〈KEY,VALUE〉对,自动将相同KEY的〈KEY, VALUE〉对传递到同一台Reduce机器上,这一过程即shuffle ;对这些〈KEY, VALUE〉对做归并(merge)、排序(sort)操作之后,对其施加一个用户自定义的Reduce操作。这样就完成了一次MapReduce。具体的,MapReduce框架是主从结构的。MapReduce运行时,主机(master)启动一个JobTracker (任务调度)进程,用于任务调度。从机(slave)启动数个TaskTracker (任务执行单元)进程,作为运算实体。JobTracker的主要职责就是启动、跟踪和调度各个Slave的任务执行,JobTracker中存储着任务状态信息。每一台Slave通常具有TaskTracker的工作。TaskTracker根据应用要求来结合本地数据执行Map任务以及Reduce任务。由前面的描述可知,jobTracker在整个系统中承担举足轻重的作用,因此,如何保护jobTracker中的数据尤为重要,当前,如何对jobTracker进行岩机保护函待解决。

发明内容
本发明实施例所要解决的技术问题在于,提供对任务调度jobTracker主机进行宕机保护的方法及系统,以避免单个jobTracker主机任务调度的压力过大,以及避免jobTracker主机单点故障给整个系统造成的重大影响。具体的,本发明实施例提供的一种对任务调度jobTracker主机进行宕机保护的方法包括
jobTracker主机队列中的各jobTracker主机以循环方式接收用户任务提交接口机所提交的任务,所述任务包括map任务和reduce任务;任务执行单元TaskTracker根据各jobTracker主机与任务间的录属关系,将任务执行过程中的任务状态信息上报给对应的jobTracker主机;
jobTracker主机队列中的两两jobTracker主机之间jobTracker主机队列中的两两jobTracker主机之间对管理的任务进行备份并对任务状态信息进行同步。较佳的,本发明的方法还包括
当jobTracker主机队列中的一 jobTracker主机发生岩机时,通过分布系统协调单元通知TaskTracker,以使所述TaskTracker到岩机的所述jobTracker主机的备份的jobTracker主机上进行任务获取或上报任务状态信息。 较佳的,本发明的方法还包括
为各jobTracker主机管理的任务加入任务属性信息,所述任务属性信息用于标识所 述任务与jobTracker主机之间的录属关系。较佳的,本发明的方法还包括
TaskTracker以循环方式依次从各jobTracker主机中获取任务进行执行。较佳的,本发明的方法还包括,
根据j obTracker主机所管理的任务的执行时间长短,对j obTracker主机队列中的各jobTracker主机进行优先级等级划分,执行时间越长的任务放置到优先级越低的jobTracker主机上进行管理;
所述TaskTracker以循环方式依次从各jobTracker主机中获取任务进行执行具体包

TaskTracker按照jobTracker主机的高低优先级的次序,以由高至低的顺序循环访问jobTracker主机,并从所述jobTracker主机中获取任务进行执行。相应的,本发明实施例提供的一种对任务调度jobTracker主机进行岩机保护的系统,包括
用户任务提交接口机,用于提交任务,所述任务包括map和reduce任务;
多个任务执行单元TaskTracker,用于根据jobTracker主机与任务间的录属关系,将任务执行过程中的任务状态上报给对应的jobTracker主机;
多个jobTracker主机,其组成一 jobTracker主机队列,所述jobTracker主机队列中的各jobTracker主机以循环方式接收用户任务提交接口机所提交的任务,并且两两jobTracker主机之间jobTracker主机队列中的两两jobTracker主机之间对管理的任务进行备份并对任务状态信息进行同步。较佳的,所述系统还包括
分布系统协调单元,用于保存所述jobTracker主机队列中的各jobTracker主机的配置信息,所述配置信息包括jobTracker主机队列中各jobTracker主机之间的备份关系,以及各jobTracker主机与任务的录属关系;当jobTracker主机队列中的一 jobTracker主机发生岩机时,基于所述配置信息通知TaskTracker,以使所述TaskTracker到岩机的所述jobTracker主机的备份的jobTracker主机上进行任务获取或上报任务状态信息。较佳的,所述jobTracker主机队列中的各jobTracker主机为其管理的任务加入任务属性信息,所述任务属性信息用于标识所述任务与jobTracker主机之间的录属关系。较佳的,所述TaskTracker还用于以循环方式依次从各jobTracker主机中获取任务进行执行。较佳的,本发明的系统还包括
优先等级划分单元,用于根据jobTracker主机所管理的任务的执行时间长短,对jobTracker主机队列中的各jobTracker主机进行优先级等级划分,执行时间越长的任务放置到优先级越低的jobTracker主机上进行管理;
所述TaskTracker具体按照jobTracker主机的高低优先级的次序,以由高至低的顺序循环访问jobTracker主机,并从所述jobTracker主机中获取任务进行执行。实施本发明实施例有如下有益效果
本发明实施例一方面不再由单个jobTracker主机来接收任务以对任务进行调度,而 是提供一个jobTracker主机队列,由jobTracker主机队列中的各jobTracker主机以循环方式接收用户任务提交接口机所提交的任务,通过该方式,降低了单个jobTracker主机来进行任务调度的工作压力;另一方面,本发明实施例将jobTracker主机队列中的两两jobTracker主机之间进行任务的备份以及任务状态信息的同步,避免了 jobTracker主机单点故障给整个系统造成的重大影响;除此之外,本发明实施例根据jobTracker主机所管理的任务的执行时间长短,对jobTracker主机队列中的各jobTracker主机进行优先级等级划分,管理的任务的执行时间越长的jobTracker主机的优先级越低,这样可优先处理执行时间短的小任务,提高整个系统的处理效率。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图I是本发明的对任务调度jobTracker主机进行岩机保护的方法的一个实施例流程示意图。图2是本发明的对任务调度jobTracker主机进行宕机保护的方法的另一个实施例流程示意图。图3是图2中步骤115-步骤116的操作原理示意图。图4是本发明的对任务调度jobTracker主机进行岩机保护的系统的一个实施例结构组成示意图。图5是本发明的对任务调度jobTracker主机进行岩机保护的系统的另一个实施例结构组成示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。本发明实施例提供了对任务调度jobTracker主机进行宕机保护的方法,该方法应用于hadoop的MapReduce框架下,用于解决现有的MapReduce框架下jobTracker主机单点承担的工作压力大,单点故障导致系统故障的缺陷。
具体的,图I是本发明的对任务调度jobTracker主机进行宕机保护的方法的一个实施例流程示意图。如图I所示,本实施例的方法包括
步骤S110, jobTracker主机队列中的各jobTracker主机以循环方式接收用户任务提交接口机(jobclient)所提交的任务,所述任务包括map任务和reduce任务。在步骤S110,用户任务提交接口机并不是每次都将任务提报给同一个jobTracker主机,而是以循环的方式将不同的任务提交到不同的jobTracker主机上。比如假设jobTracker主机队列中包括三个 jobTracker 主机,分别是jobTracker I、jobTracker2 和 jobTracker3,该三个 jobTracker 主机的循环顺序为 jobTrackerl-jobTracker3-jobTracker2-jobTrackerl,假设当前有四个任务jobDl、jobD2、jobD3和jobD4,因此,当用户任务提交接口机接收到JobDl时,将其提交给jobTrackerl ;当用户任务提交接口机接收到jobD2时,将其提交给jobTracker3 ;当用户任务提交接口机接收到jobD3时,将其提交给jobTracker2 ;当用户任务提交接口机接收到jobD4时,将其提交给jobTrackerl。 步骤S111,为各jobTracker主机管理的任务加入任务属性信息,所述任务属性信息用于标识所述任务与jobTracker主机之间的录属关系。具体实现中,所述任务属性信息可为任务配置信息表,该表中建立jobTracker主机名与任务名之间的对应关系。表I即为任务配置信息表的一种表达方式。具体实现中,任务属性信息可存储于jobTracker主机中,也可存储于系统的分布系统协调单元中。表I : jobIDl->jobtrackerl jobID4->jobtrackerl jobID2->jobtracker3 jobID3->jobtracker2
步骤S112,任务执行单元(TaskTracker)根据jobTracker主机与任务间的录属关系,将任务执行过程中的任务状态信息上报给对应的jobTracker主机。比如,TaskTracker将根据“jobD3-> jobtracker2”的录属关系,将jobD3的任务状态信息上报给jobTracker2。步骤S113,jobTracker主机队列中的两两jobTracker主机之间对管理的任务状态信息进行备份和同步。仍借用前面的例子,假设jobTracker主机队列中包括三个jobTracker 主机,分别是jobTrackerl、jobTracker2 和 jobTracker3,在步骤 S113,建立jobTracker I λ jobTracker2和jobTracker3两两之间的管理的任务进行备份,并根据备份关系将任务状态信息进行同步(主要包括map和reduce任务的执行进度的同步),比如,该三个 jobTracker 主机中 Jobtracker2 备份 jobtrackerl,jobtracker3 备份 jobtracker2,jobtrackerl 备份 jobtracker30步骤SI 14,当jobTracker主机队列中的一 jobTracker主机发生岩机时,通过分布系统协调单元(zookeeper)通知TaskTracker,以使所述TaskTracker到岩机的所述jobTracker主机的备份的jobTracker主机上进行任务获取或上报任务状态信息。仍借用前面的例子,假设jobTracker主机队列中包括三个jobTracker主机,分别是jobTracker I λ jobTracker2 和 jobTracker3,假设 jobTrackerl 岩机,此时通过 zookeeper将岩机的所述jobTrackerl上的任务jobDl和jobD4指定到jobTracker主机队列中对岩机的所述jobTrackerl主机备份的jobTracker2主机上,也即,上述的表I将变为下表2 表2 :
jobIDl->jobtracker2jobID4->jobtracker2jobID2->jobtracker3jobID3->jobtracker2
在步骤S114,并通过分布系统协调单元(zookeeper)通知TaskTracker,以使所述TaskTracker到岩机的所述jobTracker I主机的备份的jobTracker2主机上进行任务获取或上报任务状态信息。本实施例一方面不再由单个jobTracker主机来接收任务以对任务进行调度,而是提供一个jobTracker主机队列,由jobTracker主机队列中的各jobTracker主机以循环方式接收用户任务提交接口机所提交的任务,通过该方式,降低了单个jobTracker主机来进行任务调度的工作压力;另一方面,本发明实施例将jobTracker主机队列中的两两 jobTracker主机之间进行备份及任务状态信息同步,避免了 jobTracker主机单点故障给整个系统造成的重大影响。图2是本发明的对任务调度jobTracker主机进行宕机保护的方法的另一个实施例流程示意图。如图2所示,本实施例的方法在图I的基础上还包括步骤S115和步骤S116,具体的,本实施例的方法包括
步骤SllO-步骤SI 14。具体实现中,步骤SllO-步骤S114与图I相同,在此不进行赘述。步骤S115,根据jobTracker主机所管理的任务的执行时间长短,对jobTracker主机队列中的各jobTracker主机进行优先级等级划分,执行时间越长的任务放置到优先级越低的jobTracker主机上进行管理。比如参考图3,将jobTracker主机队列中的jobTracker主机按照管理的任务的执行时间长短划分为一级队列、二级队列和三级队列。步骤SI 16, TaskTracker按照jobTracker主机的高低优先级的次序,以由高至低的顺序循环访问jobTracker主机,并从所述jobTracker主机中获取任务进行执行。比如,仍采用图3的例子,在步骤S116中,TaskTracker可首先从一级队列中获取20个任务执行,然后再从二级队列中获取10个任务执行,最后从三级队列中获取5个任务执行,依此循环。这样当系统中有执行时间较长的任务时,可将其放到第二级或三级队列中,以达到优先处理系统中的小任务,提高整个系统的处理效率。具体实现中,当然也可以不对jobTracker主机队列中的jobTracker主机进行优先级划分,此时,TaskTracker直接按照jobTracker主机在队列中的循环顺序,循环从各jobTracker主机中获取任务进行执行。本实施例一方面不再由单个jobTracker主机来接收任务以对任务进行调度,而是提供一个jobTracker主机队列,由jobTracker主机队列中的各jobTracker主机以循环方式接收用户任务提交接口机所提交的任务,通过该方式,降低了单个jobTracker主机来进行任务调度的工作压力;另一方面,本发明实施例将jobTracker主机队列中的两两jobTracker主机之间进行备份及任务状态信息同步,避免了 jobTracker主机单点故障给整个系统造成的重大影响;除此之外,本实施例根据jobTracker主机所管理的任务的执行时间长短,对jobTracker主机队列中的各jobTracker主机进行优先级等级划分,管理的任务的执行时间越长的jobTracker主机的优先级越低,这样可优先处理执行时间短的小任务,提高整个系统的处理效率。相应的,本发明实施例还提供了对任务调度jobTracker主机进行宕机保护的系统,该系统可用于实现图I和图2所示的方法。具体的,图4是本发明的对任务调度jobTracker主机进行宕机保护的系统的一个实施例结构组成示意图。该实施例可用于实施图I所示的方法。具体的,本实施例的系统包括用户任务提交接口机40、任务执行单元(TaskTracker) 41、jobTracker主机42以及分布系统协调单元43,其中
所述用户任务提交接口机40,用于提交任务,所述任务包括map和reduce任务。用户任务提交接口机并不是每次都将任务提报给同一个jobTracker主机,而是以循环的方式将不同的任务提交到不同的jobTracker主机上。比如假设jobTracker主机队列中包括三个jobTracker 主机,分别是jobTrackerl、jobTracker2 和 jobTracker3,该三个 jobTracker 主机的循环顺序为 jobTracker I-jobTracker3-jobTracker2_ jobTracker I,假设当前有四个任务jobDl、jobD2、jobD3和jobD4,因此,当用户任务提交接口机接收到jobDl时,将其提交给jobTrackerl ;当用户任务提交接口机接收到jobD2时,将其提交给jobTracker3 ;当用户任务提交接口机接收到jobD3时,将其提交给jobTracker2 ;当用户任务提交接口机接收到jobD4时,将其提交给jobTrackerl。所述多个任务执行单元(TaskTracker) 41,用于根据jobTracker主机42与任务间的录属关系,将任务执行过程中的任务状态上报给对应的jobTracker主机42。具体的,为各j obTracker主机中的管理的任务加入任务属性信息,所述任务属性信息用于标识所述任务与jobTracker主机之间的录属关系。具体实现中,所述任务属性信息可为任务配置信息表,该表中建立jobTracker主机名与任务名之间的对应关系。表I即为任务配置信息表的一种表达方式。具体实现中,任务属性信息可存储于jobTracker主机42中,也可存储于系统的分布系统协调单元43中。比如,基于表1,任务执行单元(TaskTracker) 41将根据“jobD3-> jobtracker2”的录属关系,将jobD3的任务状态信息上报给jobTracker2。多个jobTracker主机42,其组成一 jobTracker主机队列,所述jobTracker主机队列中的各jobTracker主机42以循环方式接收用户任务提交接口机40所提交的任务,并且两两jobTracker主机42之间对管理的任务进行备份并对任务状态信息进行同步。所述分布系统协调单元43(zookeeper),用于保存所述jobTracker主机队列中的各jobTracker主机的配置信息,所述配置信息包括jobTracker主机队列中各jobTracker主机之间的备份关系,以及各jobTracker主机与任务的录属关系;当jobTracker主机队列中的一 jobTracker主机发生岩机时,基于所述配置信息通知TaskTracker,以使所述TaskTracker到岩机的所述jobTracker主机的备份的jobTracker主机上进行任务获取或上报任务状态信息。仍借用前面的例子,假设jobTracker主机队列中包括三个jobTracker主机,分别是jobTrackerl、jobTracker2和jobTracker3,所述分别系统协调单元43建立jobTrackerl、jobTracker2和jobTracker3两两之间的备份关系,并根据备份关系将任务状态信息同步,比如,该三个jobTracker主机中Jobtracker2备份jobtrackerl,jobtracker3 备份 jobtracker2, jobtrackerl 备份 jobtracker3。另外,假设 jobTrackerl岩机,此时通过zookeeper将岩机的所述jobTracker I上的任务jobDl和jobD4指定到jobTracker主机队列中对岩机的所述jobTrackerl主机备份的jobTracker2主机上。也SP,表I将变为表2。并且,zookeeper通知TaskTracker,以使所述TaskTracker到岩机的所述jobTracker I主机的备份的jobTracker2主机上进行任务获取或上报任务状态信息图5是本发明的对任务调度jobTracker主机进行岩机保护的系统的另一个实施例结构组成示意图。该实施例可用于实施图2所示的方法。如图5所示,本实施例的系统在图4所示的系统的基础上,还包括优先等级划分单元45,用于根据jobTracker主机42所管理的任务的执行时间长短,对jobTracker主机队列中的各jobTracker主机42进行优先级等级划分,执行时间越长的任务放置到优先级越低的jobTracker主机上进行管理。比如参考图3,将j obTracker主机队列中的j obTracker主机按照管理的任务的执行时间长短划分为一级队列、二级队列和三级队列。在此基础上,所述TaskTracker41具体按照jobTracker主机的高低优先级的次序,以由高至低的顺序循环访问jobTracker主机42,并从所述jobTracker主机42中获取任务进行执行。比如,仍采用图3的例子,TaskTracker41可首先从一级队列中获取20个任务执行,然后再从二级队列中获取10个任务执行,最后从三级队列中获取5个任务执行,·依此循环。这样当系统中有执行时间较长的任务时,可将其放到第二级或三级队列中,以达到优先处理系统中的小任务,提高整个系统的处理效率。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random AccessMemory, RAM)等。以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
权利要求
1.一种对任务调度jobTracker主机进行岩机保护的方法,其特征在于,包括 jobTracker主机队列中的各jobTracker主机以循环方式接收用户任务提交接口机所提交的任务,所述任务包括map任务和reduce任务; 任务执行单元TaskTrack er根据各jobTracker主机与任务间的录属关系,将任务执行过程中的任务状态信息上报给对应的jobTracker主机; jobTracker主机队列中的两两jobTracker主机之间对管理的任务进行备份并对任务状态信息进行同步。
2.如权利要求I所述的对任务调度jobTracker主机进行岩机保护的方法,其特征在于,还包括 当jobTracker主机队列中的一 jobTracker主机发生岩机时,通过分布系统协调单元通知TaskTracker,以使所述TaskTracker到岩机的所述jobTracker主机的备份的jobTracker主机上进行任务获取或上报任务状态信息。
3.如权利要求I或2所述的对任务调度jobTracker主机进行岩机保护的方法,其特征在于,还包括 为各jobTracker主机管理的任务加入任务属性信息,所述任务属性信息用于标识所述任务与jobTracker主机之间的录属关系。
4.如权利要求I或2所述的对任务调度jobTracker主机进行岩机保护的方法,其特征在于,还包括 TaskTracker以循环方式依次从各jobTracker主机中获取任务进行执行。
5.如权利要求4所述的对任务调度jobTracker主机进行岩机保护的方法,其特征在于, 根据jobTracker主机所管理的任务的执行时间长短,对jobTracker主机队列中的各jobTracker主机进行优先级等级划分,执行时间越长的任务放置到优先级越低的jobTracker主机上进行管理; 所述TaskTracker以循环方式依次从各jobTracker主机中获取任务进行执行具体包括 TaskTracker按照jobTracker主机的高低优先级的次序,以由高至低的顺序循环访问jobTracker主机,并从所述jobTracker主机中获取任务进行执行。
6.一种对任务调度jobTracker主机进行宕机保护的系统,其特征在于,包括 用户任务提交接口机,用于提交任务,所述任务包括map和reduce任务; 多个任务执行单元TaskTracker,用于根据jobTracker主机与任务间的录属关系,将任务执行过程中的任务状态上报给对应的jobTracker主机; 多个jobTracker主机,其组成一 jobTracker主机队列,所述jobTracker主机队列中的各jobTracker主机以循环方式接收用户任务提交接口机所提交的任务,并且两两jobTracker主机之间对管理的任务进行备份并对任务状态信息进行同步。
7.如权利要求6所述的对任务调度jobTracker主机进行岩机保护的系统,其特征在于,还包括 分布系统协调单元,用于保存所述jobTracker主机队列中的各jobTracker主机的配置信息,所述配置信息包括jobTracker主机队列中各jobTracker主机之间的备份关系,以及各jobTracker主机与任务的录属关系;当jobTracker主机队列中的一 jobTracker主机发生岩机时,基于所述配置信息通知TaskTracker,以使所述TaskTracker到岩机的所述jobTracker主机的备份的jobTracker主机上进行任务获取或上报任务状态信息。
8.如权利要求6或7所述的对任务调度jobTracker进行岩机保护的系统,其特征在于,所述jobTracker主机队列中的各jobTracker主机为其管理的任务加入任务属性信息,所述任务属性信息用于标识所述任务与jobTracker主机之间的录属关系。
9.如权利要求6或7所述的对任务调度jobTracker进行岩机保护的系统,其特征在 于, 所述TaskTracker还用于以循环方式依次从各jobTracker主机中获取任务进行执行。
10.如权利要求9所述的对任务调度jobTracker进行岩机保护的系统,其特征在于,还包括 优先等级划分单元,用于根据jobTracker主机所管理的任务的执行时间长短,对jobTracker主机队列中的各jobTracker主机进行优先级等级划分,执行时间越长的任务放置到优先级越低的jobTracker主机上进行管理; 所述TaskTracker具体按照按照jobTracker主机的高低优先级的次序,以由高至低的顺序循环访问jobTracker主机,并从所述jobTracker主机中获取任务进行执行。
全文摘要
本发明实施例公开了一种对任务调度jobTracker主机进行宕机保护的方法和系统,其中所述方法包括jobTracker主机队列中的各jobTracker主机以循环方式接收用户任务提交接口机所提交的任务,所述任务包括map任务和reduce任务;任务执行单元TaskTracker根据各jobTracker主机与任务间的录属关系,将任务执行过程中的任务状态信息上报给对应的jobTracker主机;jobTracker主机队列中的两两jobTracker主机之间对管理的任务进行备份并对任务状态信息进行同步。实施本发明,可避免单个jobTracker主机任务调度的压力过大,以及避免jobTracker主机单点故障给整个系统造成的重大影响。
文档编号G06F9/48GK102841822SQ201110170328
公开日2012年12月26日 申请日期2011年6月23日 优先权日2011年6月23日
发明者史晓峰, 蔡斌, 崔小丰, 宫振飞, 张文郁, 韩欣, 肖桂菊, 邱翔虎, 崔晓春 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1