买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:百度在线网络技术(北京)有限公司
摘要:本发明提出一种调节mapper在多核上执行的方法及装置。其中所述方法包括以下步骤:监控每个mapper的平均处理速度;将每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper;确定速度慢的mapper所在的机器上是否有空闲资源;以及如果是,则将速度慢的mapper的单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行。根据本发明实施例的方法,可以保证调度的任务尽快完成,整个响应计算的过程可以节约大量时间,极大地提升了集群性能。
主权项:一种调节mapper在多核上执行的方法,其特征在于,在Hadoop的架构下包括Mapreduce引擎,所述Mapreduce引擎由JobTrackers和TaskTrackers组成,所述TaskTracker用于管理节点上的多个mapper,所述方法包括以下步骤:监控每个mapper的平均处理速度;将所述每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper;确定所述速度慢的mapper所在的机器上是否有空闲资源;以及如果是,则将所述速度慢的mapper的单线程处理拆分成多线程处理,并将所述多线程处理分配到所述多核上执行。
全文数据:调节mapper在多核上执行的方法及装置技术领域[00〇1] 本发明涉及互联网技术领域,尤其涉及一种调节mapper在多核上执行的方法及装置。背景技术[00〇2]现有技术采用开源Hadoop的MapReduce方案搭建分布式计算集群。[0003] 现有技术存在的问题是,在大规模的Hadoop集群上进行0LAPOn-Line八的1丫1:;[〇31?1'0〇688;[1^,联机分析处理任务时,有时候其计算时间会超过1天甚至花费更长的时间,由于在Hadoop的Mapreduce方案中,所有的mapper结束是shuffle计算开始的barrier,而reduce计算很多时候也是后面merge或者compute的计算的barrier,所以最后一个执行结束的mapper或者reducer将是整个计算的结束,尤其是前者由于是中间输出对整个时间影响很大,但是对于当前hadoop的调度策略,如果计算的任务已经开展,那么mapper和reducer的数量将不能够动态调整,即再执行槽位bucket安排后不可再调整。发明内容[0004] 本发明旨在至少解决上述技术问题之一。[0005] 为此,本发明的一个目的在于提出一种可以保证调度的任务尽快完成且极大地提升集群性能的调节mapper在多核上执行的方法。[00〇6] 本发明的另一目的在于提出一种调节mapper在多核上执行的装置。[00〇7] 为了实现上述目的,根据本发明的第一方面实施例的调节mapper在多核上执行的方法包括以下步骤:监控每个mapper的平均处理速度;将所述每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper;确定所述速度慢的mapper所在的机器上是否有空闲资源;以及如果是,则将所述速度慢的mapper的单线程处理拆分成多线程处理,并将所述多线程处理分配到所述多核上执行。[00〇8] 根据本发明实施例的调节mapper在多核上执行的方法,在速度慢的mapper对应机器存在多余资源的情况下,将该mapper的单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行,由此可以保证调度的任务尽快完成,整个响应计算的过程可以节约大量时间,极大地提升了集群性能。[0009] 为了实现上述目的,根据本发明的第二方面实施例的包括调节mapper在多核上执行的装置包括:监控模块,所述监控模块用于监控每个mapper的平均处理速度;比较模块,所述比较模块用于将所述每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper;确定模块,所述确定模块用于确定所述速度慢的mapper所在的机器上是否有空闲资源;以及拆分模块,所述拆分模块用于在有空闲资源的情况下,将所述速度慢的mapper的单线程处理拆分成多线程处理,并将所述多线程处理分配到所述多核上执行。[001〇] 根据本发明实施例的调节mapper在多核上执行的装置,根据确定模块确定速度慢的mapper存在多余资源的情况,然后通过拆分单元将其单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行,由此可以保证调度的任务尽快完成,整个响应计算的过程可以节约大量时间,极大地提升了集群性能。[0011] 本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。附图说明[0012] 本发明上述的和或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,[0013] 图1是根据本发明一个实施例的调节mapper在多核上执行的方法的流程图;[〇〇14]图2是根据本发明一个实施例的调节mapper在多核上执行的方法的流程图;[〇〇15]图3是根据本发明一个实施例的调节mapper在多核上执行的装置的结构框图;以及[〇〇16]图4是根据本发明一个实施例的调节mapper在多核上执行的装置的结构框图。具体实施方式[0017] 下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。[0018] 在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。[0019] 流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。[0020] 下面参考附图描述根据本发明实施例的调节mapper在多核上执行的方法。[0〇21] —种调节mapper在多核上执行的方法,包括以下步骤:监控每个mapper的平均处理速度;将每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper;确定速度慢的mapper所在的机器上是否有空闲资源;以及如果是,则将速度慢的mapper的单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行。[〇〇22]图1是根据本发明一个实施例的调节mapper在多核上执行的方法的流程图。[0〇23]如图1所示,根据本发明实施例的调节mapper在多核上执行的方法包括下述步骤。[0024] 步骤S101,监控每个mapper的平均处理速度。[0〇25] 在本发明的一个实施例中,监控每个mapper的平均处理速度的步骤包括根据每个mapper的输入总量、已经处理的输入量和已经花费的时间计算出每个mapper的平均处理速度。[0026] 具体地,在Hadoop的架构下包括Mapreduce引擎,该Mapreduce引擎由JobTrackers和TaskTrackers组成,JobTracker为一个master服务,负责管理调度系统中所有作业,是系统分配任务的核心,TaskTracker为多个运行于节点的slaver服务,具体负责执行用户定义操作,其中,系统中的每个作业被分割为任务集,包括mapper和reducer任务,每个TaskTracker可以管理节点上的多个mapper。更具体地,TaskTracker在执行过程中收集所管理的每个mapper的输入总量、已经处理的输入量、剩余的量和已经花费的时间等,并根据所收集的每个mapper的输入总量、已经处理的输入量和已经花费的时间计算每个mapper的平均处理速度,再将所管理的每个mapper的输入总量、已经处理的输入量、剩余的量、已经花费的时间以及平均处理速度发送至JobTracker,由此JobTracker完成监控每个mapper的平均处理速度。应当理解,每个mapper的平均速度也可以根据实际情况在JobTracker计算完成。[0027] 步骤S102,将每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper。[0〇28] 在本发明的一个实施例中,通过用每个mapper的平均处理速度之和除以mapper的数目得到全局的mapper的平均处理速度。[0029] 具体地,通过JobTracker监控每个mapper的平均处理速度,再根据所监控到的每个mapper的平均处理速度之和除以mapper的数目获得全局的mapper的平均处理速度,然后将每个mapper的平均处理速度与全局的mapper的平均处理速度相比较,将平均处理速度小于全局mapper的平均处理速度的mapper确定为速度慢的mapperslowmapper,同样也可以根据经验、统计等结果设置一个阈值,将平均处理速度与全局mapper的平均处理速度相比差值大于该阈值的mapper确定为速度慢的mapper。[0〇3〇] 步骤S103,确定速度慢的mapper所在的机器上是否有空闲资源。[0〇31] 具体地,在JobTracker确定速度慢的mapper之后,然后JobTracker再向该速度慢的mapper对应机器上的resourcemanager发起询问,询问本机器是否有空闲资源。[〇〇32] 步骤S104,如果是,则将速度慢的mapper的单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行。[0〇33]具体地,如果resourcemanager确认本机器有空闲资源,将向本机器的TaskTracker发送一个split请求即线程处理拆分请求,TaskTracker将该请求传送至该速度慢的mapper,该速度慢的mapper执行split请求,将单线程处理拆分成多线程处理,同时将多线程处理分配到多核上执行。[0〇34] 在本发明的一个实施例中,每个mapper支持split的接口。[〇〇35] 在本发明的一个实施例中,多线程处理在多核上执行时,采用无锁操作。由此以占用较多的CHJ换取较高的10利用率。[0〇36] 在本发明的一个实施例中,每个mapper的输入支持lseek。以便于各个线程处理一定大小的数据块,并且输入流可以形成List〈in逐一处理。[0〇37] 在本发明的一个实施例中,如果确定速度慢的mapper所在的机器上没有空闲资源,则继续等待。[0〇38] 根据本发明实施例的调节mapper在多核上执行的方法,在速度慢的mapper对应机器存在多余资源的情况下,将该mapper的单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行,由此可以保证调度的任务尽快完成,整个响应计算的过程可以节约大量时间,极大地提升了集群性能。[〇〇39]图2是根据本发明一个实施例的调节mapper在多核上执行的方法的流程图。[〇〇4〇]如图2所示,根据本发明实施例的调节mapper在多核上执行的方法包括下述步骤。[〇〇41] 步骤S201,监控每个mapper的平均处理速度。[0〇42] 在本发明的一个实施例中,监控每个mapper的平均处理速度的步骤包括根据每个mapper的输入总量、已经处理的输入量和已经花费的时间计算出每个mapper的平均处理速度。[0043] 具体地,在Hadoop的架构下包括Mapreduce引擎,该Mapreduce引擎由JobTrackers和TaskTrackers组成,JobTracker为一个master服务,负责管理调度系统中所有作业,是系统分配任务的核心,TaskTracker为多个运行于节点的slaver服务,具体负责执行用户定义操作,其中,系统中的每个作业被分割为任务集,包括mapper和reducer任务,每个TaskTracker可以管理节点上的多个mapper。更具体地,TaskTracker在执行过程中收集所管理的每个mapper的输入总量、已经处理的输入量、剩余的量和已经花费的时间等,并根据所收集的每个mapper的输入总量、已经处理的输入量和已经花费的时间计算每个mapper的平均处理速度,再将所管理的每个mapper的输入总量、已经处理的输入量、剩余的量、已经花费的时间以及平均处理速度发送至JobTracker,由此JobTracker完成监控每个mapper的平均处理速度。应当理解,每个mapper的平均速度也可以根据实际情况在JobTracker计算完成。[0044] 步骤S202,将每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper。[0045] 在本发明的一个实施例中,通过用每个mapper的平均处理速度之和除以mapper的数目得到全局的mapper的平均处理速度。[0046] 具体地,通过JobTracker监控每个mapper的平均处理速度,再根据所监控到的每个mapper的平均处理速度之和除以mapper的数目获得全局的mapper的平均处理速度,然后将每个mapper的平均处理速度与全局的mapper的平均处理速度相比较,将平均处理速度小于全局mapper的平均处理速度的mapper确定为速度慢的mapperslowmapper,同样也可以根据经验、统计等结果设置一个阈值,将平均处理速度与全局mapper的平均处理速度相比差值大于该阈值的mapper确定为速度慢的mapper。[0047] 步骤S203,确定速度慢的mapper所在的机器上是否有空闲资源。[0〇48] 具体地,在JobTracker确定速度慢的mapper之后,然后JobTracker再向该速度慢的mapper对应机器上的resourcemanager发起询问,询问本机器是否有空闲资源。[〇〇49] 步骤S204,如果是,则将速度慢的mapper的单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行。[0050]具体地,如果resourcemanager确认本机器有空闲资源,将向本机器的TaskTracker发送一个split请求即线程处理拆分请求,TaskTracker将该请求传送至该速度慢的mapper,该速度慢的mapper执行split请求,将单线程处理拆分成多线程处理,同时将多线程处理分配到多核上执行。[0〇51]在本发明的一个实施例中,每个mapper支持split的接口。[〇〇52]在本发明的一个实施例中,多线程处理在多核上执行时,采用无锁操作。由此以占用较多的CHJ换取较高的10利用率。[0〇53]在本发明的一个实施例中,每个mapper的输入支持lseek。以便于各个线程处理一定大小的数据块,并且输入流可以形成List〈in逐一处理。[00M]在本发明的一个实施例中,如果确定速度慢的mapper所在的机器上没有空闲资源,则继续等待。[〇〇55] 步骤S205,将多线程合并为单线程。[0〇56]具体地,在JobTrackers需要的情况下,将正在进行多线程执行的mapper做线程归一处理即merge,将多个线程执行合并为单线程执行。[〇〇57]根据本发明实施例的调节mapper在多核上执行的方法,可以根据具体需要将多个线程合并为单线程执行。[〇〇58]下面参考附图描述根据本发明实施例的调节mapper在多核上执行的装置。[0059] —种调节mapper在多核上执行的装置,包括:监控模块,监控模块用于监控每个mapper的平均处理速度;比较模块,比较模块用于将每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper;确定模块,确定模块用于确定速度慢的mapper所在的机器上是否有空闲资源;以及拆分模块,拆分模块用于在有空闲资源的情况下,将速度慢的mapper的单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行。[0060] 图3是根据本发明一个实施例的调节mapper在多核上执行的装置的结构框图。[〇〇61]如图3所示,根据本发明实施例的调节mapper在多核上执行的装置,包括监控模块100、比较模块200、确定模块300和拆分模块400。[0062]具体地,监控模块100用于监控每个mapper的平均处理速度。[〇〇63]在本发明的一个实施例中,监控模块100用于根据每个mapper的输入总量、已经处理的输入量和已经花费的时间计算出每个mapper的平均处理速度。[0064]更具体地,在Hadoop的架构下包括Mapreduce引擎,该Mapreduce引擎由JobTrackers和TaskTrackers组成,JobTrackerS—个master服务,负责管理调度系统中所有作业,是系统分配任务的核心,TaskTracker为多个运行于节点的slaver服务,具体负责执行用户定义操作,其中,系统中的每个作业被分割为任务集,包括mapper和reducer任务,每个TaskTracker可以管理节点上的多个mapper。监控模块100使用JobTracker和TaskTracker完成监控每个mapper的平均处理速度,TaskTracker在执行过程中收集所管理的每个mapper的输入总量、已经处理的输入量、剩余的量和已经花费的时间等,并根据所收集的每个mapper的输入总量、已经处理的输入量和已经花费的时间计算每个mapper的平均处理速度,再将所管理的每个mapper的输入总量、已经处理的输入量、剩余的量、已经花费的时间以及平均处理速度发送至JobTracker,由此监控模块100完成监控每个mapper的平均处理速度。应当理解,每个mapper的平均速度也可以根据实际情况在JobTracker计算完成。[0〇65] 比较模块200用于将每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper。[0〇66] 在本发明的一个实施例中,通过用每个mapper的平均处理速度之和除以mapper的数目得到全局的mapper的平均处理速度。[0067] 更具体地,监控模块100通过JobTracker和TaskTracker监控每个mapper的平均处理速度,再根据所监控的每个mapper的平均处理速度之和除以mapper的数目获得全局的mapper的平均处理速度,然后比较模块200通过JobTracker将每个mapper的平均处理速度与全局的mapper的平均处理速度想比较,将平均处理速度小于全局mapper的平均处理速度的mapper确定为速度慢的mapperslowmapper,同样也可以根据经验、统计等结果设置一个阈值,比较模块200将平均处理速度与全局mapper的平均处理速度相比差值大于该阈值的mapper确定为速度慢的mapper。[0〇68] 确定模块300用于确定速度慢的mapper所在的机器上是否有空闲资源。[0〇69] 更具体地,比较模块200通过JobTracker确定速度慢的mapper之后,确定模块300再通过JobTracker向该速度慢的mapper对应机器上的resourcemanager发起询问,询问本机器是否有空闲资源。[0070] 拆分模块400用于在有空闲资源的情况下,将速度慢的mapper的单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行。[0〇71] 更具体地,如果resourcemanager确认本机器有空闲资源,通过拆分模块400向本机器的TaskTracker发送一个split请求即线程处理拆分请求,TaskTracker将该请求传送至该速度慢的mapper,该速度慢的mapper执行split请求,将单线程处理拆分成多线程处理,同时将多线程处理分配到多核上执行。[0〇72] 在本发明的一个实施例中,每个mapper支持split的接口。[〇〇73] 在本发明的一个实施例中,多线程处理在多核上执行时,采用无锁操作。由此以占用更多的CHJ换取较高的10利用率。[0〇74] 在本发明的一个实施例中,每个mapper的输入支持lseek。由此以便于各个线程处理一定大小的数据库,并且输入流可以形成List〈in逐一处理。[0〇75] 在本发明的一个实施例中,如果确定模块300确定速度慢的mapper所在的机器上没有空闲资源,则继续等待。[0〇76] 根据本发明实施例的调节mapper在多核上执行的装置,根据确定模块确定速度慢的mapper存在多余资源的情况,然后通过拆分单元将其单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行,由此可以保证调度的任务尽快完成,整个响应计算的过程可以节约大量时间,极大地提升了集群性能。[〇〇77]图4是根据本发明一个实施例的调节mapper在多核上执行的装置的结构框图。[〇〇78]如图4所示,根据本发明实施例的调节mapper在多核上执行的装置,包括监控模块100、比较模块200、确定模块300、拆分模块400和合并模块500。[0〇79] 具体地,监控模块100用于监控每个mapper的平均处理速度。比较模块200用于将每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper。确定模块300用于确定速度慢的mapper所在的机器上是否有空闲资源。拆分模块400用于在有空闲资源的情况下,将速度慢的mapper的单线程处理拆分成多线程处理,并将多线程处理分配到多核上执行。合并模块500用于将多线程合并为单线程。[0〇8〇]更具体地,合并模块500根据JobTrackers的需要情况,将正在进行多线程执行的mapper做线程归一处理即merge,将多个线程执行合并为单线程执行。[〇〇81]根据本发明实施例的调节mapper在多核上执行的装置,通过合并模块可以根据具体需要将多个线程合并为单线程执行。[〇〇82]应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列PGA,现场可编程门阵列FPGA等。[0083] 在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。[0084] 尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同限定。
权利要求:1.一种调节mapper在多核上执行的方法,其特征在于,在Hadoop的架构下包括Mapreduce弓丨擎,所述Mapreduce弓丨擎由JobTrackers和TaskTrackers组成,所述TaskTracker用于管理节点上的多个mapper,所述方法包括以下步骤:监控每个mapper的平均处理速度;将所述每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper;确定所述速度慢的mapper所在的机器上是否有空闲资源;以及如果是,则将所述速度慢的mapper的单线程处理拆分成多线程处理,并将所述多线程处理分配到所述多核上执行。2.根据权利要求1所述的方法,其特征在于,进一步包括步骤:将所述多线程合并为单线程。3.根据权利要求1或2所述的方法,其特征在于,所述多线程处理在所述多核上执行时,采用无锁操作。4.根据权利要求1或2所述的方法,其特征在于,监控每个mapper的平均处理速度的步骤包括根据所述每个mapper的输入总量、已经处理的输入量和已经花费的时间计算出所述每个mapper的平均处理速度。5.根据权利要求4所述的方法,其特征在于,通过用所述每个mapper的平均处理速度之和除以mapper的数目得到全局的mapper的平均处理速度。6.根据权利要求4所述的方法,其特征在于,所述每个mapper的输入支持lseek。7.—种调节mapper在多核上执行的装置,其特征在于,在Hadoop的架构下包括Mapreduce弓丨擎,所述Mapreduce弓丨擎由JobTrackers和TaskTrackers组成,所述TaskTracker用于管理节点上的多个mapper,所述装置包括:监控模块,所述监控模块用于监控每个mapper的平均处理速度;比较模块,所述比较模块用于将所述每个mapper的平均处理速度与全局的mapper的平均处理速度进行比较,以确定速度慢的mapper;确定模块,所述确定模块用于确定所述速度慢的mapper所在的机器上是否有空闲资源;以及拆分模块,所述拆分模块用于在有空闲资源的情况下,将所述速度慢的mapper的单线程处理拆分成多线程处理,并将所述多线程处理分配到所述多核上执行。8.根据权利要求7所述的装置,其特征在于,进一步包括:合并模块,所述合并模块用于将所述多线程合并为单线程。9.根据权利要求7或8所述的装置,其特征在于,所述多线程处理在所述多核上执行时,采用无锁操作。10•根据权利要求7或8所述的装置,其特征在于,所述监控模块用于根据每个mapper的输入总量、已经处理的输入量和已经花费的时间计算出所述每个mapper的平均处理速度。11.根据权利要求10所述的装置,其特征在于,通过用所述每个mapper的平均处理速度之和除以mapper的数目得到全局的mapper的平均处理速度。12.根据权利要求10所述的装置,其特征在于,所述每个mapper的输入支持lseek。
百度查询: 百度在线网络技术(北京)有限公司 调节mapper在多核上执行的方法及装置
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。