公开/公告号CN113220775A
专利类型发明专利
公开/公告日2021-08-06
原文格式PDF
申请/专利权人 国家电网公司东北分部;中国科学院沈阳计算技术研究所有限公司;
申请/专利号CN202010194317.9
申请日2020-03-19
分类号G06F16/27(20190101);G06Q50/06(20120101);G06F16/25(20190101);
代理机构21002 沈阳科苑专利商标代理有限公司;
代理人许宗富
地址 110180 辽宁省沈阳市浑南新区营盘北街1号
入库时间 2023-06-19 12:07:15
技术领域
本发明涉及电力系统数据采集处理领域,具体的说是一种向Hbase中批量写入海量电力量测数据的方法。
背景技术
随着电网生态系统的不断发展与扩大,电力系统设备的数量也不断上涨,所产生的量测数据也非常庞大,仅数据监控及采集系统(SCADA)每月就会产生1TB的数据量,在进行大数据平台(Hadoop)建设数据传输中,通常批量加载数据到HBase集群有多种方式,比如通过HBase API进行批量写入数据、使用Sqoop工具批量导数到HBase集群、使用MapReduce批量导入等。这些方式,在导入数据的过程中,如果数据量过大,可能耗时会比较严重或者占用HBase集群资源较多(如磁盘IO、HBase Handler数等)。
发明内容
针对现有技术的不足,本发明提供一种向Hbase中批量写入海量电力量测数据的方法,解决了通过原有电力量测数据导入HBase集群耗时长,占用集群资源较多的问题。
本发明为实现上述目的所采用的技术方案是:
一种向Hbase中批量写入海量电力量测数据的方法,使用了JAVA编程对数据进行处理及HBaseBulkLoad的方式来进行海量数据批量写入到HBase集群,方法包括以下步骤:
步骤1:获取采集量测数据,将获取的数据按哈希表HashMap存储,再转存为txt文件格式作为数据源存储至分布式文件系统HDFS;
步骤2:结合采集量测数据在分布式平台Hadoop的分布式列式存储数据库Hbase中建立相对应的存储模型,用于存储各个测点在监测时间点的量测数据;
步骤3:读取Hadoop分布式文件系统HDFS的数据源,进行封装行键格式RowKey,然后将封装后的数据再回写到HDFS上,以HFile的文件形式存储到HDFS指定的目录中;
步骤4:使用HBaseBulkLoad将生成的Hfile文件导入到分布式列式存储数据库Hbase,实现电力数据的写入。
所述采集量测数据是对电力系统的电力设备或仪表进行量测并存储至达梦数据库,是通过JDBC的方式连接达梦数据库的。
所述哈希表HashMap格式为数组,数组元素存储有映射键值对Key-value,表示从Key到value的映射关系,按照量测数据的字段属性能查找到其实际值,Key为量测数据的字段属性;value为量测数据实际值。
所述再转存为txt文件格式作为数据源存储至Hadoop分布式文件系统HDFS为:
通过toString方法将哈希表数据以字符串形式生成txt文件,通过JAVA-API接口写入Hadoop分布式文件系统HDFS,所述Hadoop分布式文件系统HDFS分别运行在多个硬件终端上。
所述存储模型的格式包括:行键属性、测点ID;
行键格式RowKey为“采集时间.量测类型”;
量测数据的类型为按照实际数据进行设定的;
Hbase建表时可通过按采集时间将各数据表进行划分,即按年分表、按月在当前表中分区。
所述组装RowKey包括:
将取出的数据按照存储模型的行键格式组装RowKey,分配测点ID在对应行键格式RowKey的量测数据实际值value。
所述HFile文件的生成使用JAVA编写MapReduce程序来实现。
本发明具有以下有益效果及优点:
1.本发明传输的海量电力系统量测数据是完全与原有的电力系统量测数据相同,完全可以保证数据的准确性、全面性及可靠性;
2.需要使用的JAVA程序语法简单,代码可维护性高,运行效率高;
3.MapReduce生成的HFile文件为Hbase存储的底层文件,通过HBaseBulkLoad直接转移进入Hbase存储,处理效率高,与HBase API进行批量写入数据相比较,大大的减少同等数据量下传输所需时间成本及资源成本,经实践:数据监控及采集系统(SCADA)中D5000实时数据一个月平均为541G,通过HBase API进行批量写入数据需要30小时,而采用本方法写入数据只需要半个小时,数度提升了60倍。
4.传输过程简单,HBaseBulkLoad通过命令行就可以操作。
附图说明
图1是本发明的方法流程图;
图2是Hadoop平台中数据文件传输的流程图;
图3是Hbase模型设计说明。
具体实施方式
下面结合实施例对本发明做进一步的详细说明。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。在下面的描述中阐述了很多具体细节以便于充分理解本发明。但本发明能够以很多不同于在此描述的其他方式来实施,本领域技术人员可以在不违背发明内涵的情况下做类似改进,因此本发明不受下面公开的具体实施的限制。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。
如图1所示为本发明的方法流程图,如图2所示,为是Hadoop平台中数据文件传输的流程图。
首先将需要的电力系统电力设备或仪表的量测数据通过JAVA程序按HashMap格式转存为txt文件作为数据源存储在HDFS指定目录,结合数据结构在分布式列式存储(HBase)中建立相对应的存储模型。使用JAVA编写MapReduce程序来实现,在程序中读取第一步HDFS上准备好的数据源,进行自定义封装,组装RowKey,然后将封装后的数据再回写到HDFS上,以HFile的形式存储到HDFS指定的目录中。最后使用HBaseBulkLoad将生成的Hfile文件导入到HBase。
步骤1:获取需要的电力系统电力设备或仪表的采集量测数据,将获取数据通过JAVA程序按HashMap格式转存为txt文件作为数据源存储在HDFS指定目录;
根据国家电网采用的软件国产化的原则,电力量测数据大多存储在国产达梦数据库中。具体过程为:1、通过JAVA API连接HDFS(Hadoop分布式文件系统),在HDFS指定目录新建一个txt文件用以存储取出的海量数据。
2、通过JDBC连接达梦数据库,将数据取出并存入一个哈希表(HashMap)中,再通过toString方法将哈希表以字符串形式追加写入上一步新建的文件中。(HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。所谓Map其实就是保存了两个对象之间的映射关系的一种集合)
步骤2:结合采集量测数据的结构,在分布式列式存储(Hbase)中建立相对应的存储模型,如图3所示;
电力量测数据是一种具有明显时序性的数据,主要由仪表产生,采集周期为分钟级。例如电量系统中的电量表按天分表,每张表15分钟存储一次采集数据,共存储了全天96个时间点的数据,每一个时间点存储的量测类型包含电量有功值,电量无功值。
量测数据为:一种具有明显时序特性的数据,主要由电力设备或仪表产生,通常是一种具有明显时序性的数据,包括电量采集数据、实时监控SCADA数据、脱硫热负荷采集数据、风电采集数据、供电电压采集数据等。
建立存储模型:可以采用按年分表、按月分区的方式,从年和月的维度将数据分散在多台机器上进行分布式处理,实现批量数据的并行查询;通过行键的组合设计,从时间和量测类型的维度将同一时刻相同量测类型的数据存放在邻近的磁盘位置,实现断面数据的高效顺序访问;利用HBase对稀疏大表的处理优势,突破了传统数据库对列数的限制。从而可以采用大规模监测仪的测点ID作为列名,实现围绕电网设备的模型设计。
Hbase建表时可通过按年分表、按月分区,行键格式为“采集时间.量测类型”,分隔符为“.”,例如“01012017000000.VAL_P”表示2017年1月1日有功电量历史数据。列族只设一个为DATA,表列数设计与测点数量相等。表列名选用“测点ID”。例如“1052700101”表示ID为1052700101的测点。
数据转存文本文件:通过JAVA程序将获取的数据以一定格式转存为文本文件作为数据源上传到HDFS进行存储。
步骤3:生成HFile文件;
生成HFile文件:HFile文件的生成,可以使用MapReduce来进行实现,在JAVA程序中读取HDFS上准备好的数据源,按格式进行解析并自定义封装,组装RowKey,然后将封装后的数据再回写到HDFS上,以HFile的形式存储到HDFS指定的目录中。
组装RowKey:将取出的数据按照步骤2中Hbase建表的行键格式组装RowKey,分配value。
步骤4:使用HBaseBulkLoad将生成的Hfile文件导入到Hbase。
导入Hbase:使用BulkLoad的方式将生成的HFile文件导入到HBase集群中,有2种方式。一种是写JAVA代码实现导入,另一种是使用HBase命令进行导入。
代码实现:通过LoadIncrementalHFiles类来实现导入。
使用HBase命令:先将生成好的HFile文件迁移到目标集群(即HBase集群所在的HDFS上),然后再使用HBase命令进行导入。
机译: 一次写入信息存储介质,一种用于更新一次写入信息存储介质中存储的数据记录状态信息的方法,以及一种对其进行驱动的方法,特别是与减少记录单元的数量以有效地使用数据记录区域有关
机译: 将数据记录在记录介质上的方法,再现记录在具有驱动数据输入区域,数据区域的记录介质上的数据的方法以及从行中排开的数据驱动区域,用于再现和 /或相对于记录介质写入数据。用于记录和/或再现记录在记录介质中的数据的设备,其中驱动数据的输入区域,数据区域和驱动数据的驱动区域按顺序排列用于记录设备和/或复制的一行光学记录介质。该记录介质可以通过计算机进行读取,并由处理指令编码,以实现通过以下方式在记录介质上记录数据的方法:记录介质可以为我获取它,然后由处理指令编码的计算机读取该记录介质,以实现一种再现记录在具有保险的记录介质中的数据的方法以及驱动
机译: 具有记录功能的无线电通信设备,用于在非易失性存储器中写入数据的记录装置以及用于在非易失性存储器中写入数据的记录方法