尹承督
(32167 部队,拉萨 850000)
本文主要基于Hadoop 系统与SQL-Server2014 分别就无人机装备训练过程中的非结构化数据与结构化数据的存储进行了分析,鉴于部队信息化建设以传统数据仓库为主的实际,在此我们建立Hadoop 平台与传统数据仓库SQL-Server2014 协作的无人机装备训练数据存储系统,从而突破数据存储量扩展的瓶颈,同时增强多结构化数据的存储与分析处理的能力。
Sqoop 的含义本质是 Sql to Hadoop 的缩写[1]。Sqoop 适用于Hadoop 系统与结构化数据存储系统(本文采用SQLServer2014)之间进行数据交换的软件,本文Hadoop 平台与SQL-Server2014 之间进行数据的交换,主要依靠Sqoop进行数据的导入导出。其具体过程如图1、图2 所示。
1.1 数据导入过程 Sqoop 在导入数据的过程中主要依靠MapReduce 将任务通过规定的接口从数据库读取记录,然后写入HDFS 中的过程,这里所要求规定的关系型数据库支持接口是JDBC(Java DataBase Connectivity),因此在使用Sqoop 进行数据导入、导出时,接口都采用JDBC技术。数据导入过程如图1 所示。
具体数据导入步骤:
①导入数据库的指令由客户端在Sqoop,通过命令行方式输入,指令明确数据所在的服务器位置、数据库、数据表名称等相关信息。
图1 Sqoop 导入数据原理
②客户端接收到导入数据指令后,需要对导入的字段类型与列信息经JDBC 接口进行检索。Hadoop 支持的数据类型与检索类型映射,然后适用于MapReduce 作业的相应数据类型与生成数据表的类代码。
③类代码由Sqoop 根据字段类型与数据表列信息生成,其中包含有提取数据列的方法。
④经过Sqoop 的规划后的Map 任务,主要为了利用Hadoop 的导入性能与高效数据并行处理。
⑤数据库中读取数据依然通过JDBC 接口,相应节点执行Map 任务。
⑥按照用户的指定格式进行数据读取,备份存储在HDFS,大多以二进制或是文本形式存储。
具体Sqoop 进行无人机装备训练数据导入过程:
无人机装备训练管理原始数据保存在关系型数据库中,开源的数据导入工具Sqoop 可将数据导入Hadoop 中去,导入时命令[2]:
% sqoop import - connect jdbc:sql://192.168.1.100/EMP
>--table uavtrainingdatainfo-m 2
Sqoop 中的import 指令会运行一个MapReduce 作业,用于连接关系型数据库并从中读取数据。192.168.1.100 是服务器sql 的IP 地址,此处EMP(Enterprise Monitoring Platform)是监管数据库名称。uavtrainingdatainfo 是指无人机装备训练数据信息,(-m2)说明使用map 任务2 个。重复Sqoop 命令,将无人机装备训练数据表中数据导入到Hadoop 中。
1.2 数据导出过程 数据导出过程步骤如图2 所示[3]。
①导出数据库的指令由客户端在Sqoop,通过命令行方式输入,指令明确数据所在的服务器位置、数据库、数据表名称等相关信息。
②客户端接收到导出数据指令后,需要对导出的字段类型与列信息经JDBC 接口进行检索。Hadoop 支持的数据类型与检索类型映射,然后适用于MapReduce 作业的相应数据类型与生成数据表的类代码。
③Sqoop 由字段类型与数据表信息生成所需要导出的数据表相应的类代码,用于解析HDFS 文件,从而生成数据库记录,进而实现更新或是插入数据。
④同导入一样为了实现Hadoop 的高效数据并行处理与性能,Sqoop 需要对导出的数据执行Map 任务规划。
⑤从HDFS 中读取数据,由节点执行Map 任务,并解析相关记录。
⑥数据库中的数据以Insert 或是Update 的形式存储,通常采用一条请求对应插入或更新多条数据的方式进行。一般情况Sqoop 可以实现上千条记录同时一起提交。由于Sqoop 目前进行数据传输的机制存在的弊端,由于网络或是Map 任务提交失败,容易造成数据的重复记录现象。
图2 数据导出过程
为了方便无人机装备训练数据的查询,通过Sqoop 可以把Hive 查询的数据结果导出到传统关系型数据库中,从而可以节约装备管理人员或是部队指挥员对于Hive 在执行查询时的等待时间,因此在关系数据库管理系统中创建接受数据的目标表[4]:
Sqoop 导出命令:
查询关系型数据库中的数据,并按照count 降序排列
Select*form alarm by type order by count desc;
针对协作系统要实现数据采集、数据存储、数据应用的功能性需求,以及系统的通用性、易用性、可用性、健壮性、安全性和可扩展性等非功能性需求,将整个系统分为数据采集、数据存储、数据应用[3]三大模块。协作系统的三大模块功能如图3 所示。
此处采用程序流程图的形式介绍大数据与传统数据仓库协作的过程,为接下来的无人机装备训练数据仓库架设提供依据。如图4 所示。
通过对流程图分析,整个系统从数据采集到数据应用结束,整个过程需要依托Hadoop 平台的支撑,其中最重要的环节是数据存储、传统数据仓库与大数据平台的数据通信问题。
总的来说,大数据平台与传统数据仓库协作对无人机装备训练数据进行存储,主要是在Hadoop 平台下搭建,主要的关键软件技术是Apache 项目下的三大模块:Hadoop、Sqoop、Hive。系统可以实现多类型数据的采集,根据需要将数据存储在Hadoop 下Hive 数据仓库中,同时系统还能实现传统数据仓库与Hive 之间进行数据传输与通信,最关键的的是使用Sqoop 实现数据在两者之间的传输。传统数据仓库中的数据可以将许多长期不用的历史数据存入Hadoop 平台下,从而降低传统数据仓库的数据存储负担。而且可以实现对Hadoop 平台中数据的删除、增加、查询等操作。
图3 大数据与传统数据仓库协作系统功能模块图
图4 协作存储系统完整流程图
协作系统实质可以表示为SQL-Server2104+Sqoop+Hadoop=协作存储系统。前面介绍了协作系统主要由三大功能模块组成:数据采集、数据存储、数据应用。此处主要介绍数据的采集与存储问题。其中的关键技术是Sqoop 对于SQLServer2104 与Hadoop 之间如何进行数据通信。下面从模块功能进行介绍两者是如何进行协作的,如图5 所示。
3.1 数据采集方面
数据采集是数据获取的关键步骤,一般数据采集是分为传统数据库通过手动输入或是SQL语句及代码编写连接数据库实现数据收集,这些数据大多经过为经过处理的结构化数据为主。
另一种数据采集为大数据平台下的数据从文件系统以代码进行连接获取数据为主,这些数据不限大小、类型。
协作系统构建之后随之出现了第三种数据获取方式,Sqoop 可以实现传统关系型数据库与大数据平台下的文件系统数据的导入导出,大数据平台下的规范化数据可以直接导入关系型数据库搭建的数据仓库,同样,大数据平台只要有符合支持的数据接口,同样可以接受传统数据仓库的数据。
图5 协作系统的功能模块图
3.2 数据存储方面
在传统单节点数据仓库而言,数据主要存储在节点服务器上;大数据平台数据主要存储在分布式数据文件系统HDFS,数据存储平台以集群形式存在,数据存储的数据量以及数据类型都不受限制。本文研究的协作系统对于数据存储分工是:传统关系型数据仓库主要用于存储实时性结构化数据,其余数据均由大数据平台存储,当传统数据存储达到上限时,大数据平台可以利用Sqoop 分担传统数据库的压力。
本节对大数据存储系统进行搭建,继而完成协作平台的搭建,实现协作系统的数据采集、管理功能、数据应用等工作,由于系统设计主要以代码实现为主,具体代码设计过程简要介绍。
4.1 协作平台的搭建及相关工具的准备
本文针对无人机装备训练数据进行搭建一个Hadoop的小型集群,模拟无人机装备训练时各系统单元组的数据采集节点。
假设由五个节点组成,其中一个节点作为NameNode、辅助 NameNode 与 TaskTracker,其余四个节点作为DataNode 和TaskTracker。此外还有一台主机采用传统数据仓库进行存储结构化数据,用来存储Hive 数据仓库的元数据,Hadoop 数据仓库构架如图6 所示。
图6 Hadoop 与传统数据仓库协作结构示意图
大数据存储系统搭建的硬件准备工具还需要很多的hadoop 的相关工具,它们主要包括数据传输工具Sqoop、大数据的数据仓库工具Hive、传统数据仓库搭建工具SQL-Server2014、大数据hadoop 的开发软件eclipse 等等。具体见表 1 所示[5]。
4.2 相关软件在集群中的配置
首先对 Hive、Sqoop、MySQL 等软件的安装与配置,将 Hadoop、Hive、Sqoop、MySQL 在Master 节点上进行配置,Slave 节点上与Master 配置的Hadoop 一样进行配置,且只需配置Hadoop。进行正确配置后,然后进行正确测试后才能进行存储系统的搭建。在此首先介绍协作系统的环境准备过程,对于代码实现简单介绍。
表1 工具硬件软件准备表
①安装window7 专业版操作系统,设置主机名称(Master)、主机的 IP(192.168.100)地址,使用 SSH(Secure Shell Client)无密码登入;
②安装 JDK(Java Development Kit),Eclipse 软件,搭建Java 运行环境;大数据建立在Eclipse 的系统开发软件下,首先电脑安装 JDK(Java SE Development Kit),然后安装Eclipse 软件,打开Eclipse 软件,将Hadoop 的插件hadoop-eclipse-plugin-2.7.1.jar 解压在E:盘后加载Eclipse软件下的plugins 文件中,如图7 所示。
图7 加载Hadoop 插件过程图
加载插件后,重启Eclipse 软件,便可以运行HDFS Locations。最后搭建大数据平台过程,如图8 所示。
③安装Hadoop,在Hadoop-env.sh 文件中设置Java 环境,修改配置文件 master、slaves、cor-site.xml、mapred-site.xml、hafs-site.xml,加载 Hadoop 过程,如图 9 所示。
至此Hadoop 在eclipse 的环境下安装完毕,而且在eclipse 中集成了 HDFS 与 MapReduce 等 Hadoop 的分系统,完成了环境的配置,接下来便可以进行协作系统的开发了。这里需要注意一般Hadoop 是在Linux 系统下安装,此处对于在Window 系统下安装,需要修改相关配置与路径。
图8 搭建大数据Hadoop 数据仓库过程
图9 加载hadoop 系统
4.3 协作系统数据采集、管理、应用的实现
前面已经介绍了协作系统是由三大模块组成,其中数据应用模块由两部分组成:数据仓库的应用、大数据平台应用。此处从功能角度进行介绍协作系统的实现过程。
①数据采集过程。此处主要介绍传统数据仓库中的数据如何传输到大数据平台,将传统数据仓库中存放的历史数据、近期不常用的数据导入到大数据存储系统,解决单节点传统数据仓库的存储量瓶颈问题。这里协作存储主要用到Hadoop 的第三方工具模块Sqoop,在Sqoop 的协助下可以轻松的实现数据在关系数据库管理系统(RDBMS)与大数据平台Hadoop 之间的传输。
对于数据采集过程,主要是采用Sqoop 工具,实现关系型数据轻松导入到Hadoop 平台下的HBase 和Hive中。利用Java 语言实现大数据平台下数据导入到HDFS文件系统中,导出数据过程类似导入过程,具体代码如图10 所示。
上面介绍的是数据存储在HDFS 中,但是数据存储在HDFS 中不便于应用,结构化数据导入到Hive 中可以采用Hive-SQL 语言HSQL 进行管理,本质上也是SQL 语言实现MapReduce 的过程,结构化数据导入Hive 数据存储的具体代码如图11 所示。
以上完成数据采集系统的搭建,数据的具体采集过程在此不做详细介绍。
图10 数据采集代码1
图11 数据采集代码2
②数据管理、应用过程。无人机装备训练数据的种类多样,要实现系统处理各种数据的能力,导致数据采集后存储在HDFS 中,这对数据的应用不利,因此考虑数据存储在Hive 中,便于数据的管理。但是数据在大数据Hadoop 中存储,基于HDFS 的高容错、低硬件要求,数据归根到底还是存储在HDFS 中。数据应用主要是在数据采集、存储后的最终步骤,数据应用在此处分成传统数据仓库与大数据平台两部分。
无人机装备训练数据存储的协作系统的实现,是基于Hadoop 平台的分布式系统,其次是其他相关软件,如Hive、Sqoop 等的正确配置、安装、调试、测试后进行的。
Sqoop 作为Hadoop 的第三方模块,成功实现数据在关系型数据库与Hadoop 平台之间的导入与导出。成功解决了无人机装备训练数据存储的难题,协作系统的成功实现也是众多系统、软件的功能融合。本文研究的协作存储系统不仅适用于无人机装备训练数据的存储,同样适用于其它信息化装备训练数据的存储,尤其是未来联合作战中各种数据的存储,因此该协作系统为未来部队数据存储提供了技术支撑,为未来数据在部队中的实际应用提供了现实依据。