一、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. 超级电容(Supercapacitor) 和电池的比较

    之前看到同事在电路设计里使用了超级电容来进行供电,好奇为什么没有用到普通的电池,于是就是找了找两个的区别.有篇文章讲得挺好,所以就直接翻译一下. 超级电容有点像普通电池和一般电容的结合体,能比一般的电 ...

  2. 如何实现Application event,观察者模式

    spring 事件为bean 与 bean之间传递消息.一个bean处理完了希望其余一个接着处理.这时我们就需要其余的一个bean监听当前bean所发送的事件. spring事件使用步骤如下: 1.先 ...

  3. Android——spinner控件实现读取xml资源,省、市两级互动

    (1)首先在res文件夹下面的values中创建一个省市arrays.xml文件夹,如下 <?xml version="1.0" encoding="utf-8&q ...

  4. 三目运算符(C++)

    一.简介 固定格式 ?: 三目运算符:可用于赋值语句 三目运算表达式:<表达式1>?<表达式2>:<表达式3> 注:"?"运算符的含义是: 先求 ...

  5. Phoneix(二)HBase集成Phoenix安装

    一.软件下载 1.访问:http://phoenix.apache.org/ 2.点击: 3.进入以下内容:点击 4.跳转到 5.跳转到 6.点击安装包,进入 点击进行下载: 二.安装 phoneni ...

  6. python 3.6 导入c++dll所遇到的坑

    1 返回值在c++里面为const char*,python 接收实际上为int类型 原因:python默认返回值为int 解决方法: import ctypes import os CUR_PATH ...

  7. NOIP初赛篇——09原码、反码和补码

    一.数的原码.补码和反码表示 机器数和真值 ​ 在计算机中,表示数值的数字符号只有0和1两个数码,我们规定最高位为符号位,并用0表示正符号,用1表示负符号.这样,机器中的数值和符号全"数码化 ...

  8. virsh常见命令笔记

    [基本命令] virsh start 启动 shutdown 关闭 destroy 强制断电 suspend 挂起 resume 恢复 undefine 删除 dominfo 查看配置信息 domif ...

  9. ps -eo 用户自定义格式显示

    [root@ma ~]# ps -eo pid,ucomm|head -3 PID COMMAND 1 init 2 kthreadd[root@ma ~]# ps axu|head -3USER P ...

  10. 【Oracle】Oracle SQL的优化软件

    对于SQL开发人员和DBA来说,根据业务需求写出一条正确的SQL很容易.但是SQL的执行性能怎么样呢?能优化一下跑得更快吗?如果不是资深  DBA,估计很多人都没有信心. 幸运的是,自动化优化工具可以 ...