时空大数据实践之GeoWave安装部署实践
GeoWave是由国家地理空间情报局(NGA)与RadiantBlue和Booz Allen Hamilton合作技术开发的。GeoWave是一套类库,利用分布式键值存储的可伸缩性,从而有效的存储、检索和分析大量的地理数据集。目前是通过提供插件连接GeoTools和PDAL Accumulo基础数据存储。GeoWave的主要目标是成为流行的地理空间项目之间的桥梁,领域的分布式键值存储和分布式处理框架。地理空间操作往往是后期工作,或不能与许多这样的存储和计算能力融合。通过GeoWave让他们可以支持大众的应用提供一流的工具。
GeoWave的地理空间支持是建立在GeoTools扩展模型之上的,所以插件本身支持GeoServer,uDig和任何其他GeoTools兼容的项目,以及可以摄取GeoTools兼容的数据源。GeoWave是基于Accumulo开发实现而产生的。
本文将针对GeoWave的技术特点,并结合官方文档,展示软件在安装部署中完整的实践过程。由于GeoWave提供的官方文档有限而且可读性不强,所以希望本文可以为有兴趣实践的同学提供一些帮助。
GeoWave作为一个地理空间处理工具集以及一个分布式的键值存储系统,具有以下几个技术特点:
l 加入了基于Apache Accumulo多空间尺度的索引能力
l 加入了基于Apache Accumulo的地理对象和空间操作方法的支持
l 包含了一个GeoServer插件允许在Accumulo中的空间数据通过OGC标准的服务被分享或者被可视化
l 提供了Map-Reduce 的输入和输出格式用于分布式的处理和分析地理空间数据
GeoWave倾向于为Accumulo做更多工作,就像PostGIS为PostgreSQL做的一样。
GeoWave架构的核心概念就是数据输入、输出输出或者称作摄取和查询。在系统中固有两种类型的数据,分别是要素数据(Feature Data)和元数据(metadata)。要素数据是实际的属性和地理几何对象的集合,他们被存储下来用于后期的检索。元数据描述了数据是如何被持久化在数据库中的。元数据设计的目的是为数据检索和发现而存储必要的信息-所以一个现存的数据存储不会和在一个特定的外部服务器或者客户端上的一点配置关系在一起,而取而代之的是“自描述”。
GeoWave的三个关键技术,索引、适配器、键值存储。
通过GeoWave实现快速检索数据的核心引擎是基于SFC(space filling curve)的索引技术。这种索引可以配置不同的参数,包括等级数、空间维度数、空间维度类型(有界或无界)、任意空间尺度的值域等等。
为了存储几何对象,属性和其它信息需要一种可以序列化和反序列化的表述格式。一种提供出来处理要素序列化和反序列化的接口。GeoWave提供一种默认支持的功能,可以实现了对GeoTools简单要素类型的支持。更多的特殊的功能实现会晚些以接口的形式被提供出来。在适配器固化的数据表中存储了JAVA CLASS的指向路径。当数据被查询以及结果被转换为本地数据类型的时候,这些JAVA类会被动态的读取。
GeoWave允许用户定义自己的适配器,来对应各种数据的存储以及数据形式,可以是数据库,也可以是流数据。
图中描述了Accumulo数据存储的默认对象结构。索引ID直接来自于SFC实现的分层结构。我们不强制要求数据ID是全局唯一的,但他们应该对于适配器是唯一的。因此成对出现的适配器ID和数据ID成为了一个对于数据元素的唯一定义。Row ID的存储长度是4byte的整型,这可以完整的读取Row ID,因为这些ID长度可变。副本的数量也是存储在Row ID中,也为了通知这个元素重复数据过滤器是否需要暂时存储,确保不重复发送给调用者。Row ID内部的适配ID是独特的行ID,它作为一个整体的行迭代器被用于聚合字段可分配的过滤器。适配ID也被用作列家族机制仅供特定的适配器查询来获取相应的列家族。
GeoWave部署使用的环境包括:
操作系统:Redhat 6.5
Java版本:Jre 1.7
相关软件:Accumulo、Hadoop 2.6.3、Zookeeper 3.4.8
由于GeoWave提供的主要是rpm包,为了方便部署系统采用了Redhat。在安装运行GeoWave之前要安装部署完成Hadoop、Zookeeper、Accumulo,顺序最好是先完成Hadoop和Zookeeper的部署,最后部署Accumulo。
之前博客已经分享过相关内容,网上材料也比较多,不做赘述。说明一点,就是GeoWave是在单台机器上部署,所以并没有部署Hadoop集群,只是单机运行。
可以参考以下文章:http://coolxing.iteye.com/blog/1871009。本次测试GeoWave采用了单机模式。
安装部署可以参考在线用户手册,地址:http://www.nosqldb.cn/1373093083484.html
用户手册内容比较全,这里将安装部署的部分和相关设置做一介绍。
一、安装
下载地址:https://www.apache.org/dyn/closer.lua/accumulo/1.6.5/accumulo-1.6.5-bin.tar.gz
下载后,选择目录安装Accumulo。这个目录将被引用环境变量$ ACCUMULO_HOME。运行以下命令:
$ tar xzf accumulo-1.6.5-bin.tar.gz # unpack to subdirectory
$ mv accumulo-1.6.5-bin $ACCUMULO_HOME # move to desired location
二、依赖关系
Accumulo需要HDFS,ZooKeeper的配置,运行开始之前需要配置好。至少Accumulo Master节点和TabletServer机之间密码应配置SSH。在集群中运行网络时间协议(NTP),以确保节点的时钟,不要太脱节,这可能会导致自动时间戳数据的问题。
三、配置
Accumulo需要配置编辑几个Shell文件和XML文件。这些文件保存在 $ ACCUMULO_HOME / conf目录下。其结构类似于Hadoop的配置文件。从$ ACCUMULO_HOME / conf/templates目录中,将master,slaves,accumulo-env.sh,accumulo-site.xml文件复制到$ ACCUMULO_HOME / conf 目录下。
四、编辑accumulo-env.sh
Accumulo需要知道在哪里可以找到它依赖于软件。编辑accumulo-env.sh指定以下内容:
1.输入的安装目录Accumulo为$ACCUMULO_HOME的位置
2.输入您系统的Java回家$ JAVA_HOME
3.Hadoop的输入位置为$ HADOOP_HOME
4.选择的位置Accumulo日志,并将其输入$ ACCUMULO_LOG_DIR“
5.输入的ZooKeeper为$ZOOKEEPER_HOME的位置
五、Accumulo设置
指定适当的值$ACCUMULO_HOME/conf目录中accumulo-site.xml中的下列设置:
<property>
<name>zookeeper</name>
<value>localhost:2181</value>
<description>list of zookeeper servers</description>
</property>
这使找到的ZooKeeper Accumulo。Accumulo使用ZooKeeper的协调过程,并有助于敲定TabletServer失败之间设置的。
<property>
<name>walog</name>
<value>walogs</value>
<description>local directory for write ahead logs</description>
</property>
Accumulo预写日志记录所有变更表,然后将它们提交到表。“walog设置指定预写日志写入到每台机器上的本地目录。这个目录应该存在所有机器上作为TabletServers的。
<property>
<name>instance.secret</name>
<value>DEFAULT</value>
</property>
实例需要一个加密,使服务器之间的安全通信。配置你的密码,并确保不向其他用户可读,accumulo-site.xml文件。
可以修改某些设置通过Accumulo shell,并立即生效,但一些设置需要一个重新启动过程才能生效。
六、初始化
必须初始化Accumulo创建的结构,它在内部使用集群中配置的数据位置。HDFS是必须要配置的,运行之前Accumulo可以初始化。
HDFS开始后,可以进行初始化通过执行 $ ACCUMULO_HOME /bin/ accumulo init。这个脚本会提示输入Accumulo实例名称。实例名称是用来确定一套表和特定于实例的设置。然后,该脚本将一些信息写入到HDFS,所以Accumulo可以正常启动。
初始化脚本会提示你设置root密码。一旦Accumulo初始化后,就可以开始。
八、运行
确保配置好Hadoop集群中的所有机器,包括访问共享HDFS实例。确保HDFS,ZooKeeper的运行。请确保ZooKeeper的配置和集群中的至少一台计算机上运行。启动Accumulo使用.bin/start-all.sh脚本。
为了验证,运行Accumulo,检查“状态”页面监控下 。此外,shell可提供一些信息表通过读取元数据表的状态。
GeoWave提供了RPM Repo的软件安装包。可以通过yum –enablerepo=geowave的命令来查询软件包的更新以及下载安装。具体的可参考命令如下。
# In the examples below the rpm name geowave-$VERSION-VENDOR_VERSION would be adjusted as needed
rpm -Uvh http://s3.amazonaws.com/geowave-rpms/release/noarch/geowave-repo-1.0-3.noarch.rpm
yum enablerepo=geowave search geowave-0.8.7-cdh5
# Install GeoWave Accumulo iterator on a host (probably a namenode)
yum enablerepo=geowave install geowave-0.8.7-cdh5-accumulo
# Update
yum enablerepo=geowave install geowave-0.8.7-cdh5-*
geowave-repo-1.0-3.noarch.rpm为主要的安装包,通过yum安装可以查看其依赖的相关软件包。GeoWave的软件包包括以下这些,可以根据需要选择安装。
在完成了之前关于Hadoop、Zookeeper、Accumulo的安装过程后,可以对GeoWave进行配置。
Accumulo 设置步骤:
1.运行Accumulo shell
这里前提需要将Accumulo的bin目录设置到环境变量中。然后运行Accumulo shell –u root命令,并输入密码(密码在之前Accumulo配置中在初始化中设置过了)
2.创建用户和表空间
createuser geowave
createnamespace geowave
3.分配用户表空间的所属关系
grant NameSpace.CREATE_TABLE -ns geowave -u geowave
4.创建数据路径,设置HDFS的数据路径。对于Cloudera是/accumulo目录而Hortonworks是在/apps/accumulo目录下。
config -s
general.vfs.context.classpath.geowave=hdfs://localhost:8020/ACCUMULO_ROOT/classpath/geowave/VERSION_AND_VENDOR_VERSION/[^.].*.jar
5.配置所有表包含的命名空间以使用应用的classpath,连接命名空间和应用classpath,调整标签可以适配不同用户或不同的应用名称。
config -ns geowave -s table.classpath.context=geowave
exit
测试GeoWave的数据摄取功能。首先下载测试数据,数据下载地址:
http://naciscdn.org/naturalearth/50m/cultural/ne_50m_admin_0_countries.zip
测试的命令和参数如下,略作调整,修改-z 为localhost:2181,用户名为root,密码为自己设置的Accumulo密码。ingest目录为Accumulo目录下。
命令执行成功后,数据会从shp数据中摄取到HDFS中,也可以在Zookeeper snapshot目录下查看相关日志信息。
通过以上GeoWave的综合介绍,我们需要了解到在GIS大数据发展进程中,各种开源框架都在从多角度对地理空间大数据提供工具型的研究成果,并逐步有了实质性的应用成果。但如何提供系统化的地理空间大数据的解决方案,需要综合分析。我们需要从数据模型、数据存储、数据摄取、数据分析处理、数据发布、数据可视化等多角度了解开源社区有关的技术框架,为我们提供帮助和借鉴。
GeoWave提供了一套数据摄取的工具集、插件和存储框架,支持多种数据源,包括shp,hdfs,以及和kafka结合的实时数据等等,最终将数据保存在HDFS中。而HDFS作为大数据通用的分布式数据文件系统,也就可以支持MapReduce、Spark等框架的并行数据处理分析,实现更深层的挖掘。
因此,我们将继续研究并验证GeoWave以及其他各种GIS框架技术,为实现最终的GIS+大数据技术解决方案作出努力。