何 欢,李高云,旷生玉,江 果,王冠华
(中国电子科技集团公司第二十九研究所,四川成都 610036)
电子侦察是一种典型的无源侦察,即被动接收对方辐射源发射的电磁波信号,经信号级处理后得到电磁侦察数据,该数据属于典型的时序数据,内容包括时间戳、参数信息、空间信息和属性信息等。众多类型的侦察设备在各个时刻对当面范围目标进行探测,单日形成数亿条、TB 级的海量时间序列大数据,汇总后需要对其进行高效存储,并要求存储方式具有可扩展性,以应对数据量随时间与日俱增的需求,方便后续利用人工智能、大数据分析等新兴技术手段,提供高效的数据支撑,实现对数据潜在价值的挖掘和应用。
针对电磁大数据的特点和处理需求,臧维明等人研究了电磁大数据挖掘分析架构,提出了电磁大数据混合存储架构,满足多来源、多属性、多类型、多专业、小样本、开环非配合、博弈规则不确定等典型特征的数据存储治理需求。陈学渊等考虑电磁数据的跨域特性,研究了跨地域环境下的电磁数据分布式存储架构。业界Apache 基金会顶级项目HBase存储方案,基于HDFS的开源、分布式、列式数据存储,是对Google 的Big Table的 开 源 实 现,具 有 可 伸 缩、高 可靠性、高性能、行键单一索引等特点,作为一个成熟的非关系型数据库,已成功用于金融、交通、电网等大数据存储领域。上述研究为电磁侦察大数据存储设计提供了很好的借鉴。
本文首先分析了电磁侦察大数据的特点和关系型、非关系型数据库2 种存储方案的优劣,然后结合按目标、按区域和按时间范围查询的典型应用需求,讨论HBase 表设计的3 种方案,最后结合实际工程项目验证HBase 存储和查询大数据的有效性,旨在为电磁侦察大数据存储实现提供参考。
电磁侦察数据是典型的时序数据,内容包括时间戳、参数信息、空间信息和属性信息等。以雷达对抗为例,雷达对抗侦察设备实时接收雷达电磁波信号,从装备毫秒级中频、全脉冲处理,到区域、总部级关联、融合处理后,逐级积累形成TB 级、千万甚至上亿行的多源、异构和跨域的海量电磁侦察结论数据。本文主要讨论融合后的电磁侦察结论数据特点。海量电磁侦察数据表现出以下几方面的特征:
1)数据项维度繁多
电磁侦察数据在识别、关联和定位等处理后,通常能表征雷达射频、重复周期、脉宽、扫描周期等多种参数、型号、用途、工作模式等设备信息,搭载平台类型、型号、国别、敌我等属性信息,经度、维度、高度、速度、航向、航速等空间信息,处理时间、上报装备等元数据,使得电磁侦察数据表征维度广、内涵深。
2)数据量巨大
一个辐射源,通常被多个侦察设备以毫秒级的节拍截获形成全脉冲信号,每个设备对接收到的信号进行统一编号,并逐级上报到上一层处理系统。在上一层信息处理系统中,汇集所有电磁侦察数据,集合在一起形成海量历史侦察数据。随着多源异构侦察数据的积累,历史数据通常超过千万行,形成一张千万级甚至上亿行、几十列甚至上百列的大表。
3)数据项不规范
雷达体制多变、信号复杂,信号级的分选处理可能出现错误,导致参数解析不完整;关联性弱或者关联数据无法引入,导致空间信息的残缺;识别库的不完整也会使得型号、平台等属性信息无法得到。综合影响下,电磁侦察数据可能出现信息残缺、不一致的情况,需要完善的预处理和治理流程。残缺不完整的半结构化数据汇集成海量历史数据,使得数据整体上表现出稀疏二维矩阵的特点。
传统关系型数据库将数据集中存储在一个数据服务器中,存储能力有限且不易扩展。关系型数据库的事务性、完整性和规范性等特征使海量数据存储和查询时CPU 和IO 负载急速上升,成为应用的最大瓶颈。关系型数据库通常采用读写分离、缓存、更加昂贵的硬件、分库分表等方法部分地解决这些问题,但同时会引入降低一致性、删除辅助索引、运维困难等一系列新的问题。
关系型数据库需要根据数据特点预先明确数据结构,设计数据模式,在一定程度上,这种预先定义的方法限制了数据之间的关系、限定了数据存储的方式,而大数据挖掘分析的本质却是在预先不知道数据之间的关系的情况下,挖掘数据内涵,在分析过程中提取价值,即数据模式是在分析过程中确定的而不是预先确定的;其次,关系型数据库多用于回答确定性的问题,通过级联查询获取精确的结果,而电磁侦察大数据分析多用于通过相关分析得到数据之间隐藏的关联性,如空间和参数使用的联合关系等,并利用这种关联性进行预测;同时,多源异构的电磁侦察大数据通常是稀疏数据,如果利用关系型数据库按行存储,则每一行的数据缺项会造成大量的存储空间浪费。
关系型数据库在存储电磁侦察大数据时其设计方法有一定的局限性,并不适应于电磁侦察大数据的特点,而非关系型数据库HBase 从物理结构上看,通过一个主节点(master node)和个计算节点(data node)的分布式物理结构均衡海量数据存储和查询时的CPU 和IO 压力,使HBase 非常适用于存储半结构化、非结构化的具有上千万甚至上亿行、上百万列规模的海量数据,计算节点极易扩展,运维简便。与Hadoop、Spark 等常用分布式存储和计算平台的无缝集成,使应用能从HBase 中均衡地获取数据,加快分布式计算的速度。
面向大数据的存储方案可以采用关系型或者非关系型数据库,2 种方式各有特点,2 种数据存储方案比较如表1 所示。
表1 2 种数据存储方案比较
可见,从存储方式上分析,采用列式存储方式的非关系型数据库HBase 更契合电磁侦察大数据的前述特征,更符合大数据挖掘应用的理念要求,是存储海量电磁侦察数据的首选方式。从数据类型上分析,全脉冲数据、分选定位数据、合批关联数据等处理流程过程中的中间结论,在数据特点(维度多、量大、规范性差)和应用需求上,都与电磁侦察结论数据有相似性,所以使用HBase 作为存储方式具备一定的通用性。
作为一种典型的分布式非关系型数据库,HBase表设计并不遵循规范性等原则,其表结构主要由行键结构决定,行键作为索引键,数据内容随索引一起存储,且根据行键字节序按顺序物理地存储数据。通常根据数据的特点和应用查询的需求设计行键结构。行键设计的基本要求是从电磁侦察大数据的时、空、频、属性等众多特征中选择若干具有特异性的数据项设计行键,使每条数据的行键唯一;行键的设计使数据在存储和查询时IO 能均衡分布在集群的所有机器中,不造成数据热点;满足电磁侦察数据按时间递增、区域分布广、时空频多维度联合表征的特点,并根据查询的需求设计行键,满足快速查询数据的要求。以按型号、空间区域和时间范围三类典型数据查询需求为例,分别采用基于复合信息、Geohash 编码和预分区策略的行键设计方法,设计目标表、空间表和时间表,充分发挥HBase 的特点,提升存储和查询效率。
电磁侦察大数据应用中最常用的一类数据查询需求是根据目标型号查询目标的历史数据。为了能快速从海量多目标数据中快速定位到特定目标型号的数据,需要将目标型号作为行键的第一部分,满足按目标型号快速查询数据的需求。
根据电磁数据的特点,为了保证行键索引的唯一性,除了目标型号外,还需要将目标的时间戳、批号等数据的标签信息一起存储在复合行键中,保证由不同侦察站在不同时刻侦察到的关于不同目标的数据能相互区分,不会被存储到同一行中。
复合行键由多个部分组成,但各部分的长度不一致,为了能区分各个部分的内容,采用MD5 定长编码或者添加下划线的方式将复合行键的各个部分区分,使得查询时能准确区分复合行键的不同部分。以下划线区分的复合行键为例,目标表的行键设计为:平台型号_雷达型号_批号_时间戳_国家地区。加上列簇和稀疏列等信息,目标表的逻辑存储模型如图1所示。
图1 目标表逻辑存储模型图
复合行键的设计既考虑了存储时行键的唯一性,解决数据项重复的问题,又综合考虑了查询业务的特点,使有残缺项的海量数据在HBase 中能高效地存储和检索。
空间信息是电磁侦察数据的典型特征,按照任意闭合区域查询区域空间内的目标是电磁侦察大数据应用的另一种典型需求。
采用Geohash 编码来表征电磁侦察数据的空间信息。Geohash 编码将二维经纬度联合编码成一维字符串,数学模型为:
式中,表示经度,表示纬度,映射将二维的联合信息通过迭代算法映射到一维的编码表中,其典型特点是在一定的精度内将二维经纬度信息联合编码成一维字符串,并保证具有相同前缀的编码在地理位置上接近。每一个编码字符串都对应一个长方形区域,并保证前缀相同的Geohash 编码在同一片区域中,相同前缀的长度越长,距离越近,Geohash 编码示意如图2 所示。
图2 Geohash 编码示意图
Geohash 编码将二维的经纬度空间信息压缩编码为一维的字符串,使大量连续的空间点聚类到离散的空间网格中,将传统大数据量的空间位置数值运算变为空间网格集合的交集、并集等运算,减少计算量,可以用于空间位置建模和搜索等需求。
为了能进一步过滤在同一个区域内的不同目标,在复合行键中添加目标型号和时间戳等信息,即可使用更精确的条件快速查询到所需要的数据,如查询在某一个时间段、某一个区域内的出现过的特定型号目标的历史数据等,使得设计具有一定的灵活性。
综上所述,按下划线切分法设计空间表复合行键为:Geohash_平台型号_雷达型号_批号_时间戳。采用Geohash 编码作为复合行键的第一部分,根据HBase 按行键字节序顺序存储数据的特点,保证了目标位置相近的2 个点,它们物理存储也相邻,可以快速地查询地理位置邻近的数据。通过Geohash 编码描述数据的空间经纬度信息,配合HBase 的大数据存储能力,能有效地解决电磁侦察海量数据查询业务中典型的闭合区域和定点查询问题。
电磁侦察数据是一种典型的时序数据,其每一行代表了某一个时间点上的电磁数据详细信息。时间戳是典型的递增式数据,如不经过特殊处理而直接作为行键的第一部分,根据HBase 按行键顺序排序物理存储的特性,在存储时数据会全部涌向同一个存储节点(region server),造成存储热点。在查询时,按时间范围定位起始行键和终止行键,会局限在单个region查询所有数据,造成查询热点。热点使得存储和查询时不能利用集群中所有机器资源,使单台热点机器的CPU 和IO 急速上升。如果将时间戳通过MD5 编码后分散存储,虽然不会造成热点,但不能利用时间序列递增的特点来查询某一段时间范围内的数据,不满足业务查询的要求。
对于电磁侦察数据中时间戳这种递增数据格式,可采用基于预分区策略的行键设计方法。通常采用的预分区策略是加入前缀。前缀可以采用时间戳对集群数量取余的方法:
式 中,()表示时间戳,表示集群的机器数量,%表示求余运算。例如,集群共有3 台数据存储服务器,连续时间戳的数据会被分散到3 台region 进行存储,达到均衡存储的要求。按时间范围进行查询时,需要对以0、1、2 为前缀的region 同时发起请求,可以采用多线程的方法并行读取数据以获得更高的查询效率。求余运算使数据均衡地分布在集群中,但其扩展性不强。如果集群数量增加,则需要对所有数据重新按式(2)的运算得到新的前缀。对于可扩展性要求较高的场景,也可以采用一致性哈希方法来计算前缀。
电磁侦察数据具有时效性,近三个月的数据比三年前的数据更具有分析价值。为了使近期的数据比历史数据更快被查询到,除了对时间戳预分区外,还需要使用最大值减去时间戳:
该变换使连续递增的时间戳变为递减,HBase 按行键顺序物理存储数据的特性,使得近期时间的数据存储在更为久远的历史数据的前面,更易被获取到,满足快速查询具有时效性的电磁数据的需求。
综上所述,按下划线切分法设计时间表复合行键为:prefix_时间戳_平台型号_雷达型号_时间戳。其中,prefix 表示按取余或者按一致性哈希算法得到的行键前缀。基于预分区策略的行键设计方法通过增加前缀项,将海量数据均衡地分布在集群的所有机器中,能充分利用所有机器的CPU 和IO 资源,解决数据热点问题,加快存储和检索海量数据的效率。
上文针对3 种典型的查询需求,讨论了3 种表设计方法,每张表都与电磁侦察大数据一类独特的查询需求对应,并以此建立了3 张内容完全相同、仅行键不一致的表,这体现了HBase 为了快速查询的反规范化设计。若应用需要用参数列,如以射频值为查询主键,查询某个射频范围内的目标,则可以根据该查询需求设计新的表,将射频值设计在行键第一部分,以达到高效查询的目的。
在实际工程项目中,使用HBase 存储海量电磁侦察数据以验证其有效性。海量电磁侦察数据通过HBase 存储到分布式文件系统后,通常需要分布式计算框架和其他组件协同配合对数据进行二次开发,以满足特定的电磁侦察大数据应用需求,如开关机时间规律分析、目标协同配合分析等。基于HBase 的大数据存储和计算系统的典型结构如图3 所示。
图3 基于HBase 的典型应用架构图
Spark 内存计算框架或者Mapreduce 批处理框架可以将HBase 作为数据源,获取数据并在分布式集群中并行计算。同时,得益于HBase 的分布式数据存储和负载均衡能力,Spark 或者Mapreduce 计算负载可以分布在所有的集群服务器中,让“计算靠近数据”加快计算效率。通常采用Sqoop 作为ETL 工具,将数据从其他各类系统中导入HBase,在Zookeeper 的协调下,HBase 将数据均衡地存储到HDFS 分布式文件系统中,使得Spark 等分布式计算框架可以在Yarn 调度框架的调度下进行并行计算,计算结果通过Kafka 等消息中间件发送到特定组件并展现,完成整个电磁侦察大数据全生命周期的管理和应用。
在实际工程项目中,构建1 主3 从的HBase 集群,同时搭建对应的HDFS 和Spark 集群。在HBase 中存储近600 G 的历史侦察数据,行键设计按照上述分析原则执行。为对比分析HBase 存储和关系型数据存储的查询效率,按100 万条、500 万条和超过1 亿2 千万条设计单表存储量,按命中1 万条、10 万条数据对比两者的查询效率,如表2 所示。
表2 数据查询时间对比
受HBase 主从节点通信限制,在小数量、小命中量条件下,其查询效率不如传统关系型数据库,但随着单表数据容量和命中数据量的增加,HBase 逐渐表现其优势,其查询时间随数据量线性增加,且不会出现单表数据量过大而无法存储的现象。
时间查询效率反比与查询命中的数据量,正比与集群机器数量,三者之间的定性模型为:
式中,表示集群机器数量,表示命中数据量,φ()表示在集群规模为时查询个数据量的效率,即当数据急速增长时,通过增加集群机器数量,查询时间以O()的方式线性增长,满足扩展性要求。
通过3.2 节设计的空间表可以迅速地从HBase 中提取目标空间信息,并利用HBase 提供的Endpoint 扩展机制分布式地计算目标空间统计信息。Geohash 编码具有天然的空间聚类特点,可以在一定的精度下将目标运动的连续轨迹点转换为离散的空间网格。通过Geohash 精度控制网格的大小,使得Geohash 空间网格可以在一定程度上平滑轨迹,从而提取出目标运动骨干轨迹,以方便后续轨迹匹配等应用,如图4 所示。
图4 基于GeoHash 的轨迹提取图
图4 中展示了对2 个目标的运动轨迹提取Geohash 编码后形成的空间网格,通过比较2 个空间网格集合的交集可以计算得到2 个空间轨迹的重合度,无需进行时间对齐,极大地减小了空间位置的数值运算量,可以用于多目标空间关联应用。
实践证明,结合业务的特点设计行键,在HBase分布式集群中存储电磁侦察数据,速度快、效率高、易扩展,相比传统关系型数据库存储,基于HBase 的分布式存储能有效地解决海量电磁时序大数据的高效存储、检索和应用问题。
针对海量电磁时序侦察数据的特点,本文讨论了应用分布式列式数据库HBase 存储海量数据的表结构设计方案,针对按目标、按闭合区域和按时间三种典型的业务查询需求,详细设计了三种不同的表结构方案,并在实际工程项目中无缝集成Spark、Mapreduce 等分布式计算框架进行验证,结果表明在数据模式、应用方向和存储结构等方面,基于HBase 的分布式非关系型数据存储方案更贴近数据需求、查询需求和应用需求,解决了电磁侦察大数据近实时存储和按业务查询的效率问题,具有较重要的实用意义。■