APP下载

基于Spark的舰船网络数据解析存储系统设计与实现∗

2017-12-25肖俊东赵开敏

舰船电子工程 2017年11期
关键词:舰船数据处理解析

张 靓 肖俊东 赵开敏

(1.海军驻大连426厂军事代表室 大连 116001)(2.中国舰船研究设计中心 武汉 430064)

基于Spark的舰船网络数据解析存储系统设计与实现∗

张 靓1肖俊东2赵开敏2

(1.海军驻大连426厂军事代表室 大连 116001)(2.中国舰船研究设计中心 武汉 430064)

针对传统舰船网络数据处理能力不足的现状,论文提出了基于Spark的数据处理解决方案。在Spark中根据XML解析二进制文件、创建HBase数据库并修改其自身的数据写入机制,开发了网页客户端。论文创新性的提出了Spark对二进制文件解析的一套算法,并在具体的试验过程中得以验证。在分布式架构下从数据处理、存储、应用等角度,实现了一个自动化的、稳定的、高性能的大规模数据处理系统。

数据处理;Spark;HBase;分布式架构

1 引言

随着舰船网络结构日趋复杂,舰船网络数据的数量也发生显著增加。数据量的增加对数据的捕获、处理和存储提出了较高的要求。传统的数据处理及存储解决方案在大数据面前已经显得力不从心,必须寻求更高效的舰船网络数据计算模式和数据存储模式。

本文根据Spark技术的优势,优化原有海量数据处理系统的计算单元MapReduce,设计HBase数据库结构,提高系统在各类数据场景下的数据处理能力。

2 基于Spark的海量舰船网络数据处理系统设计

2.1 方案总体设计

本次方案设计使用Hadoop中1+N的NameNo⁃de和DataNode部署模式[1]。用Spark替换MapRe⁃duce作为数据计算单元,得到舰船网络数据的各项属性信息,Spark的解析结果上传至HBase数据库中[2],Spark的解析依据采用的XML协议文件,同时优化解析XML文件的解析方式,在HBase中数据以数据表的形式对各类数据分类存储,方便数据的管理和访问。在写数据的过程中用批量写入的方式替换HBase默认的的单条写入方式。网站设计采用Tomcat+Servlet的形式,兼顾网站性能和系统整体代码的统一,方便开发与后期维护,故在设计中将网站基于Java的架构[3~5]。总体设计方案如图1所示。

2.2 软件工作流程

软件工作流程按照数据捕获—数据处理—数据展示的顺序进行,而在数据处理中流程又因为实际情况不同分为:单机数据处理和Hadoop集群处理。当数据捕获卡进行数据捕获时,系统对实时网络流量进行监控,当网络流量较小时网络数据并不上传集群,而由本机上的解析程序进行解析,当解析完成后,各个子节点独立写入数据到HBase。当网络流量较大时,Hadoop的守护进程被启动,数据以文件的形式存储到本地,当满足上传阈值后,文件被自动上传至分布式文件系统(HDFS),与此同时Spark作为计算单元开始获取HDFS中的文件进行解析,并将解析结果存入HBase中,以上两个环节中数据的读取和写入都可能发生在不同子节点之间。无论何种情况,数据写入HBase后,前端可以对数据的查询、过滤等操作[6]。

2.3 关键技术

本文关键技术主要包括流量平衡算法与数据批量载入两种。这两种技术在数据解析和数据存储时对系统的性能和稳定度产生了较大的提升。

1)流量平衡算法

当前流量等于当前总包数减去上一秒总包数。结合实际情况,定一固定阈值,当数据流量大于该阈值时,视当前为大流量情况,此时启动守护进程,将捕获到的数据上传至Hadoop集群;当数据流量小于该阈值时,视当前为小流量情况,捕获的数据存储在本机上,此时本机上的解析程序启动,开始对文件进行解析,并写入HBase分布式数据库当中。

通过流量平衡算法,整个网路数据解析存储系统可以兼顾大规模数据和小流量数据两种情况,不会出现用户长时间等待处理结果的情况。

2)数据批量载入

本文采用BulkLoad批量写入替代逐条写入方案。

Bulkload的工作流程主要分为以下三点:

(1)在Spark中产生两个Job;

(2)第一个Job进行正常的数据解析,当数据解析完成后,先将解析结果写到一个HDFS中临时文件当中;

(3)第二个Job接受前一个Job的输出结果,然后将其格式化为HFile,调用BulkLoad将生成的HFile导入到HBase中实现数据的批量导入[6~7]。

3 基于Spark的网络数据处理系统的实现

3.1 数据捕获模块的设计与实现

数据捕获网卡被布置到N台服务器上,且由NameNode服务器控制各台子节点的抓包起止。每个网卡抓取数据后存在本地文件夹中,以50M为一个文件大小,当文件夹达到500M容量时,文件一并上传至HDFS,本地文件夹清空。若网络长时间处于低流量情况则启用单机解析程序。

3.2 基于Spark的网络数据的解析策略及实现

网络数据来自于各种运行的设备,网络数据通过千兆高性能网卡捕获,捕获后数据格式化存储。每一个报文都被数据捕获网卡标记上以下信息:时间戳、数据段长度、版本号等。

针对小流量二进制文件采用服务器本地串行解析的方式。

针对大流量二进制文件采用基于Spark的处理策略,以key-value的形式存放在JavaPairRDD中,key为文件HDFS地址(字符串),value为二进制文件内容。

提前一次性读入所有协议XML数据,将XML完全解析,存入内存,方便解析时调用。

XML协议名由源IP、目的IP、信息单元标识信息组合而成,存储的数据根据各自对应的协议对网络数据进行解析。

3.3 HBase非关系型存储的优化设计实现

3.3.1 HBase表的结构的优化设计

1)Column-Family的优化设计

数据表设计为单列族,即数据表中只存在一个cf列族,而将数据类型信息和字段信息整合形成列名。

2)RowKey的设计

在默认行键(单纯时间戳)基础上,首位增加随机字符串,由于本系统需要处理的数据量较大,应使用较长的随机字符串,才能使数据较为均匀地分布在所有的RegionServer上。但另一方面,由于HBase的行键值与其查询效率有直接联系,行键过长将会导致搜索效率降低,影响用户体验。经反复对比实验,选择在时间戳前加上五位随机字符串[8]。

最终设计的HBase数据表的RowKey由5位随机数和当前数据时戳组成,每一列数据即代表一帧数据,它们的列名为源IP+目的IP+项目名,且同一列中的数据RowKey值相同。

3.3.2 HBse的性能优化

1)负载均衡机制

HBase表负载均衡机制选择全局计划,在有新节点加入时启动随机分配计划。全局计划默认每隔5min执行一次均衡操作,将所有RegionServer上的Region分配的更加均匀。随机分配计划则主要用于新加入的RegionServer,随机分配Region。

2)BulkLoad机制

采用BulkLoad批量写入替代原有的逐条写入方案。本文采用BulkLoad机制,将解析完成的数据统一输出到一个HFile文件中,当解析工作全部完成后,将整个文件一次性写入HBase。

3.4 基于Java的Web端实现

本文中用户对于数据查询要求比较多样,除了正常查询以外,还需要进行联合查询、模糊查询等个性化的查询需求。本文采用基于JSP和Servlet的Web端架构。

3.4.1 Web端与HBase的交互

HBase与Java的交互包括:数据库访问、带过滤条件的数据查询、根据键值进行单条数据查询、无条件的整表查询、列名前缀查询等。

3.4.2 Web端的实现

1)界面布局设计

页面的布局分为三个部分:筛选查询条件部分、网络数据展示部分、解析数据展示部分。

2)JSON数据

网络数据在Web端和Servlet之间采用JSON格式的数据传输[9]。

3)数据查询条件分析及接口设计

在Web端进行数据查询操作时,根据用户的需求不同,后台对HBase查询方式也会不一样,JSON数据的结构设计也会随之不同。根据用户要求,查询场景包括:全表查询、单数据集单条件查询、单数据集全集查询、单数据集多条件查询、多数据集联合查询、根据RowKey单条查询等。

4 测试结果与分析

4.1 基于Spark的分布式系统搭建

4.1.1 硬件网络拓扑结构

本次设计的分布式网络是由四台服务器、一台交换机、五台普通PC组成。按照Hadoop生态系统的要求,结合本次设计的实际情况,将四台服务器分配为NameNode和DataNode其数量分别为1和3。这四台服务器直连交换机,数据捕获网卡部署到每台 DataNode上[10~11]。

由于Spark所有的计算和临时文件的存储都是在内存中进行,所以整个集群对DataNode所部署的服务器内存要求较高。

4.1.2 软件版本

本次设计的Hadoop版本为Hadoop-2.2.0,Spark的版本为Spark1.2.1,HBase版本为HBase-0.98.11,jdk版本为jdk1.7,Scala版本为sca⁃la2.9.3[12]。

4.2 Spark处理二进制数据

4.2.1 不同Workers间Spark的计算效率

本节来进行论证,当Worker节点数分别为1和3时,Spark对网络数据处理速度的差别。图2(a)和图2(b)为13G数据(小数据量)和55G数据(大数据量)在Spark中进行处理时节点数与解析时间的关系图。

从上述实验结果可以看出,节点个数对Spark数据处理效率的影响主要是在数据规模较大的情况下,在这种情况下,解析效率往往与节点数成倍数关系。相反,当数据规模较小时,由于Spark初始化机制的存在,使得节点数目在解析效率中并起不到什么作用,甚至节点越多耗时越长。

4.2.2 Spark与MapReduce计算效率比较

图3表示Mapreduce和Spark两者处理55G数据所需要的时间长度对比,由图可知Spark的解析效率是MapReduce的22倍左右。

4.3 Web端数据查询实现

当用户数据开始写入HBase数据库后,Web端可以对数据库中的数据进行查询。针对数据库中数据进行各种方式的查询操作,如全表查询、模糊查询、联合查询、用户信息查询等。

图4为进行模糊查询时数据展示,左下角显示用户输入的查询条件,当用户只根据协议类型而不设置具体查询字段或值时,我们将这样的查询方式称之为模糊查询。查询结果展示在剧中的列表里,同时当单击某条数据后,屏幕右侧将会把该数据的具体字段及对应的字段值显示其中。

当用户进行查询时,图5反映了从点击“查询”按钮,到查询结果展示至前端所消耗的时间,如下图所示,消耗时间为209ms。之所以时延如此小是因为每次查询都是以某一具体的RowKey为基准,所以可以迅速定位查询起点。

当用户点击某行数据时,会再次进行查询数据库的操作,此次查询可将该数据所有字段返回给前端,如图6所示,等待响应时间为154ms。这里体现了HBase的行键优势,数据即为索引,用户可以某条数据的RowKey迅速找到该数据的完整信息。

5 结语

本次设计主要是对以MapReduce为数据处理单元的Hadoop系统进行了计算能力上的改进,以Spark计算单元替换MapReduce;将解析协议进行提前处理,并缓存在内存中,解析数据时从内存中访问解析文件,大大提高了解析效率;解析后文件批量导入,使数据存储效率提高,对HBase数据库的结构进行优化使数据查询速度更快;改变网站架构,采用了Tomcat+Servlet架构,使得整个系统更加适应Hadoop生态系统,数据的查询与返还在毫秒级别完成,用户体验良好。

[1]Wang Y,Ma C,Wang W,et al.An approach of fast datamanipulation in HDFS with supplementary mechanisms[J].Journal of Supercomputing,2015,71(5):1736-1753.

[2]李浩.基于Hadoop的云计算数据安全关键问题研究[D].上海:上海师范大学,2015.

[3]李曼,于青利.Spark生态系统走向成熟和应用[J].世界电信,2015(7):66-72.

[4]夏俊鸾,刘旭晖,邵赛赛等.Spark大数据处理技术[M].北京:电子工业出版社.2015.1-56.

[5]黎文阳.大数据处理模型Apache Spark研究[J].现代计算机:普及版,2015(3):55-60.

[6]董西成.Tez:运行在YARN上的DAG计算框架[J].程序员,2013(8):98-102.

[7]Xu J W,Liang J L.Research on a Distributed Storage Ap⁃plication with HBase[J].Advanced Materials Research,2013:631-632,1265-1269.

[8]Carstoiu D,Cernian A,Olteanu A.Hadoop Hbase-0.20.2 performance evaluation[C]//International Conference on New Trends in Information Science and Service Science.2010:84-87.

[9]张耘凡,柳平增,马鸿健,等.一种基于JSON的分布式系统架构[J].中国农机化学报,2015,36(5):255-257.

[10]陈含.基于Hadoop的海量数据存储和计算平台的设计与实现[D].武汉:武汉理工大学,2014.

[11]高官涛,郑小盈,宋应文,等.基于Spark MapR educ e框架的分布式渲染系统研究[J].软件导刊,2013(12):26-29.

[12]杨志伟,郑烇,王嵩,等.异构Spark集群下自适应任务调度策略[J].计算机工程,2016,42(1):31-35.

Design and Implementation of Ship Network Data Analysis and Storage System Based on Spark

ZHANG Liang1XIAO Jundong2ZHAO Kaimin2
(1.Naval Representative Office in Dalian 426 Factory,Dalian 116001)(2.China Ship Development and Design Center,Wuhan 430064)

Aiming at the shortage of data processing capability of traditional ship network,this paper proposes asolution of Spark-based data processing.It parses binary files according to XML in the Spark,creates the HBase database and modifies its own data writing mechanism,anddevelops the web client.This paper proposes a set of algorithms for Spark's analysis of binary files,which is validated in the concrete experiment.An automated,stable and high performance large-scale data processing system is real⁃izedfrom the aspects of data processing,storage and application under the distributed architecture。

data processing,Spark,HBase,distributed architecture

TP393

10.3969/j.issn.1672-9730.2017.11.023

Class Number TP393

2017年5月5日,

2017年6月17日

张靓,男,硕士研究生,工程师,研究方向:舰船建造及网络信息化。肖俊东,男,硕士研究生,工程师,研究方向:舰船电子与信息。赵开敏,男,硕士研究生,工程师,研究方向:舰船电子与信息。

猜你喜欢

舰船数据处理解析
舰船通信中的噪声消除研究
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
ILWT-EEMD数据处理的ELM滚动轴承故障诊断
三角函数解析式中ω的几种求法
舰船测风传感器安装位置数值仿真
睡梦解析仪
电竞初解析
相机解析
舰船腐蚀预防与控制系统工程
基于希尔伯特- 黄变换的去噪法在外测数据处理中的应用