基于虚拟化的水务分布式大数据存储平台设计

2019-07-13 06:40闫健卓高凯丽许红霞于涌川
水利信息化 2019年3期
关键词:水务结构化虚拟化

闫健卓,高凯丽,许红霞,于涌川

(北京工业大学信息学部,数字社区教育部工程研究中心,北京 100124)

0 引言

伴随着城市社会的发展和水务管理水平的提升,数据的多维化、实时化、精细化导致数据量变得极其巨大,水务数据具备数据源多、结构异构、种类复杂、分布不均、数据量大等特点,呈现出典型的大数据特征。由于水务数据具备典型的大数据特征,如果能够充分利用这种富有广度与深度的海量数据,可以帮助人们做出更加智能的决策[1]。随着智慧水务相关项目的推进,大量传感器被应用到水务环境监测中,数据量级、复杂程度极大提升。目前,北京市水务系统中心综合数据库包含水文水资源、水环境、供排节水等业务数据,数据量级在TB 级别。由于传统的水务数据管理多采用集中式存储管理模式,数据量的增长直接导致存储和查询速度方面的问题。传统的数据库须进行数据的压缩才能勉强满足现有 GB 数量级数据的需求,且这种方式会损失极大的信息量。另外,面对大量数据,传统关系型数据库查询会出现高延时的问题,无法满足业务需求。

目前采用的存储技术架构主要为 Google 存储架构[2],即,先在众多的服务器上搭建一个分布式文件系统,然后在这个分布式文件系统上实现相关的数据存储业务,甚至是再实现二级存储业务(如Bigtable)。但在这种架构中,硬件资源环境会出现服务器、磁盘扩展困难,业务中断修复时间长,系统安全性低,资源浪费等问题。

简而言之,分布式存储就是将数据分散存储到多个数据存储服务器上[3],往往采用分布式系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,具有高性能、多副本一致性、弹性扩展、存储系统标准化及支持分级存储等优点,可以解决水务大数据难存储,查询高延时等问题[4]。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程,是云计算中一种热门实用技术。Hadoop 是由 Apache 基金会开发的分布式系统基础架构,实现了一个分布式文件系统。

基于此,利用虚拟化技术、Hadoop 基础架构,设计水务分布式大数据存储平台(以下简称分布式平台),可以补充现有的技术短板,解决实际的水务数据存储的问题,为水务行业应对大数据时代的到来提供帮助,为未来水务行业对水务数据的分析提供基础的存储支撑。

1 分布式平台设计

1.1 分布式平台总体结构设计

本研究主要研究水务领域中的多源异构数据的整合,海量数据的存储迁移。设计的分布式平台包括以下3个部分:

1)虚拟化平台。虚拟化平台的建设目的是将上层分布式计算、业务应用等平台与底层硬件设施进行隔离,包含服务器虚拟化、虚拟机的资源分配管理。

2) Hadoop 集群。Hadoop 集群提供了 HDFS(Hadoop Distributed File System)分布式文件系统与 MapReduce 并行计算两大核心功能组件。本研究在虚拟化平台状况下对集群进行设计与适配,实现文件管理、并行计算、动态节点管理等功能。

3)数据存储迁移。当前水务信息化行业积累了大量的业务数据,需要迁移至新数据平台中,对多源异构的结构化数据进行统一的数据整合,设计编码规则,完善数据映射方式。该部分包括结构化数据存储、整合及迁移。

1.2 虚拟化平台设计

设计基于 VMware 的虚拟化平台,具体架构如图1所示。

图1 VMware 逻辑架构

虚拟化体系由下到上分为以下4层:

1)最底层为基础设施层,包括服务器、磁盘阵列和交换机等设备,是构建平台的基础;

2)第2层为程序服务层(VMware vSphere),提供基础架构服务,包括服务器、存储及网络等服务,并为应用服务层提供可用性、安全性、可扩展性服务;

3)第3层为中心管理层,即为中央管理器vCenter Server,帮助用户管理并分配资源池中抽象化的虚拟资源;

4)最顶层为应用服务层,主要是各种创建的虚拟机(VM)、vSphere 的人机交互界面,通过在该层创建并分配虚拟机,构成 Hadoop 集群的主从节点,并提供网络通信服务。

1.3 Hadoop 集群设计

1.3.1 Hadoop 架构的设计

采用 Hadoop 架构实现分布式存储与计算,架构设计图如图2所示,主要包括以下2个部分:

1)并行计算。MapReduce 并行计算能管理和调度整个集群中的节点,完成并行化程序的执行和数据处理,并让每个从节点尽可能对本地节点上的数据进行本地化计算,其中 JobTracker 负责管理和调度整个集群进行计算,TaskTracker 负责具体的数据计算。

2)分布式存储。HDFS 是基于节点存储的本地文件系统,提供大规模可扩展的分布式存储功能,在 Linux 操作系统上,NameNode 主控节点负责控制和管理整个分布式文件系统,DataNode 负责具体的数据存储。在实验测试中,Hadoop 系统中的其他子系统,如 HBase 和 Hive 等,将建立在 HDFS 分布式文件系统和 MapReduce 并行化计算框架之上。

图2 Hadoop 分布式数据存储与并行计算架构

1.3.2 基于 Hadoop 集群的功能模块

在 Hadoop 集群的环境上,根据数据需求,设计了以下3个子模块功能:

1)HDFS 文件管理接口。本模块主要实现HDFS 文件系统下的文件管理功能,包括文件的增删改查、目录维护、文件上传下载功能。

2)MapReduce 计算接口。本模块主要实现MapReduce 框架下的数据统计计算功能,包括记数、叠加、去重、查找最值、表格关联等功能。

3)动态节点。本模块实现 Hadoop 集群节点的动态配置,通过监测集群状态,动态增加或删除相应节点,将节点的负载与数据块的分布进行均衡,使集群中各数据子节点都处在相似的稳定运行的状态,提高分布式数据平台的健壮性与使用效率。

1.4 数据存储迁移设计

分布式存储对不同类型的数据采用不同的存储方式,非结构化数据存储由 HDFS 完成,通过Hadoop 集群功能接口,完善文件管理功能;结构化数据经由分布式数据库存储,在 HDFS 的上层利用Hive 和 HBase,通过建立虚表、索引、关联映射实现数据操作,如查询、并联查询、添加、删除等。数据迁移将历史数据迁移到新的平台中,根据数据多源异构的特点,设计数据整合功能,对数据进行统一综合管理。设计数据迁移功能,旨在实现数据从关系型数据库到分布式数据库之间的数据交互功能。

1.4.1 数据存储流程设计

根据水务数据的类别与特性,提出一种水务数据分布式存储流程,流程图如图3所示。程序首先执行数据的预处理环节,通过判断数据的完备性与标签,判断是否需要进行数据预处理,添加数据标签。然后判断数据类型是否为结构化数据,非结构化数据直接通过 HDFS 建立存储地址与索引进行存储,结构化数据则需要对数据存储结构和复杂程度进行分析。如元数据和基础数据等非结构化数据可直接通过 HDFS 进行存储,而结构化的关系型业务数据则通过 HBase 联合 Hive 应用的方式进行存储,最终实现数据的分布式存储流程。

1.4.2 结构化数据存储方案设计

在数据的存储过程中,HDFS 往往无法满足业务需求,而 Hive 与 HBase 都能在特定的情况下发挥特有的优势,为此将二者结合使用,提出一种新型的结构化数据存储方案。

图3 分布式数据存储流程图

Hive 与 HBase 特性分析[5]如表1所示,Hive与 HBase 的联合使用能够提高大数据平台的读取性能与执行效率[6],因此,二者联合使用非常有必要。

表1 Hive 与 HBase 特性分析

Hive 与 HBase 联合应用架构如图4所示,联合架构可以提供用户自行选择的入口,把 Hive 中的命令转换为 MapReduce 进行数据处理[7];或者依照 Hive-StorageHandler(存储处理器)到 HBase 的方式对 HDFS 中的数据进行操作;还可以直接通过HBase 对数据进行处理。Hive 与 HBase 在保留了独立性之外,具备联合使用的功能,具备了多种环境下使用的可行性[8]。驱动模块通过 StorageHandler 与HBase 链接。

1.4.3 数据存储结构设计

HBase 中的数据以 Key/Value(键值对)形式存储。Key/Value 形式结构不固定,每一个元组都可以有不同的字段,每个元组可以根据需要增添一些自己的键值对,这样不会局限于固定的结构,可以减少时间和空间的开销。以水务数据中心的河道流量表为例,在关系型数据库中需建立多个字段及复杂的数据结构,而在 HBase 中只需要建立一个集合,在一个集合中通过嵌套的形式包含尽可能多的数据信息。HBase 中 st_river1_r 表的数据结构如表 2所示。

图4 Hive 与 HBase 联合应用架构

表2 基于 HBase 的 st_river1_R 表数据结构

RowKey 的功能是帮助数据库引擎快速定位检索需要查询的数据,设计包括长度、散列、唯一性等3个原则。

对水务数据进行分析,在数据存储过程中,确保数据唯一性的指标包括数据库名、表格名、时间戳、数据编码、用户编码、记录条数。此外,水务数据库中每个表格都有主键确定表格数据的唯一性。因此,将主键、时间戳、表格编码、记录条数与系统产生的随机数等信息进行结合编码,能够符合 RowKey 设计的要求。

1.4.4 数据迁移功能设计

开源工具 Sqoop 旨在实现在关系型数据库管理系统(RDBMS)与 Hadoop 之间建立高效的海量数据的传输。用户在 Sqoop 的帮助下,可以将关系型数据库的数据导入导出到与 Hadoop 相关的系统中,如 HDFS,HBase;同时也可以将数据从 Hadoop 系统里抽取并导出到关系型数据库里。水务数据的一个特性是数据类型多,有结构化、非结构化和半结构化数据。半结构化与非结构化数据的迁移主要通过 HDFS 文件上传功能进行批量化的实现[9],结构化数据的迁移则需要根据水务数据源的数据结构、存储方式与数据量进行分析。

本研究将水务数据分为结构化与非结构化数据,依据 Sqoop 技术的功能特点,设计了基于Sqoop 的数据传输架构图,如图5所示。非结构化的数据有图片、音频、视频、文档等,此类数据可以不经由 Sqoop 工具,直接存储至 HDFS 中;而结构化的数据,想要在保留元数据特性与规则的同时,还要支持分布式的存储与计算,则需要对数据进行一系列的处理。但由于存储方式与数据结构的差异,导致数据的多源异构的特性,因而需要对其进行统一的数据清洗与整合。本研究选择 MySQL数据库作为整合后的中间平台,MySQL 是一个轻量级的数据库[10],便于开发和使用。在完成整合的工作后,使用 Sqoop 数据传输工具将结构化数据导入至 HDFS 中,并在此基础上,对 HBase 与 Hive 建立数据关联映射关系,Hive-HBase 联合存储机制,实现数据迁移至存储的流程。在 Hadoop 平台完成数据的分析与处理后,也可以通过 Sqoop 具备的数据导出功能,将数据导出到 MySQL 中,从而支撑 Web展示或别的业务应用。

1.4.4.1 业务数据整合结构表设计

水务数据来源于多个数据库,具有多表关联、协同及数据不一致等问题,为解决数据结构异常的问题,需要对关系型数据库中存储的数据进行统一的数据结构设计,并对数据表中的数据按照该结构进行整合。

目前水务数据主要信息包含在水文水资源数据库(swszy)、水环境数据库(shj)、供排节水数据库(gpj)等三大主题业务库中。本研究选择三大数据库的3张表格进行验证,并对比较典型的数据表进行结构设计,包括水文水资源数据库的河道表、供排节水数据库的用水大户用水量表、水环境数据库的水质分析日报表。从各个表的字段名展示对三大业务数据表的整合设计,整合结构表如表3所示。其中字段名1指水文水资源数据库的河道表字段名,字段名2指供排节水数据库的用水大户用水量表字段名,字段名3指水环境数据库的水质分析日报表字段名,新字段名是指整合后的结构表字段名。

图5 基于 Sqoop 的数据传输架构图

表3 整合结构表

1.4.4.2 基于 Sqoop 的数据迁移实现流程

完成关系型数据库的数据整合之后,为解决MySQL 与 HDFS 之间的数据通信、信息交互的问题,实现关系型数据库与分布式数据库之间的数据迁移,可利用 Sqoop 技术。通过 Sqoop 提供的 API接口,能实现高效、批量的数据传输。

将数据序列化输入,利用 MapReduce 框架进行并行处理的数据传输,在数据分割规则上进行优化,实现数据序列化与反序列化。用户通过指定一个数据的分割区间,获取最大与最小值,将最大与最小值差值与 map 数目的商作为每个 map 的记录条路,其中 map 数目是指在进行 MapReduce 并行处理时,Map 处理过程中对数据分割后对应的 map 数。当数据处理的数据区间为 [1 000,5 000],则最大值为5000,最小值为1000,差值为4000,假设其map 数目为 4,则会将数据分为4个区间,即 [1 000,2 000),[2 000,3 000),[3 000,4 000),[4 000,5 000],在4个 map 里进行顺序运算,每个 map 执行并行操作,实现数据的快速传输。

从 MySQL 向 HDFS 中导入数据的 Sqoop 数据传输流程如图6a 所示。首先需要对 MySQL 数据库进行连接测试,并且传输处理参数;然后程序加载 Sqoop 模块,并且指定参数,如数据库名、用户名、IP 地址等信息;再将数据序列化后,开启数据传输,指定的 HDFS 目录为默认的 Sqoop 目录,数据一般以文档结构存储,在执行结束后,完成数据的导出。

从 HDFS 导出数据至 MySQL 的 Sqoop 数据传输流程如图6b 所示。首先程序需要对 HDFS 中的目录结构进行读取,确认路径正确;再指定要导出的数据库名及其他参数信息。在连接到 MySQL 目标数据库后,从 HDFS 中读取数据,对数据进行反序列化,利用 MapReduce 对数据进行并行化处理,同时导出多任务的数据,在完成数据导出并进行校验后,结束程序。

图6 Sqoop 数据传输流程图

2 数据迁移实验测试

在完成分布式集群和实验环境建设的基础上,进行大数据集的水务数据迁移实验。对于 HDFS与 MySQL 之间的数据迁移的功能测试,利用 Sqoop工具,数据源使用 st_river1_r 表格,准备1000 条记录进行测试。

在启动 HBase 后,导入 MySQL 数据表,执行脚本如下:

执行脚本中,-m5参数的含义是指该命令使用5个并行进程任务进行计算,如果参数为 1,则说明没有开启并行功能;import 命令是指这里执行了 Sqoop 导入数据操作,并且配置了对应的 JDBC(Java DataBase Connectivity)与数据库,表格为st_river1_r,HBase 中的数据库表格的结构在数据库表结构设计时创建。通过在命令行执行脚本导入数据进行测试。

在脚本执行结束后,进入 HDFS 文件目录树下查看存储的数据文件,根据输入的地址,查询数据迁入的结果,执行命令如下:Hadoop fs -ls -R/HBase/sqoop/st_river1_r/。

数据迁入测试结果如图7所示,图中,fs 代表HDFS 文件系统,-ls 参数的含义是显示当前下面的文件及文件夹。可以看出,该任务执行了5个进程,在对应的路径下创建了6个文件,1 个任务成功的日志文件,以及5个存储数据的数据块文件,由于进程延时等问题,数据块文件大小不同。

图7 数据迁入测试

在 HDFS 文件系统下,通过执行查询命令查看数据,查询命令如下:Hadoop fs -cat /HBase/sqoop/st_river1_r/part-m-00001|grep '#' 。

在文件系统目录树下,查询表格 st_river1_r 的part-m-00001 数据块中存储的数据,数据迁移查询结果如图8所示,每个字段用“#”字符分隔开。

在 HBase 中查询数据迁移结果,HBase 表格显示如图9所示,st_river1_r 表格已经存在。

创建 river 表格,将数据复制到 river 中,并通过 scan 命令查询 river 表格的数据。在 HBase 中,查询数据结果如图10所示,按10的指数形式显示存储的数据,总数据量为1000 条,没有数据丢失与错误。

测试实验证明,通过 Sqoop 进行数据迁移的方法正确有效,能够满足数据迁移的需求。

图8 数据迁移结果

图9 HBase 表格显示

图10 river 数据显示

3 结语

数据的量度和复杂度都在不断地提升,为解决大数据的存储问题,提出一种新的分布式大数据存储平台设计方案,并结合实际结构化水务数据进行数据的存储与迁移实验,实验表明了本设计方案的可行性与有效性,且能够解决数据在分布式与原数据等平台进行存储与迁移时的数据结构与信息交互异常的问题。与先前的相关研究相比,该设计方案在一些地方提出了创新性的设计理念,例如,相比于单独使用 Hive 与 HBase,将两者联合,在应用上性能有了很大的提高;进行数据迁移和分布式存储后,也提升了关系型数据库的查询效率,实现关系型数据库与分布式数据库之间的互通。从实用的角度,本设计方案旨在解决水利信息化领域内数据管理难的问题,研究具有一定的社会效益和实践应用价值。本研究虽然在 Hive 与 HBase 设计的键值对形式的水务数据存储结构上有了创新,但还需要进一步改进,主要体现在 RowKey 设计与高效率索引的优化上,由于该部分比较复杂并和业务内容、国家标准有关,是以后需要攻克的一个难点。

猜你喜欢
水务结构化虚拟化
智慧水务在大港油田水务供水管网漏损控制方面的运用分析
促进知识结构化的主题式复习初探
改进的非结构化对等网络动态搜索算法
结构化面试方法在研究生复试中的应用
左顾右盼 瞻前顾后 融会贯通——基于数学结构化的深度学习
基于OpenStack虚拟化网络管理平台的设计与实现
对基于Docker的虚拟化技术的几点探讨
浅析虚拟化技术的安全保障
H3C CAS 云计算管理平台上虚拟化安全防护的实现
富阳:启动智能水务