- 文章标签: java nosql hadoop gis
- 版权:CC 4.0 BY-SA
版权声明:本文为CSDN博主「yangdengxian」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangdengxian/article/details/113727936
GeoServer+GeoMesa+HBase 时空大数据环境搭建
1. 技术栈介绍
随着互联网技术日益发展,庞大的数据量,传统关系型数据库已无法满足业务需求,需结合 NoSQL 型数据库来应对时空海量数据和业务发展。针对日前互联网外出交通出行,位置点实时监控与轨迹播放等场景,提供一套有效的技术方案来满足需求。本文选型 Geomesa + HBase 技术栈,教大家搭建一套属于自己的单机版时空大数据环境,自下而上的技术组件介绍,希望能使大家清晰的掌握该组合技术栈。
1.1 Hadoop+HBase
HBase 用于时空数据的存储,实时监控点的更新,以及海量轨迹路线的存储。(感兴趣的博友可以与此对比 Orcale、PostgreSQL 数据库)
- http://hadoop.apache.org/
- https://blogs.apache.org/hbase/
1.2 GeoMesa
GeoMesa 是一款开源的基于分布式计算系统的面向海量时空数据查询与分析的工具包,它支持多种可扩展的、基于云端的数据存储架构,包括 Apache Accumulo, HBase,Cassandra,Google Bigtable,以及用于流计算的 Apache Kafka 。同时 GeoMesa 还可以和 Apache Storm 一起处理流数据,并使用 Spark 进行空间分析。 同时,GeoMesa 以 GeoServer 插件的形式为 GeoServer 提供了读取 GeoMesa 表的功能。在 GeoServer 中,GeoMesa 表作为一种数据源存在,通过 GeoServer,用户可以通过 WMS/WFS 的形式访问 GeoMesa 的数据。
- https://www.geomesa.org/
1.3 GeoServer
GeoServer 是一款优秀的基于 OGC(开放地理信息联盟)标准开发的数据渲染和电子地图生产服务引擎。
- http://geoserver.org/
1.4 OpenLayers/Leaflet/Mapbox-GL/Cesium
本文使用 OpenLayers 完成电子地图的浏览器端展示,根据客户需求也可选择 Leaflet、Mapbox-GL、Cesium 等技术栈
- https://www.openlayers.org/
- https://www.leafletjs.com/
- https://www.mapbox.com/
- https://www.cesium.com/
2. 部署环境
2.1 环境依赖
- Ubuntu 16.04(操作系统)
- JDK8 (使用企业免费版Oracle JDK 8u201,或开源社区版OpenJDK 8u292)
- Maven (3.6.3)
- Tomcat(8.5.5)
- Hadoop(本文使用2.8.5)
- Zookeeper (3.4.14)
- HBase(1.4.13)
- Geomesa-hbase(2.11-3.1.0)
- Geoserver(2.17.x)
2.2 Hadoop 安装
2.2.1 SSH的安装、配置
sudo apt-get install ssh
ssh-keygen -t ed25519
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
ssh localhost
2.2.2 下载 Hadoop 压缩包
- http://archive.apache.org/dist/hadoop/core/hadoop-2.8.5/hadoop-2.8.5.tar.gz
2.2.3 命令行解压
tar xvf hadoop-2.8.5.tar.gz
2.2.4 配置
-
环境变量配置(可选择 Hadoop 安装路径)
sudo vim /etc/profile export HADOOP_HOME=/home/ubuntu/soft/hadoop-2.8.5 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # 更新环境变量 source /etc/profile # 验证 Hadoop 是否配置成功 ubuntu@ubuntu:~$ hadoop version Hadoop 2.8.5
-
hadoop-env.sh 文件配置
新增 Java 环境变量配置
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
-
hdfs(name 和 data 节点)配置
cd hadoop-2.8.5
hdfs-site.xml 配置:
vim ./etc/hadoop/hdfs-site.xml
dfs.replication 1 dfs.namenode.name.dir file:/home/ubuntu/soft/hadoop-2.8.5/tmp/dfs/name dfs.datanode.data.dir file:/home/ubuntu/soft/hadoop-2.8.5/tmp/dfs/data dfs.http.address 0.0.0.0:50070 dfs.permissions false need not permissions core-site.xml 配置:
vim ./etc/hadoop/core-site.xml
hadoop.tmp.dir file:/home/ubuntu/soft/hadoop-2.8.5/tmp Abase for other temporary directories. fs.defaultFS hdfs://0.0.0.0:9000 namenode 格式化,启动 namenode 和 datanode
hdfs namenode -format start-dfs.sh
打开 http://192.168.1.5:50070/ 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件
2.3 ZooKeeper 安装
zk 安装相对容易,这里不再赘述,附上其他博友安装链接供大家参考
- https://www.cnblogs.com/kingsonfu/p/10631332.html
2.4 HBase 安装
本文 HBase 使用外部 ZooKeeper
2.4.1 从国内镜像站点下载 HBase 并解压
- https://mirrors.cnnic.cn/apache/hbase/1.4.13/hbase-1.4.13-bin.tar.gz
tar xvf hbase-1.4.13.tar.gz
2.4.2 配置
-
环境变量配置
export HBASE_HOME=/home/ubuntu/soft/hbase-1.4.13 export PATH=$HBASE_HOME/bin:$PATH
-
编辑 hbase-env.sh
# java配置 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 外部zk,如果使用hbase自带zk,修改为true export HBASE_MANAGES_ZK=flase
-
编辑 hbase-site.xml
hbase.rootdir hdfs://192.168.1.5:9000/hbase hbase.cluster.distributed true hbase.zookeeper.quorum 192.168.1.5:2181 hbase.tmp.dir /home/ubuntu/soft/hbase-1.4.13/tmp hbase.zookeeper.property.dataDir /home/ubuntu/soft/zookeeper-3.4.14/data -
配置 region servers
可配置单节点 zk 或者多节点 zk
192.168.1.5
-
HBase 安装验证与启动
# HBase 安装验证 ubuntu@ubuntu:~$ hbase version HBase 1.4.13 # HBase 启动 start-hbase.sh
-
验证是否使用外部 zk,浏览器验证 HBase 界面化
ubuntu@ubuntu:~$ zkCli.sh
zk 连接服务会有 HBase 服务
浏览器验证 http://192.168.1.5:16010/master-status
2.5 Geomesa+HBase 部署
可以使用 Geomesa+HBase 源码安装,也可使用发行版本安装,本文选择发行版安装。
如果使用源码安装请参照阿里云潇博士安装文章:
- https://blog.csdn.net/xiaof22a/article/details/80215787
发行版安装包下载路径:
- https://github.com/locationtech/geomesa/releases/download/geomesa_2.11-3.1.0/geomesa-hbase_2.11-3.1.0-bin.tar.gz
2.5.1 下载解压
$ tar xvf geomesa-hbase_2.11-3.1.0-bin.tar.gz
$ cd geomesa-hbase_2.11-3.1.0
$ ls
bin/ conf/ dist/ docs/ examples/ lib/ LICENSE.txt logs/
2.5.2 环境变量配置
vim ~/.bashrc
# 配置 GEOMESA_HBASE_HOME
export GEOMESA_HBASE_HOME="/home/ubuntu/soft/geomesa-hbase_2.11-3.1.0"
export GEOMESA_LIB="/home/ubuntu/soft/geomesa-hbase_2.11-3.1.0/lib"
export GEOMESA_LOG_DIR="/home/ubuntu/soft/geomesa-hbase_2.11-3.1.0/logs"
export PATH=${GEOMESA_HBASE_HOME}/bin:$PATH
- Hbase2 请使用 geomesa-hbase-distributed-runtime-hbase2_2.11-3.1.0.jar
- Hbase1 请使用 geomesa-hbase-distributed-runtime-hbase1_2.11-3.1.0.jar
${GEOMESA_HBASE_HOME}/dist/hbase/geomesa-hbase-distributed-runtime-hbase1_2.11-3.1.0.jar
拷贝到${HBase_HOME}/lib
目录下
2.5.3 注册 coprocessor
GeoMesa 使用 HBase 提供的 coprocessor 工具将处理过程移动到服务器端运行来提高查询效率,最简单的注册方式就是直接修改 hbase-site.xml ,增加以下内容:
hbase.coprocessor.user.region.classes
org.locationtech.geomesa.hbase.coprocessor.GeoMesaCoprocessor
2.5.4 初始化 GeoMesa-HBase
bin/geomesa-hbase configure
2.5.5 存储测试数据
-
下载 shp 矢量数据(包括点、线、面)
- http://download.geofabrik.de/asia/
如果已有 GeoServer
请用 geoserver lib 包jts-core-$version.jar
替换 geomesa-hbase 的jts-core
包,避免版本冲突导致数据导入 HBase 报错-
数据入 HBase
geomesa-hbase ingest --catalog gis_osm_pois_free_1 --feature-name gis_osm_pois_free_1 --input-format shp /home/ubuntu/data/china-latest-free.shp/gis_osm_pois_free_1.shp
-
geomesa-hbase 命令行参数说明
- https://www.geomesa.org/documentation/stable/user/hbase/usage.html
2.6. GeoServer 部署
GeoServer 可使用源码编译
https://github.com/geoserver/geoserver/tree/2.17.5- https://github.com/liuqun/geoserver/tree/liuqun-v2.19.1
本文使用war包+tomcat运行
- http://geoserver.org/release/2.17.5/
2.6.1 tomcat运行geoserver war包
2.6.2 替换geomesa-hbase jts-core包
参考 2.5.5.2 小节
2.6.3 整合 GeoMesa+HBase
将
$GEOMESA_HBASE_HOME/dist/gs-plugins/geomesa-hbase-gs-plugin_2.11-$VERSION-install.tar.gz
解压到WBE-INF/lib
路径下;由于 geomesa-hbase-gs-plugin 并不包含有 Hadoop、HBase 有关的依赖 jar 文件,所以需要手动将以下 jar 文件复制到
WBE-INF/lib
路径下(仔细观察 GeoServer 相关包是否已存在,小心 jar 冲突)
HBase-1.x 依赖包:
commons-cli-1.2.jar
commons-configuration-1.6.jar
commons-io-2.5.jar
commons-logging-1.1.3.jar
hadoop-auth-2.8.5.jar
hadoop-client-2.8.5.jar
hadoop-common-2.8.5.jar
hadoop-hdfs-2.8.5.jar
hadoop-hdfs-client-2.8.5.jar
hadoop-mapreduce-client-core-2.8.5.jar
hbase-client-1.4.13.jar
hbase-common-1.4.13.jar
hbase-hadoop-compat-1.4.13.jar
hbase-protocol-1.4.13.jar
htrace-core-3.1.0-incubating.jar
htrace-core4-4.1.0-incubating.jar
metrics-core-2.2.0.jar
netty-3.6.2.Final.jar
netty-all-4.1.48.Final.jar
protobuf-java-2.5.0.jar
zookeeper-3.4.14.jar
2.6.4 启动 Tomcat
浏览器地址访问:http://192.168.1.5:8080/
新增 geomesa-hbase 数据存储
2.6.5 OpenLayers 浏览器效果预览
3 GeoMesa+HBase 探索
3.1 如何实现类似 PostgreSQL + PostGIS 数据库功能,可以在同一 datastore 中多表访问,而不是每个表对应一个 datastore
3.2 面数据 GeoMesa-HBase 导入错误解决
Caused by: java.lang.NoSuchMethodError: org.locationtech.jts.geom.Polygon.getExteriorRing()Lorg/locationtech/jts/geom/LinearRing;
4.结尾总结
本文总结了完整的 GeoMesa+HBase 技术栈,由于技术有限,难免有错误之处,希望博友可以不辞指正,也可在下方评论区留言,博主会及时回复。希望能帮到各位博友
————————————————
版权声明:本文为CSDN博主「yangdengxian」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangdengxian/article/details/113727936