测试空间大数据软件(Hadoop + HBase + GeoWave + GeoServer)而不会在尝试中死亡:-)
发布日期: 2017 年 10 月 17 日
来源url:https://www.linkedin.com/pulse/testing-big-spatial-data-software-hadoop-hbase-geowave-alvaro-huarte/
赞测试大空间数据软件(Hadoop + HBase + GeoWave + GeoServer)而不会在尝试中死亡:-)105评论16分享分享测试大空间数据软件(Hadoop + HBase + GeoWave + GeoServer)而不会在尝试中死亡:-)76
Alvaro Huarte
Alvaro Huarte
关注Alvaro Huarte
GIS软件开发人员
本文的目的是向您展示测试大数据平台与其他地理空间工具集成的结果。有必要突出的是,所使用的组件的集成,所有这些都是开源的,允许我们发布符合OGC标准(WMS,WFS,WPS)的WEB服务。
如果您愿意,可以阅读葡萄牙语(By Fernando Quadro)或西班牙语版本。
本文介绍了安装步骤,设置和开发过程,以便获得一个Web地图客户端应用程序,显示四个月内约4k欧洲站点的NO2测量值(观察记录每小时),大约500万条记录。是的,我知道,这些数据看起来不像“大数据”存储,但是当应用程序使用空间和/或时间过滤器读取数据时,它似乎足以检查性能(点击图片查看视频)。
本文不侧重于教授使用过的软件的更深层次的知识,所有这些都已经从用户或开发人员的角度发布了良好的文档,它只是想提供经验和收集用过的软件组件资源的简单指南。例如,有关GeoWave及其与GeoServer集成的评论是其网站上产品指南内容的副本。
数据方案
测试数据从欧洲环境署(EEA)下载。您可以在此搜索此信息或地图查看此主题或其他主题,或者更好,您可以使用自己的数据。GDELT是另一个提供海量数据的有趣项目。
测试数据的方案很简单,输入是一组CSV文件(文本文件,其属性用逗号分隔),地理坐标(纬度/经度)中的点对传感器进行地理配准,测量日期和空气中的NO2浓度。还有其他次要属性,但它们对我们的测试并不重要。
软件架构
测试由一组工具组成,所有这些工具都为应用程序架构中的下一个软件组件提供数据和功能。应用程序工作流程从Hadoop及其HDFS,HBase开始,将其映射为数据库,伟大的GeoWave作为它与实现多个OGC标准的流行GeoServer之间的连接器,最后,Web客户端应用程序获取数据以显示地图通常(例如,使用Leaflet和Heatmap.js库)。
Apache Hadoop
当我们在Google上搜索一下时, Apache Hadoop是一个框架,它允许使用简单的编程模型跨计算机集群分布式处理大型数据集。它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储。库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用程序层的故障,从而在计算机集群之上提供高可用性服务,每个计算机都可能容易出现故障。
HDFS 是一种分布式文件系统,可跨Hadoop集群提供对数据的高性能访问。由于HDFS通常部署在低成本的商用硬件上,因此服务器故障很常见。但是,文件系统的设计具有高度容错性,可以促进计算节点之间的数据快速传输,并使Hadoop系统在节点出现故障时继续运行。即使在众多节点发生故障的情况下,也可以降低灾难性故障的风险。
我们的测试将使用Hadoop及其HDFS作为数据存储库,我们将保存并最终发布到最终用户应用程序。您可以在这里阅读项目资源,或者在互联网上深入了解它。
我使用Windows进行测试。官方的Apache Hadoop版本不包括Windows二进制文件,但您可以使用这个出色的指南(它使用Maven)轻松构建它们,并至少配置必要的文件来运行单个节点集群。当然,生产环境将要求我们配置分布式多节点集群,或使用“即用型”分发(Hortonworks …)或跳转到云(Amazon S3,Azure …)。
我们继续这个指南; 在使用Maven构建Hadoop之后,编辑了配置文件并定义了环境变量,我们可以测试在控制台中是否一切正常…
hadoop 版本
然后,我们启动namenode和datanode对象的“守护进程”,以及“yarn”资源管理器。
调用“。\ hadoop-2.8.1 \ etc \ hadoop \ hadoop-env.cmd”
调用“。\ hadoop-2.8.1 \ sbin \ start-dfs.cmd”
调用“。\ hadoop-2.8.1 \ sbin \ start-yarn.cmd”
在我的情况下,我们可以在配置的HTTP端口号50,070上看到Hadoop管理应用程序:
Apache HBase
Apache HBase再次在Google上搜索,… 一个NoSQL数据库,它作为一个分布式和可扩展的大数据存储在Hadoop之上运行。这意味着HBase可以利用Hadoop分布式文件系统(HDFS)的分布式处理范例,并从Hadoop的MapReduce编程模型中受益。它意味着托管具有数十亿行的大型表,可能有数百万列,并且可以在商用硬件集群中运行。
您可以在此处阅读以开始并安装HBase。再次,我们检查产品版本执行…
hbase 版本
启动HBase:
调用“。\ hbase-1.3.1 \ conf \ hbase-env.cmd”
调用“。\ hbase-1.3.1 \ bin \ start-hbase.cmd”
在我的案例中,请参阅HBase管理应用程序,在16,010端口号上:
好的,在这一点上,我们有大数据环境正在运行,是时候准备一些附加地理空间功能的工具了; GeoWave和GeoServer,我们继续…
LocationTech GeoWave
GeoWave是一个软件库,它将分布式计算框架和键值存储(在我的案例中为Hadoop + HBase)的可扩展性与现代地理空间软件相连接,以存储,检索和分析大量地理空间数据集。哇!这是一个很棒的工具:-)
从开发人员的角度来看,该库实现了GeoTools工具包的矢量数据提供程序,以便从分布式环境中读取特征(几何和属性)。当我们将相应的插件添加到GeoServer时,用户将看到新的数据存储以配置新支持的分布式数据集类型。
如今,GeoWave支持三种分布式数据存储类型; Apache Accumulo,Google BigTable和HBase,我们将使用其中的最后一个。
我们暂时离开GeoServer。根据GeoWave用户和开发人员指南,我们必须定义层要使用的主索引和二级索引,然后我们可以将信息加载到我们的大数据存储中。
阅读开发人员指南,我们将使用Maven构建GeoWave工具包,以便在HBase上保存地理数据:
mvn 包 -P geowave-tools-singlejar
以及包含在GeoServer中的插件:
mvn 包 -P geotools-container-singlejar
我已经使用基本命令定义了我自己的环境变量,以便尽可能舒适地执行GeoWave过程:
设置 GEOWAVE =
java -cp “%GEOWAVE_HOME%/ geowave-deploy-0.9.6-SNAPSHOT-tools.jar”
mil.nga.giat.geowave.core.cli.GeoWaveMain
现在,我们可以轻松运行输入%geowave%[…]的命令。我们检查GeoWave版本:
%geowave% - 版本
好的,我们将注册我们图层的必要空间和时间索引。客户端应用程序将使用空间过滤器(BBOX交叉过滤器)和时间过滤器过滤数据,以仅获取特定日期的NO2度量。
我们继续,注册两个索引:
%geowave% 配置 addindex
%geowave% 配置 addindex
%geowave% 配置 addstore EEA - 商店
现在,我们可以加载数据。我们的输入是CSV文件,因此我将使用“-f geotools-vector”选项来指示GeoTools检查哪个向量提供者必须使用它来读取数据。还有其他支持的格式,当然,我们可以开发一个新的提供程序来读取我们自己的特定数据类型。
要加载CSV文件:
%geowave%ingest localtogw
-f geotools-vector
./mydatapath/eea/NO2-measures.csv eea-store eea-spindex,eea-hrindex
好的,数据加载,到目前为止没有问题,对吧?但是GeoTools CSVDataStore在读取文件时有一些限制。当前代码不支持日期/时间属性(也不支持布尔属性)。代码将所有这些作为字符串进行管理 这对于我们自己的要求是不可接受的,测量日期必须是索引的精确属性,所以我在原始java代码中修复它。此外,为了计算每个属性的适当值类型,读者读取文件中的所有行,这是最安全的方式,但是当读取具有成千上万行的大文件时,它可能非常慢。如果文件具有全等方案,我们可以读取一组行来计算类型。所以我也改了。我们必须重建GeoTools和GeoWave。您可以从我自己的GeoTools下载更改叉子。
在这个休息之后,现在让我回到指南的主路径,我们已经使用“ ingest ”命令在我们的图层中加载了功能。我们已将插件包含在已部署的GeoGerver实例中(请参阅开发人员指南,这很简单,只需将“ geowave-deploy-xxx-geoserver.jar ”组件复制到“ … \ WEB-INF \ lib ”文件夹并重新启动) 。
GeoServer的
GeoServer 是一个用于共享地理空间数据的开源服务器。它专为互操作性而设计,使用开放标准从任何主要空间数据源发布数据。GeoServer是开放地理空间联盟(OGC)兼容的许多开放标准的实现,例如Web要素服务(WFS),Web地图服务(WMS)和Web覆盖服务(WCS)。
提供了其他格式和发布选项,包括Web地图平铺服务(WMTS)和目录服务(CSW)和Web处理服务(WPS)的扩展。
我们使用GeoServer来读取加载了GeoWave的图层,刚添加到GeoServer的插件将允许我们连接到这些数据。我们可以将它用作任何其他类型的图层,哇!
要配置对分布式数据存储的访问,我们可以使用两个选项:
像往常一样使用GeoServer管理面板:
使用GeoWave 的“ gs ”命令在已启动的GeoServer实例中注册数据存储和层。
由于我们正在测试东西,我们将使用第二个选项。第一步需要向GeoWave指出我们要配置哪个GeoServer实例。
%geowave%config geoserver
-ws geowave -u admin -p geoserver http:// localhost:8080 / geoserver
与我们对GeoServer管理员的操作类似,我们执行两个命令分别添加所需的数据存储和层。
%geowave%gs addds -ds geowave_eea -ws geowave eea-store
%geowave%gs addfl -ds geowave_eea -ws geowave NO2-measures
您可以注意到,图层的空间参考系统是EPSG:4326,其余设置类似于其他图层类型。如果我们使用GeoServer的OpenLayers客户端预览地图…
性能非常好(点击图片查看视频),考虑到我在“非常强大”的PC上运行,Hadoop在“单一模式”下工作,并绘制了所有可用的全部NO2测量值日期(约5百万条记录)。空间索引正常工作,因为缩放速度越快,响应越快。此外,如果我们使用时间标准执行WFS过滤器,我们将检查时间索引运行正确,GeoServer不扫描层的所有记录。
GeoWave用户指南教我们一个名为“ subsamplepoints ” 的特殊样式(它使用名为“ geowave:Subsample ” 的WPS进程,并且GeoWave插件实现)。绘制地图时,此样式执行空间子采样以加快渲染过程。我已经验证了很好的性能提升,我建议它绘制点类型图层。
我也测试了从Shapefile加载多边形类型图层,没有问题,WMS GetMap和WFS GetFeature请求运行正常。只有一个注释,GeoWave加载工具会自动将几何图形从原始空间参考系统(在我的情况下为EPSG:25830)转换为地理坐标中的EPSG:4326。
在这一点上,我们已经证实一切都适合,我们可以在这里停止,因为这些数据的利用已经可以通过标准的Web制图库(Leaflet,OpenLayers,AGOL,…)或任何GIS桌面应用程序(QGIS,gvSIG)来完成,…)。
你想继续吗?
使用Leaflet的Web制图客户端
我继续使用Leaflet开发Web制图客户端应用程序。此查看器可以绘制两种样式的地图,绘制热图或绘制主题渐变颜色。它呈现所有观察或度量的唯一日期,甚至在所有可用日期之间设置动画(点击图片查看视频)。
此外,我们可以使用此查看器验证性能,它在唯一查询中混合空间和时间过滤器。我们继续。
最简单的选择,也许是最优选的,是客户端应用程序执行WMS GetMap请求,但我将执行请求到GeoServer以获取几何图形以在客户端中根据需要绘制它们。我们可以使用具有当前地图边界的WFS GetFeature请求(它生成空间BBOX过滤器)和特定日期的propertyIsEqual过滤器。但我们不应忘记,我们正在管理大数据商店,这些商店可以创建具有巨大规模和成千上万条记录的GML或JSON响应。
为了避免这个问题,我开发了一对WPS进程,称为“geowave:PackageFeatureLayer ”和“geowave:PackageFeatureCollection ”,它们在压缩二进制流中返回响应。例如,您可以使用另一个打包逻辑,返回一个特殊图像,其中像素编码几何和特征属性。一切都是为了最小化信息的大小,并加速在客户端应用程序中消化它。
WPS参数是:第一,在当前的GeoServer目录图层名称(A“ SimpleFeatureCollection ”为“geowave:PackageFeatureCollection ”的过程),BBOX,以及一个可选的CQL过滤器(在我的情况下,我发送类似“ datetime_begin = 2017-06 -01 12:00:00 “)。
我不打算详细解释代码,它留下了本指南的范围。如果您愿意,可以在文章末尾的github链接中学习它。
客户端应用程序运行WebWorker,向我们的GeoServer实例执行WPS请求。该请求执行“geowave:PackageFeatureLayer ”过程以最小化响应大小。然后,WebWorker解压缩二进制流,解析它以创建带有点和属性的javascript对象,最后将它们返回到主浏览器线程进行绘制。客户端应用程序使用Heatmap.js库或Canvas HTML5上的绘图来渲染这些对象,以创建专题渐变颜色。对于第二种样式,应用程序会创建一些彩色图标的即时纹理,以便在绘制点时使用。这个技巧允许地图快速渲染成千上万的点。
如果我们的客户端应用程序需要绘制数百万个点,我们可以深入了解WebGL和伟大的WebGL热图库或精彩的演示,如我用webgl构建风图。
WPS模块和Web制图客户端应用程序的源代码在这里。
赞测试大空间数据软件(Hadoop + HBase + GeoWave + GeoServer)而不会在尝试中死亡:-)评论分享分享测试大空间数据软件(Hadoop + HBase + GeoWave + GeoServer)而不会在尝试中死亡:-)