GeoMesa源码学习–整体架构
GeoMesa是一款开源的基于分布式计算系统的面向海量时空数据查询与分析的工具包,它支持多种可扩展的、基于云端的数据存储架构,包括Apache Accumulo, HBase,Cassandra,Google Bigtable,以及用于流计算的Apache Kafka 。同时GeoMesa还可以和Apache Storm一起处理流数据,并使用Spark进行空间分析。 同时,GeoMesa以GeoServer插件的形式为GeoServer提供了读取GeoMesa表的功能。在GeoServer中,GeoMesa表作为一种数据源存在,通过GeoServer,用户可以通过WMS/WFS的形式访问GeoMesa的数据。下图展示了GeoMesa for Accumulo的一个应用架构,可以看到,GeoMesa的定位是一个基于分布式数据库的用于海量空间数据处理的数据引擎产品(SDE)。
(图片来自:http://www.geomesa.org/documentation/user/architecture.html)
GeoMesa的源码可以在GitHub官方页面下到,目前最新版分别为2.0.0. 下载完成后在Scala IDE中导入为Maven工程,可以看到如下图所示的代码结构。GeoMesa代码库本身比较复杂,包含了大量的子模块,除了自身所带的一些基础工具模块外,还提供了基于目前主流的分布式存储系统的扩展模块,但是在了解了GeoMesa的架构之后,读者应该不难看出整个工程还是有规律可循的,比如geomesa-index-api提供了最核心的空间数据索接口(GeoMesaFeatureIndex)与数据访问(GeoMesaDataStore)等基础接口类,然后基于此模块分别有geomesa-accumulo,geomesa-hbase,geomesa-cassandra等扩展模块。两外还包括一些其他的辅助模块,如geomea-jobs提供了对MapReduce的支持等,geomea-utils提供了一些被广泛使用的工具类 :
详细介绍读者可以参考官方开发文档,这里给出主要模块的中文解释:
geomesa-accumulo:基于 Apache Accumulo的DataStore 实现
geomesa-archetypes: Maven构建模板
geomesa-arrow: 基于 Apache Arrow的DataStore 实现
geomesa-bigtable: 基于 Google BigTable的DataStore 实现
geomesa-blobstore: Accumulo-backed store designed for large files which have associated spatio-temporal data
geomesa-cassandra: 基于 Apache Cassandra的DataStore 实现
geomesa-convert: 实现arbitrary data 转换为 SimpleFeatures的工具库,支持自定义,可扩展
geomesa-features: SimpleFeatures的自定义实现与序列化工具
geomesa-filter: Library for manipulating and working with GeoTools Filters
geomesa-fs: 基于 Flat File的DataStore 实现
geomesa-geojson: 直接操作JSon数据的API and REST-ful web service接口
geomesa-hbase: 基于 Apache HBase的DataStore 实现
geomesa-index-api: 空间索引与DataStore的核心类库,最核心的类库,可以作为代码分析的入口。
geomesa-jobs: Map/reduce 集成
geomesa-jupyter: Jupyter notebook 集成
geomesa-kafka: DataStore 基于 Apache Kafka的DataStore 实现, 用于处理近实时流数据(near-real-time streaming data)
geomesa-lambda: 基于Lambda机构实现了Kafka与Accumulo无缝集成的DataStore实现,其中Kafka实时更新,Accumulo用于持久化存储
geomesa-memory: 内存中索引实现
geomesa-metrics: DropWizard metrics 集成
geomesa-native-api: Non-GeoTools API for persisting and querying data in Accumulo
geomesa-process: GeoMesa空间分析工具
geomesa-security: 用于安全与权限认证
geomesa-spark: Spark集成模块
geomesa-stream: DataStore implementation that reads features from arbitrary URLs
geomesa-test: 测试脚本
geomesa-tools: 用于数据导入、查询等操作的命令行工具类
geomesa-utils: 一般工具类
geomesa-web: 实现了REST-ful web services服务接口
geomesa-z3: Z3 空间填充曲线实现。
geomesa-zk-utils: Zookeeper工具代码
这里geomesa-index-core为最核心的模块,分析代码可以看到其主要包含两部分,空间索引GeoMesaFeatureIndex与数据库GeoMesaDataStore。空间索引主要是GeoMesa中定义的Z2/Z3,XZ2/XZ3的实现,用于将时空数据转换为可被列数据库存储一维键值形式。DataStore是基于Geotools数据接口(Geotools Data 模块)实现的用于数据访问的标准接口,详细信息可参阅Geotools源码,此外还有一些其他的工具类,这里不一一赘述。
可见分析GeoMesa庞大代码体系的一个突破口还是在于index与datastore两个点,后面我会先分析GeoMesa中所使用的空间索引技术的理论,然后介绍GeoMesa的数据访问机制,并分别以HBase和Cassandra扩展作为研究案例介绍它们的具体的实现。
———————
作者:萧博士
来源:CSDN
原文:https://blog.csdn.net/xiaof22a/article/details/80288096
版权声明:本文为博主原创文章,转载请附上博文链接!
转载自:https://blog.csdn.net/u011596455/article/details/85869199