一、GeoMesa-整体架构

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 模块)实现的用于数据访问的标准接口。

二、GeoMesa-创建Schema并导入数据

GeoMesa的定位其实是一个时空数据引擎,或者叫数据库中间件,目的在于使用户可以在分布式NoSQL数据库中存储和管理海量空间数据。

2.1 GeoTools Data 模块

GeoMesa的数据操作功能完全基于GeoTools 包中的类和接口进行构建。其中与数据操作有关的核心接口与类位于GeoTools Data模块中。GeoTools中进行矢量数据操作的最核心的接口是DataStore。DataStore接口继承了DataAccess<T,F>接口,T表示FeatureType, F代表Feature。

任何一个空间要素都可以用FeatureType与Feature来表示。

下图展示了接口之间的对应关系以及接口中定义的方法。一个DataStore可以理解为一个数据源,其中定义了所有与数据操作相关的方法,针对各种数据源(Shapefile,PostGIS,Oracle等)数据访问类都实现了DataStore接口。

GeoMesa同样基于DataStore接口实现对空间数据的操作。然后大家可以在rg.locationtech.geomesa.index.geotools.GeoMesaDataStore类中找到具体实现。下图为GeoMesaDataStore所有接口信息,大家可以看到GeoMesaDataStore实现了DataStore中的方法

GeoMesaDataStore作为GeoMesa中所有数据源DataStore的基类,提供了一些业务流程基本实现,但具体到针对每种数据库的数据操作接口则由它的一些子类提供具体实现,如HbaseDataStore、CassandraDataStore等。

2.2 索引管理

GeoMesa最核心的部分就是索引系统。

GeoMesa提供了多种索引方法(z2/z3,xz2/zx3),这些索引方大统一在GeoMesaIndexManager类中管理,在GeoMesaDataStore中可以看到生成GeoMesaIndexManager的一个方法:



GeoMesaDataStore在进行数据表创建,数据导入,数据查询等操作都会通过GeoMesaIndexManager类获取空间索引,然后针对每一个空间要素都会生成一个索引值作为主键。

2.3 创建Schema

每一个矢量图层都对应一个schema,用于保存(空间参考,列属性)等元数据信息,DataStore接口中规定了createSchema方法,用于针对每一种数据库创建相应的schema信息,GeoMesaDataStore中createSchema方法的实现如下:

Schema指的就是与数据集有关的元数据信息(空间参考,列属性等)在数据库中的表示,比如OracledataStore中createSchema方法的作用是在数据库中创建一个表格专门用于保存空间数据的属性信息。createSchema方法会一些列辅助方法来创建读schema。

2.4 生成Writer

GeoTools中的数据导入功能是通过FeatureWriter接口实现的:

FeatureWriter接口定义了一系列方法来实现数据导入过程,如首先通过hasNext判断有没有要素,如果有则使用next获得要素,然后通过write方法将要素写入目标数据库。

对于写入要素通过getFeatureWriterAppend方法获得FeatureWriter,方法之间的引用关系如下图所示,GeoMesaDataStore通过抽象的createFeatureWriterAppend方法最终生成FeatureWriter对象的:

assandraDataStore和HBaseDataStore都提供个各自的createFeatureWriterAppend的实现:CassandraAppendFeatureWriter和HbaseAppendFeatureWriter,他们都继承了GeoMesaAppendFeatureWriter类。这里需要再强调一下,GeoMesaAppendFeatureWriter实现了org.geotools.data.FeatureWriter接口中的hasNext,next,write等方法,所以数据导入过程严格按照GeoTools定义的数据导入过程来执行。

如果要基于GeoMesa扩展对新的数据库支持,只需要对上面这几个方法进行重新,而把主要的业务逻辑交给GeoTools内部的基础类实现即可。来看一下GeoMesa-hbase的数据导入实现过程:

(1)GeoMesaFeatureWriter首先会调用createMutators方法,这个方法需要它的子类来实现,如右边HBaseAppendFeatureWriter中的实现。可以看到createMutator方法其实是获得了用于写入HBase的BufferedMutator类。org.apache.hadoop.hbase.client.BufferedMutator主要用来对HBase的单个表进行操作。它和Put类的作用差不多,但是主要用来实现批量的异步写操作。BufferedMutator替换了HTable的setAutoFlush(false)的作用。可以从Connection的实例中获取BufferedMutator的实例。在使用完成后需要调用close()方法关闭连接。对BufferedMutator进行配置需要通过BufferedMutatorParams完成。

(2)当数据写入类初始化完成之后,就可以调用write方法写入数据了,这里write方法调用了writeFeature方法。

(3)writeFeature继续调用了executeWrite方法(具体实现由子类提供)。这里笔者的理解是,mutator作为写入工具,writes就是等待写入的要素,covert的的作用就是对不同的索引表格进行转换,也就是生成对应的索引值,然后才能写入不同的索引表格中。

(4)子类中实现具体的写入流程

2.5 导入数据

GeoMesa自带的入库工具导入了shapefile文件,这个工具可以在org.locationtech.geomesa.tools.ingest.ShapefileIngest中找到,ShapefileIngest中使用了GeneralShapefileIngest中的方法进行入库操作:

作者:萧博士

原文:https://blog.csdn.net/xiaof22a/article/details/80303161

GeoMesa,整体架构,创建Schema并导入数据的更多相关文章

  1. mysql 批处理文件--- 创建 用户 以及 导入数据

    在window下,通过批处理文件(.bat),进行开启MYSQL服务,导入数据文件(.sql) 1)新建一个txt文件,写入以下内容 rem 启动mysql56服务  mysql56是我的mysql服 ...

  2. [转]Visual Studio 2008中如何比较二个数据库的架构【Schema】和数据【Data】并同步

    使用场景: 在团队开发中,每一个人都有可能随时更新数据库,这时候数据库中数据和架构等信息都会发生变化.如果更新不及时,就会发生数据错误或数据丢失的风险,影响团队的开发效率和 项目进度,这时候我们该怎么 ...

  3. hive 创建表和导入数据实例

    //创建数据库create datebase hive;//创建表create table t_emp(id int,name string,age int,dept_name string,like ...

  4. Spring的整体架构的认识

    Spring的整体架构的认识 一).spring是用来做什么的? spirng使用基本的JavaBean来完成以前EJB所完成的事. 二).EJB EJB: Enterprise JavaBean, ...

  5. 一起学Hive——详解四种导入数据的方式

    在使用Hive的过程中,导入数据是必不可少的步骤,不同的数据导入方式效率也不一样,本文总结Hive四种不同的数据导入方式: 从本地文件系统导入数据 从HDFS中导入数据 从其他的Hive表中导入数据 ...

  6. hive 导入数据

    1.load data load data local inpath "/home/hadoop/userinfo.txt" into table userinfo; " ...

  7. 基于Hadoop的大数据平台实施记——整体架构设计[转]

    http://blog.csdn.net/jacktan/article/details/9200979 大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底 ...

  8. 基于Hadoop的大数据平台实施记——整体架构设计

    大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.好像一夜之间我们就从互联网时代跳跃进了大 ...

  9. solr7.4创建core,导入MySQL数据,中文分词

    #solr版本:7.4.0 一.新建Core 进入安装目录下得server/solr/,创建一个文件夹,如:new_core 拷贝server/solr/configsets/_default/con ...

随机推荐

  1. MQ关于实现最终一致性分布式事务原理解析

    本文讲述阿里云官方文档中关于通过MQ实现分布式事务最终一致性原理 概念介绍 事务消息:消息队列 MQ 提供类似 X/Open XA 的分布式事务功能,通过消息队列 MQ 事务消息能达到分布式事务的最终 ...

  2. 每日一个linux命令4

    mkdir命令 linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. mkdir test    创建一个空目录 ...

  3. sh -s用法

    1.基本用法 (1)sh -s 会从标准输入中读取命令,并在子shell中执行 (2)sh -s 后从第一个非 - 开头的参数开始,依次被赋值给子shell的 $1,$2... (3)sh -s 的第 ...

  4. Redis守护进程作用+数据类型

    Redis开启守护进程的作用: 在 linux 中,每一个系统与用户进行交流的界面称为终端 如果没有开启守护进程,相当于知识在前台开启了Redis,当终端关闭时,Reids服务也会跟着关闭 而开启守护 ...

  5. html 垂直并列显示

    笔者在制作登陆网页的时候,发现让input居中十分困难,笔者在网上搜了好久都没有结果,所以就想出了一个硬核的纯html的解决方法 直接上代码: <div style="text-ali ...

  6. Java反编译反混淆神器 - CFR

    最近有大量jar包需要反编译后使用,但是由于jar包中的类被混淆过了,直接反编译以后的里面所有的变量都是一个名字.所以这里介绍一个反混淆神器:CRF. 不知道是不是官网的链接:http://www.b ...

  7. 通用寄存器_MOV_ADD_SUB_AND_OR_NOT

    通用寄存器 MOV指令 注意:目标操作数与操作数宽度必须一样 MOV 目标操作数,源操作数 作用:拷贝源操作数到目标操作数 1.源操作数可以是立即数.通用寄存器.段寄存器.或者内存单元. 2.目标操作 ...

  8. session、cookie、token的区别

    从安全性优先级来说: 1.优先级 Cookie<session<token 2. 安全性 Cookie: ①cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺 ...

  9. Hbase RIT故障修复

    业务场景: RocketMQ+Storm+Hbase 组件版本: RocketMQ:3.4.6 Storm:1.2.1 Hbase:1.2.1 1. 问题描述 4月15号早上发现业务系统前一天数据量明 ...

  10. Nginx 路由转发和反向代理 location 配置

    Nginx 配置的三种方式 第一种直接替换 location 匹配部分 第二种 proxy_pass 的目标地址,默认不带 /,表示只代理域名,url 和参数部分不会变(把请求的 path 拼接到 p ...