一种时序大数据的加载方法
技术领域
本发明涉及大数据领域,尤其涉及一种时序大数据的加载方法。
背景技术
随着工业化、信息化的不断发展,大型流程工业企业在生产信息化过程中会产生越来越多的海量历史时序数据。以电力系统为例,一方面是测点规模越来越大,预计将达到千万级甚至亿级以上;另一方面是历史时序数据量规模越来越大,预计将达到PB字节以上,这对时序数据库的处理规模、处理速度提出了更高的要求。
近年来,电力行业的应用系统使用大数据技术实现数据存储、数据分析和数据挖掘。时序数据作为电力行业重要的数据之一,必须可在大数据环境下访问,以保证应用系统的业务完整性。时序数据库是一种专用于存储时序数据的数据库。在大数据环境下,时序数据库的数据查询更为频繁,查询的数据量更为庞大。因此,在时序数据库连接器不支持本地化计算的情况下,时序数据库连接器读取时序数据时,网络传输很容易成为瓶颈,影响时序数据查询性能。
发明内容
本发明针对在时序数据库连接器不支持本地化计算的情况下,时序数据库连接器读取时序数据时,网络传输很容易成为瓶颈,影响时序数据查询性能的问题,提出了一种时序大数据的加载方法。
本发明所提出的技术方案如下:
本发明提出了一种时序大数据的加载方法,包括以下步骤:
步骤S1、获取表扫描请求命令,得到表信息和查询条件;
步骤S2、分析表信息和查询条件,得到表扫描所涉及的测点;然后,通过查询时序数据库的元数据,得到表扫描所涉及的测点所在机器的地址信息;再根据每个测点所在机器的地址信息,将同一机器的测点分为一测点分组;对每个测点分组创建一表扫描请求子命令;
步骤S3、执行所有的表扫描请求子命令,从而得到时序数据。
本发明上述的时序大数据的加载方法中,是通过Presto实现;Presto包括多个Worker节点;该多个Worker节点部署在多个机器上,每个机器上具有至少一个Worker节点,每个机器上的Worker节点用于执行与该机器所涉及的测点分组对应的表扫描请求子命令。
本发明上述的时序大数据的加载方法中,是通过Presto实现;Presto包括多个Worker节点;该多个Worker节点部署在多个机器上;所述步骤S3包括:获取与表扫描请求子命令具有相同地址的Worker节点;若获取到所述与表扫描请求子命令具有相同地址的Worker节点,则采用该Worker节点执行该表扫描请求子命令;若没有获取到所述与表扫描请求子命令具有相同地址的Worker节点,则获取表扫描请求子命令所涉及的机器上的Worker节点,若获取到所述表扫描请求子命令所涉及的机器上的Worker节点,则采用该Worker节点执行该表扫描请求子命令,若没有获取到所述表扫描请求子命令所涉及的机器上的Worker节点,则随机采用其他机器上的Worker节点执行该表扫描请求子命令。
本发明上述的时序大数据的加载方法中,在所述步骤S2中,通过Presto的表扫描拆分接口实现根据所述机器地址信息,将同一机器的测点分为一测点分组;对每个测点分组创建一表扫描请求子命令。
本发明上述的时序大数据的加载方法中,查询条件包括测点标识的范围和测点时标的范围。
本发明上述的时序大数据的加载方法中,测点标识的范围为测点标识的集合或测点标识的区间。
本发明的时序大数据的加载方法通过Presto尽可能地使一个Worker节点只读取一个机器上的时序数据(如图4所示),从而降低了查询时序数据所需的网络带宽消耗和数据传输耗时,从而消除网络传输瓶颈,整体提升了查询时序数据的性能,避免了单个Worker节点必须从多个机器的时序数据库服务读取时序数据(如图5所示),致使大量时序数据必须通过网络传输,这一方面消耗大量带宽,另一方面需要较长的网络传输耗时,最终导致查询时序数据性能差。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1示出了本发明实施例的时序大数据加载方法的流程图;
图2示出了Presto的架构图;
图3示出了Presto中的Worker节点的部署示意图;
图4示出了图1所示的时序大数据加载方法的数据访问示意图;
图5示出了现有技术所采用的时序大数据加载方法的数据访问示意图。
具体实施方式
本发明所要解决的技术问题是:在大数据环境下,时序数据库的数据查询更为频繁,查询的数据量更为庞大。因此,在时序数据库连接器不支持本地化计算的情况下,时序数据库连接器读取时序数据时,网络传输很容易成为瓶颈,影响时序数据查询性能。本发明就该技术问题而提出的技术思路是:获取表扫描请求命令,得到表信息和查询条件;分析表信息和查询条件,得到表扫描所涉及的测点;然后,通过查询时序数据库的元数据,得到表扫描所涉及的测点所在机器的地址信息;再根据每个测点所在机器的地址信息,将同一机器的测点分为一测点分组;对每个测点分组创建一表扫描请求子命令;执行所有的表扫描请求子命令,从而得到目标时序数据。
为了使本发明的技术目的、技术方案以及技术效果更为清楚,以便于本领域技术人员理解和实施本发明,下面将结合附图及具体实施例对本发明做进一步详细的说明。
本发明提出了一种时序大数据的加载方法,该加载方法是通过采用Presto实现的;Presto是一个开源的分布式大数据SQL引擎。作为一种通用的技术,Presto可整合多种数据源,例如HDFS、Hive、Cassandra和关系数据库(如MySQL)等。将多种数据源整合到Presto中,可对外提供统一的接口。特别地,Presto的SQL查询功能,可提供统一的视图,方便外部应用系统对多个数据源的数据进行关联查询。具体地,如图1所示,所述加载方法包括以下步骤:
步骤S1、获取表扫描请求命令,得到表信息和查询条件;
在本实施例中,表扫描(Table Scan)是指Presto读取数据源的表的数据;Presto通过Presto连接器整合各种数据源。Presto连接器是一个接口集合,主要包括元数据接口(Connector Metadata),表扫描拆分接口(Connector Split Manager)和表数据读取接口(Connector Page Source)等。在本步骤中,Presto通过表数据读取接口获取表扫描请求命令,从而得到表信息和查询条件;其中,表信息为表名。查询条件包括测点标识的范围和测点时标的范围,在这里,测点标识的范围为测点标识的集合或测点标识的区间,测点标识的集合即为一个或多个测点标识。测点标识的范围用于限定待加载时序数据的测点的空间范围;测点时标的范围用于限定待加载时序数据的时间范围。在电力行业,测点是监控设备的一个测量项;监控设备按一定的频率或一定的触发条件采集测点的数值;测点的数值即为时序数据;例如,一电压表每5分钟采集一线路的电压数值,其中,电压表即为监控设备,线路的电压即为测点,电压数值即为时序数据。时序数据的格式可以表达为“测点标识,测点时标,数值”。
步骤S2、分析表信息和查询条件,得到表扫描所涉及的测点;然后,通过查询时序数据库的元数据,得到表扫描所涉及的测点所在机器的地址信息;再根据每个测点所在机器的地址信息,将同一机器的测点分为一测点分组;对每个测点分组创建一表扫描请求子命令;
在本实施例中,Presto用于分析表信息和查询条件,得到表扫描所涉及的测点;然后,Presto通过元数据接口查询时序数据库的元数据;元数据(Metadata),又称中介数据、中继数据,用于描述数据属性,指示数据存储位置;时序数据库一般采用分布式架构,各机器上的时序数据库服务可独立存储测点及时序数据,即一个时序数据固定存储在时序数据库集群的某台机器上;通过查询时序数据库的元数据,可以得到表扫描所涉及的测点所在机器的地址信息(即存储位置信息)。
进一步地,一个机器所涉及的测点可以是一个,也可以是多个。
在本实施例中,是通过Presto的表扫描拆分接口实现根据所述机器地址信息,将同一机器的测点分为一测点分组;对每个测点分组创建一表扫描请求子命令;
步骤S3、执行所有的表扫描请求子命令,从而得到目标时序数据。
具体地,如图2所示,Presto采用了Master-Slave的架构,包括一个Coordinator节点,一个Discovery Server节点以及多个Worker节点。Discovery Server节点通常内嵌于Coordinator节点中。Coordinator负责解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。Worker节点负责实际执行查询扫描任务。Worker节点启动后向DiscoveryServer节点服务注册,Coordinator节点从Discovery Server节点获得可以正常工作的Worker节点信息。
进一步地,本发明的目标是降低网络传输带宽和网络传输耗时。本发明的关键点是Coordinator节点在任务调度阶段选择执行任务的Worker节点时,尽量选择时序数据所在机器的Worker节点或者靠近时序数据的Worker节点。在本实施例中,如图3所示,在本实施例中,该多个Worker节点部署在多个机器上,每个机器上具有至少一个Worker节点,每个机器上的Worker节点用于执行与该机器所涉及的测点分组对应的表扫描请求子命令,从而获取该机器上的目标时序数据。
具体地,在另一实施例中,Presto包括多个Worker节点;该多个Worker节点部署在多个机器上;步骤S3包括:获取与表扫描请求子命令具有相同地址的Worker节点;若获取到所述与表扫描请求子命令具有相同地址的Worker节点,则采用该Worker节点执行该表扫描请求子命令;若没有获取到所述与表扫描请求子命令具有相同地址的Worker节点,则获取表扫描请求子命令所涉及的机器上的Worker节点,若获取到所述表扫描请求子命令所涉及的机器上的Worker节点,则采用该Worker节点执行该表扫描请求子命令,若没有获取到所述表扫描请求子命令所涉及的机器上的Worker节点,则随机采用其他机器上的Worker节点执行该表扫描请求子命令。在这里,表扫描请求子命令所涉及的机器是指表扫描请求子命令所涉及测点的所在机器。
本发明的时序大数据的加载方法通过Presto尽可能地使一个Worker节点只读取一个机器上的时序数据(如图4所示),从而降低了查询时序数据所需的网络带宽消耗和数据传输耗时,从而消除网络传输瓶颈,整体提升了查询时序数据的性能,避免了单个Worker节点必须从多个机器的时序数据库服务读取时序数据(如图5所示),致使大量时序数据必须通过网络传输,这一方面消耗大量带宽,另一方面需要较长的网络传输耗时,最终导致查询时序数据性能差。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。