1. 技术栈介绍
随着互联网技术日益发展,庞大的数据量,传统关系型数据库已无法满足业务需求,需结合Nosql型数据库来应对时空海量数据和业务发展。针对日前互联网外出交通出行,位置点实时监控与轨迹播放等场景,提供一套有效的技术方案来满足需求。本文选型Geomesa+HBase技术栈,教大家搭建一套属于自己的单机版时空大数据环境,自下而上的技术组件介绍,希望能使大家清晰的掌握该组合技术栈。
1.1 Hadoop+HBase
Hbase用于时空数据的存储,实时监控点的更新,以及海量轨迹路线的存储。(感兴趣的博友可以与此对比Orcale、Postgresql数据库)
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的数据。
1.3 Geoserver
Geoserver是一款优秀的基于OGC(开放地理信息联盟)标准开发的数据渲染和电子地图生产服务引擎。
1.4 OpenLayers
ol用于电子地图的浏览器端展示,也可选择leaflet、mapbox-gl-js等技术栈
2. 部署环境
2.1 环境依赖
- Ubuntu 16.04(操作系统)
- JDK8
- Maven (3.6.3)
- Tomcat(8.5.38)
- Hadoop(本文使用2.7.5)
- Zookeeper (3.4.9)
- HBase(2.1.0)
- Geomesa-hbase(2.11-3.2.0)
- Geoserver(2.17.2)
2.2 HAPOOP安装
2.2.1 SSH的安装、配置
sudo apt-get install ssh
ssh-keygen -t rsa
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
ssh localhost
2.2.2 下载hadoop压缩包
Index of /dist/hadoop/core/hadoop-2.7.5
2.2.3 命令行解压
tar zxvf hadoop-2.7.5.tar.gz
2.2.4 配置
a. 环境变量配置(可选择hadoop安装路径)
sudo vim /etc/profile
export HADOOP_HOME=/home/ubuntu/soft/hadoop-2.7.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 更新环境变量
source /etc/profile
# 验证hadoop是否配置成功
ubuntu@ubuntu:~$ hadoop version
Hadoop 2.7.5
b. hadoop-env.sh文件配置
新增java环境变量配置
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
c. hdfs(name和data节点)配置
cd hadoop-2.7.5
hdfs-site.xml配置
vim ./etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/ubuntu/soft/hadoop-2.7.5/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/ubuntu/soft/hadoop-2.7.5/tmp/dfs/data</value>
</property>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>need not permissions</description>
</property>
</configuration>
core-site.xml配置
vim ./etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/ubuntu/soft/hadoop-2.7.5/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<!--0.0.0.0便于其他服务器ip访问-->
<value>hdfs://0.0.0.0:9000</value>
</property>
</configuration>
namenode格式化,启动namenode和datanode
hdfs namenode -format
start-dfs.sh
打开http://192.168.1.200:50070/查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件
2.3 Zookeeper安装
zk安装相对容易,这里不再赘述
2.4 HBase安装
本文HBase使用外部zookeeper
2.4.1 下载解压
https://mirrors.cnnic.cn/apache/hbase/2.1.0/
tar zxvf hbase-2.1.0
2.4.2 配置
a. 环境变量配置
export HBASE_HOME=/home/ubuntu/soft/hbase-2.1.0
export PATH=$HBASE_HOME/bin:$PATH
b. 编辑hbase-env.sh
# java配置
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# 外部zk,如果使用hbase自带zk,修改为true
export HBASE_MANAGES_ZK=flase
c. 编辑hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<!--hdfs地址-->
<value>hdfs://192.168.1.5:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<!--zk集群可以使用zk1:2181;zk2:2181方式配置-->
<value>192.168.1.5:2181</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/ubuntu/soft/hbase-1.4.13/tmp</value>
</property>
<property>
<!--使用本地目录-->
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/ubuntu/soft/zookeeper-3.4.14/data</value>
</property>
</configuration>
d. 配置regionservers
可配置单节点zk,或者多节点zk
192.168.1.200
e. hbase安装验证与启动
# hbase安装验证
ubuntu@ubuntu:~$ hbase version
HBase 2.1.0
# hbase启动
start-hbase.sh
f. 验证是否使用外部zk,浏览器验证hbase界面化
ubuntu@ubuntu:~$ zkCli.sh
zk连接服务会有hbase服务
浏览器验证http://192.168.1.200:16010/master-status
2.5 Geomesa+HBase部署
可以使用geomesa+hbase源码安装,也可使用发行版本安装,本文选择发行版安装。
如果使用源码安装请参照阿里云潇博士安装文章:
GeoMesa-HBase部署实践_xiaof22a的博客-优快云博客_geomesa-hbase
发行版安装包下载路径
2.5.1 下载解压
$ tar xvf geomesa-hbase_2.11-3.2.0-bin.tar.gz
$ cd geomesa-hbase_2.11-3.2.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.2.0"
export GEOMESA_LIB="/home/ubuntu/soft/geomesa-hbase_2.11-3.2.0/lib"
export GEOMESA_LOG_DIR="/home/ubuntu/soft/geomesa-hbase_2.11-3.2.0/logs"
export PATH=${GEOMESA_HBASE_HOME}/bin:$PATH
Hbase2请使用geomesa-hbase-distributed-runtime-hbase2_2.11-3.2.0.jar
Hbase1请使用geomesa-hbase-distributed-runtime-hbase1_2.11-3.2.0.jar
${GEOMESA_HBASE_HOME}/dist/hbase/geomesa-hbase-distributed-runtime-hbase1_2.11-3.2.0.jar拷贝到${HBase_HOME}/lib目录下
2.5.3 注册coprocessor
Geomesa使用HBase提供的coprocessor工具将处理过程移动到服务器端运行来提高查询效率,最简单的注册方式就是直接修改hbase-site.xml,增加以下内容:
<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>org.locationtech.geomesa.hbase.coprocessor.GeoMesaCoprocessor</value>
</property>
2.5.4 初始化geomesa-hbase
bin/geomesa-hbase configure
2.5.5 存储测试数据
a. 下载shp数据
b. 如果已有geoserver
请用geoserver lib包jts-core-$version.jar替换geomesa-hbase的jts-core包,避免版本冲突导致数据导入hbase报错
c. 数据入hbase
geomesa-hbase ingest
--catalog qnl
--feature-name qnl
--input-format shp /export/soft/shp/qnl.shp
c. geomesa-hbase命令行参数说明
14.3. Using the HBase Data Store Programmatically — GeoMesa 3.3.0 Manuals
2.6. Geoserver部署
geoserver可使用源码编译
GitHub - geoserver/geoserver: Official GeoServer repository
本文使用war包+tomcat运行
2.6.1 tomcat运行geoserver war包
2.6.2 替换geomesa-hbase jts-core包
参考2.5.5 b
2.6.3 整合geomesa-hbase
a. 将 $GEOMESA_HBASE_HOME/dist/gs-plugins/geomesa-hbase-gs-plugin_2.11-$VERSION-install.tar.gz解压到WBE-INF/lib路径下;
b. 由于geomesa-hbase-gs-plugin并不包含有Hadoop、HBase有关的依赖jar文件,所以需要手动将以下jar文件复制到WBE-INF/lib路径下(仔细观察geoserver相关包是否已存在,小心jar冲突)
hbase1依赖包
2.6.4 启动tomcat
浏览器地址访问:http://192.168.1.200:8090/
新增geomesa-hbase数据存储
2.6.5 openlayers浏览器效果预览
3 geomesa+hbase探索(希望一起讨论,给出解决办法)
3.1 如何实现类似postgresql + postgis数据库功能,可以在同一datastore中多表访问,而不是每个表对应一个datastore
3.2 geoserver在放大的过程中会出现如下错误,但是继续放大后消失
Caused by: java.lang.NoSuchMethodError: org.locationtech.jts.geom.Polygon.getExteriorRing()Lorg/locationtech/jts/geom/LinearRing;
3.3 导入base中的数据,利用geoserver发布,计算边框始终不对,导致加载的层级有问题。
3.4 导入hbase的shp文件不能含有ID字段,否则报错这是保留字段
3.5 导入hbase中的数据存在乱码情况
4.结尾总结
本文总结了完整的geomesa-hbase技术栈,由于技术有限,难免有错误之处,希望博友可以不辞指正,也可在下方评论区留言,博主会及时回复。希望能帮到各位博友