水资源动态评价大数据计算框架研究与实践
2022-01-12詹全忠
张 潮,詹全忠
(水利部信息中心,北京 100053)
0 引言
水资源是人类长期生存、生活和生产活动中所必需的自然资源,又是一种战略性经济资源。未来中国水资源的中长期需求仍将上升,直接影响民生福祉[1]。开展水资源评价,查清水资源现状,是实现水资源可持续开发与管理的重要依据,是与水资源有关的工程规划、设计及运行管理的重要前提,也是区域经济发展和人民生活的重要保障。
传统的水资源评价主要是指按流域或地区对水资源数量、质量、时空分布特征,以及开发利用条件、现状、供需发展趋势等方面进行的分析评估,一般在年时间尺度上进行。然而,随着社会经济的快速发展,人类活动对水文水资源系统的干预越来越强烈,传统的基于年时间尺度的水资源评价方法在时效性和精细化程度上越来越难以支撑水资源管理的要求,迫切需要研究服务于水资源管理调度,基于多源动态监测数据,以月为时间尺度的新型水资源评价理论、技术与方法。并且随着社会和行业信息化建设的不断推进,数据获取渠道的丰富和能力的不断增强,日益丰富的数据源将改变水资源评价中天然与开发利用过程的信息耦合方式[2]。
时效高的水资源评价需要大量的实时或准实时数据和计算资源支撑。大数据平台技术已成为现代建模仿真领域的重要支撑技术之一,平台体系架构、应用模式,大数据应用标准、存储、分析处理等大数据平台技术飞速发展,应用广泛[3]。在开源软件体系的基础上,根据实际应用场景需求,进行负载均衡、多维调度的优化,更稳定更快地完成大数据收集和处理是比较常见的技术路线[4]。在大数据计算领域,Hadoop/Spark 已经成为越来越流行的计算平台之一,Spark 的功能涵盖了大数据领域的离线批处理、SQL 类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作[5]。
与其他行业相比,水利行业大数据发展稍慢,但也在水利大数据的存储与共享方法、分析平台、挖掘算法、数据可视化和应用等方面有所突破[6]。近年来,通过国家防汛抗旱指挥系统、水资源监控能力建设等项目建设,水资源数据库建立及数据分析信息化系统取得了长足进步,已经成为水资源决策的重要依托[7-8],但仍存在数据分析分散,数据汇集散乱,算法模型接口共享共用困难等问题,且绝大多数系统依托于传统关系型数据库,无法充分利用大数据和机器学习技术,无法实现大数据规模的汇集和计算。
为此,在水资源动态评价大数据需求分析基础上,研究总体计算框架设计、数据汇集、算法模型计算支撑等内容,初步实现水资源动态评价大数据的全流程管理。
1 水资源动态评价大数据需求分析
1.1 水资源动态评价数据特点分析
水资源动态评价所需数据特点如下:
1)水资源动态评价所需的数据来源十分驳杂。需处理的数据是典型的大数据,具备大数据的基本特征,无法在一定时间内用常规机器和软硬件工具对其进行感知、获取、管理、处理和服务[9]。
经过对水资源现状评价、情势研判等方面业务的分析,数据源可能包括以下数据:a. 水文及水资源监测、水环境及水生态监测、雨水情测报等数据;b. 用水总量相关数据,包括地表和地下水取用水监测数据,以及水量分配、取水许可、水资源调度、用水户及水权交易等数据;c. 用水效率相关数据,包括节水、计划用水指标,用水定额、效率,以及非常规水等数据;d. 水功能区纳污量相关数据,包括水功能区划、水域纳污能力核定、水功能区水质监测及达标评价、入河排污口调查监测、饮用水源地保护等数据;e. 水资源经济核算数据,包括耗水总量、排污总量、水资源费、分行业供水水费、水权转让交易、生态补偿标准定量等核算数据。
此外,社会其他部门、相关团体和公民也越来越多地参与或涉及水资源监督和管理,由此产生与水资源有关的数据,如通过互联网以网站、论坛、微信、微博等方式发布的有关信息,也可以被利用和挖掘。
2)水资源动态评价所需的各类数据格式也驳杂不同。目前,各相关行业和部门对数据的管理多采用传统关系型数据库,其数据用统一的结构表示,即结构化数据。但随着水资源动态评价分析的进化,还要处理文字、图形、图像、声音、视频等非结构化数据。水资源动态评价所需的数据主要包括以下格式:各种数据库表格式,如 Oracle,MySQL,MongoDB 和 SQL Server 等数据库;各种文本文档,如 PDF,Word 文件;各种表格文件,如 Excel 表格文件;各种非结构化数据,如图片、视频、遥感数据等文件;各种网站网页数据,如 HTML 文件等。
因此,要进行水资源动态评价数据分析处理,首先需要充分利用大数据计算技术,将驳杂的数据源进行统一汇集和存储,形成数据仓库。
1.2 水资源动态评价分析计算需求
水资源动态评价的主要技术手段是构建水循环的取水—输水—用水—耗水—排水全过程模拟计算。计算技术主要有以下内容:
1)水资源现状分析。a. 水资源数量方面,涉及地表水模拟、分布式水文、地下水数值模拟等模型计算;b. 水资源质量方面,涉及遥感与地面监测协同的水体水质和营养状态分析评价;c. 水资源开发利用方面,涉及遥感与地面监测协同的种植结构反演、多源融合信息耗水、农业灌溉曲线模拟、用水量小波分析等模型计算。
2)水资源预测预报分析。涉及基于贝叶斯平均的旬月尺度降水、多源数据融合的地下水水位动态、数据驱动模型的水质等预测分析,参照作物需水量预报,需水量线性回归,以及需水量灰色、神经网络、循环神经网络等模型预报方法。
3)水资源规律分析。涉及主成分、关联、驱动因子相关性、动态变化规律识别等各种数据分析方法。
4)水资源情势研判。涉及地表水、地下水可供水量计算,以及雨水利用量等其他水源可供水量计算、供水风险分析、缺水状况识别、用水过程线计算、农业用水回归计算、废污水排放计算等多种算法模型。
5)水资源平台调配。涉及水资源配置模型、共需平衡分析、重点工程水量调配、模型滚动修正计算等。
这些复杂的计算形成以下 3 个主要需求:
1)各类数据分析算法的接口需求。如各功能计算都需要一些简单的归一化和线性回归,应提供统一的算法接口,以提高分析效率,避免大量重复算法开发调试工作。
2)联合计算的需求。在各功能计算中会存在很多某个算法需要某个模型的结果数据作为输入数据的情况,应具备算法模型的调度管理能力。
3)并行计算的需求。提高分析计算效率需要GPU(图形处理器)并行计算的支撑,尤其在利用深度学习神经网络处理非结构化数据的场景中,利用 CPU 和 GPU 混合计算可使这些算法模型计算速度比单纯 CPU 计算速度大大提高。
2 水资源动态评价大数据计算总体框架设计
根据需求分析和实际技术基础情况,依托水利部大数据平台的计算资源、存储资源、算法开发平台构建水资源动态评价大数据的总体计算框架,架构设计如图1 所示。大数据处理体系主要由 4 个关键环节构成,包括:雨水情、水资源、月报等各类数据源的采集导入;对数据标准进行范式化处理,构成原始、基础、主题数据库等数据仓库;开发水资源算法模型接口,提供各类算法计算服务;形成结果数据,支撑上层应用系统分析展示。
图1 总体计算框架设计
数据采集为不同数据源提供数据交换的桥梁,支持主流的关系型数据库,包括 Oracle,MySQL,DB2,SQL Server 和 PostgreSQL 等。此外,可以支持与 Hadoop 平台的 HDFS(Hadoop 分布式文件系统)和 Hive 组件的数据对接集成,也可对接各类云上的 ODPS,ADS,OTS,RDS 的数据,满足不同应用场景需求。
水资源动态评价处理涉及多种数据处理、挖掘的算法模型支撑,将利用 Spark MLib 等方式实现这些算法模型的标准化编写,从而在大数据平台上可以直接调取使用。为实现 CPU 和 GPU 的混合计算,利用并行计算显卡提供 GPU 计算资源,部署Pytorch 和 TensorFlow 2 套深度学习框架,提高算法模型适应性。
3 水资源动态评价大数据汇集
水利部大数据平台依托 Hadoop 生态体系建立,具备基本的计算存储体系。Hadoop 是一个应对海量数据进行分布式处理的软件框架,核心设计是 HDFS 和 MapReduce,HDFS 为海量的数据提供存储,MapReduce 为海量的数据提供计算。在这个大数据平台的基础上,本研究实现文本文档爬取、数据库导入导出、非机构化数据导入等各类相关数据的统一汇集。
3.1 文本文档数据格式转换
对于多源格式的文本文档数据,如 PDF,Word,Excel,PPT,TXT 和 Csv 等,利用数据爬虫技术,按照一定规则将匹配数据转换为统一的格式。数据爬虫分为数据采集、处理、储存 3 个部分,工作流程如图2 所示。
图2 数据爬虫工作流程
在执行数据爬虫前,首先应获取所需爬取数据所在的文件路径,不同于网络爬虫仅解析 HTML格式文件,数据爬虫需要解析不同格式的文件,因此需要相应的解析驱动引擎帮助获取页面的数据信息。获取到数据页面信息后,数据爬虫即开始按照指定的规则在页面爬取信息,当爬取信息与规则匹配时,则执行相应的数据处理与转换。循环执行数据爬取流程,匹配数据将以队列形式存储,等待后续的统一存储。
3.2 数据直接导入导出
水利部大数据平台底层采用主流的 HDFS 存储体系,所有的数据将直接存储在 HDFS 上,数据的导入导出也将直接与 HDFS 交互。HDFS 采用 Master/Slave 架构,1 个 HDFS 集群由 1 个 NameNode 和一定数目的 DataNodes 组成。将各类数据导入导出请求转换为相应的 MapReduce 任务,实现数据交换的目的。当需要数据导入时,文件上传 MapReduce 程序启动,程序按照文件导入流程依次与 NameNode 和各 DataNode 节点通信,将文件写入 HDFS 中并建立指定数目的文件副本。当接到数据导出请求时,文件下载 MapReduce 程序启动,程序按照文件下载流程依次与 DataNode 节点通信,将文件下载下来并作整合,最终返回整合完成的数据,完成数据导出的请求。
3.3 数据库导入导出
通过 JDBC(Java DataBase Connectivity)和 ODBC(Open DataBase Connectivity)接口,实现与各种主流、开源和国产等数据库的连接与接入,支持对各种结构化和非结构化格式文件的读写,以及通过多种协议与其他应用系统的交互,实现分散异构数据库与大数据平台之间的数据通信。JDBC 与 ODBC 作为 Java 技术中实现与关系数据库交互的标准接口,具有很高的效率。
4 水资源动态评价机器学习算法框架
为支撑水资源动态评价数据的评价与预测,本研究构建了可用于水资源动态评价数据分析的机器与深度学习算法,包括回归模型、支持向量机(SVM)、决策树(DT)、随机森林(RF)、梯度提升决策树(GBDT)、前馈神经网络(FNN)、卷积神经网络(CNN)、递归神经网络(RNN)等算法,并实现算法接口的统一管理。
4.1 算法框架接口
在水资源动态评价大数据上进行机器学习分析,需要处理全量数据并进行大量的迭代计算,Spark 立足于内存计算,天然地适应迭代式计算。相比于基于 Hadoop MapReduce 实现的机器学习算法,Spark MLlib 在机器学习方面具有一些得天独厚的优势。
本研究在 Spark MLlib 库基础上,开发了很多通用的机器学习算法模块,包括线性,GBDT,DT,RF,SVM,以及逻辑回归二分类和多分类等模块。设置好所需的机器学习算法模块,便可从大数据平台直接导入水资源数据接入训练接口。
4.2 模型使用接口
对水资源动态评价基础数据先进行规范化处理,将数据分为特征类和标签类 2 类数据。在模型训练过程中:特征类数据(如省份、流域、年份月份、降雨量等数据)用于模型在训练过程的特征提取;标签类数据用于损失函数的计算,将模型当前预测的结果和标签数据进行比对,差值作为损失函数,进而调整网络结构使损失函数降到最低。实际计算流程如图3 所示。
图3 模型使用计算流程示意
通过设置算法模型的超参数可达成不同的训练效果,以逻辑回归二分类为例,可设置的参数有阈值、正则化系数、弹性网络混合参数、最大迭代次数、迭代收敛容差、包含常数项等。
4.3 GPU 并行计算接口
CPU 需要很强的通用性来处理各种不同的数据类型,同时需要逻辑判断又会引入大量的分支跳转和中断的处理,这些都使得 CPU 的内部结构异常复杂。GPU 面对的是类型高度统一且相互无依赖的大规模数据和不被打断的纯净计算环境,使得 GPU 在处理图像等数据时存在天然优势。为实现大量水资源动态评价数据的分析与计算,利用深度学习技术对海量数据进行建模分析,本研究提出 CPU 和 GPU 的混合计算支撑模式。
为满足对不同深度学习框架下的计算需求,增加了专门的 GPU 服务器。在 GPU 服务器上部署了2 个主流的深度学习框架 Tensorflow 和 Pytorch。为实现 GPU 服务器和大数据平台间的数据及文件的传输需求,在 GPU 服务器上部署了 MySQL 数据库和 FTP 文件传输等服务。MySQL 数据库服务主要负责实现深度学习平台和大数据平台之间结构化数据的传输,FTP 文件传输服务主要负责 GPU 服务器和大数据平台之间的非结构化数据的传输。水资源数据通过大数据平台转化成数据流传输到服务器端,服务器端将打包的水资源数据进行接收、分类,可进行神经网络模型的训练与调优。模型部署后,可接收从大数据平台传来的水资源数据并进行计算,将结果反向传输回大数据平台,实现 CPU 和 GPU 的资源调度共享。
5 结语
本研究针对水资源动态评价业务需求,以水利部大数据平台为基础,提出了数据采集—标准范式化—数据仓库—算法模型接口的水资源动态评价大数据计算框架,并重点研究了数据统一汇集、算法模型接口,以及 CPU 和 GPU 混合计算等关键节点,实现了水资源动态评价大数据的全流程管理,可为复杂的水资源评价等业务提供支撑。目前水资源动态评价大数据计算框架已在水利部实现部署应用,初步证实了此计算框架的可行性,但在扩展数据源、完善水资源数据标准规范、优化算法模型联合计算等方面仍需要进一步完善。同时,在深度学习和 GPU 计算方面也需要深化与水资源业务的融合,形成行业专用的模型,才能不断推动水资源动态评价数据处理水平和分析能力的提高。