GeoMesa是一个运行在分布式计算系统上,支持大规模时空矢量数据查询和分析的开源工具。
本文介绍GeoMesa安装,以及来自官方的Quick Start教程(基于HBase)。
第一部分 GeoMesa的安装
1.下载
从Github下载已经编译好的二进制文件,解压至目标目录
# download and unpackage the most recent distribution:
wget "https://github.com/locationtech/geomesa/releases/download/geomesa_2.11-$VERSION/geomesa-hbase-dist_2.11-$VERSION-bin.tar.gz"
tar xvf geomesa-hbase-dist_2.11-$VERSION-bin.tar.gz
cd geomesa-hbase-dist_2.11-$VERSION
ls
bin/ conf/ dist/ docs/ examples/ lib/ LICENSE.txt logs/
或者下载源码,使用Maven手动编译
2.配置classpath
GeoMesa for HBase需要使用Hadoop和HBase,读取他们的配置文件,因此需要设置几个环境变量。
export HADOOP_HOME=/path/to/hadoop
export HBASE_HOME=/path/to/hbase
export GEOMESA_HBASE_HOME=/opt/geomesa
export PATH="${PATH}:${GEOMESA_HOME}/bin"
GeoMesa 推荐在geomesa-hbase_2.11-$VERSION/conf/geomesa-env.sh文件中设置以上环境变量,也可以在.bashrc或/etc/profile中设置。
由于许可的原因,需要手动执行以下命令,安装两个插件:
bin/install-jai.sh
bin/install-jline.sh
3.部署jar包
GeoMesa for HBase需要使用本地过滤器来加速查询,因此需要将GeoMesa的runtime JAR包,拷贝到HBase的库目录下。
官网给的默认设置是拷贝至HDFS中,其中${hbase.dynamic.jars.dir}是${hbase.rootdir}/lib:
hadoop fs -put ${GEOMESA_HBASE_HOME}/dist/hbase/geomesa-hbase-distributed-runtime-$VERSION.jar ${hbase.dynamic.jars.dir}/
但我执行了却不起作用,而是要将这个jar包复制到HBase的安装目录的lib文件夹中。
注意:如果是分布式环境,需要将其复制到每一个节点。
4. 注册协处理器(Coprocessors)
注册的过程其实就是使HBase在运行时能够访问到geomesa-hbase-distributed-runtime的jar包。官网给出了几种方法实现这一目标,最方便的是在HBase的配置文件hbase-site.xml添加如下内容:
<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>org.locationtech.geomesa.hbase.coprocessor.GeoMesaCoprocessor</value>
</property>
注意:如果是分布式环境,需要在每一个节点都添加相同的内容。
5. 设置命令行工具
在完成以上设置后,GeoMesa的主要部分就安装完成了。可以使用 bin/geomesa-hbase
命令调用GeoMesa的命令行工具,执行一系列的功能。
这里要额外设置的是使用如下命令,将HBase配置文件hbase-site.xml打包进geomesa-hbase-datastore_2.11-$VERSION.jar中:
zip -r lib/geomesa-hbase-datastore_2.11-$VERSION.jar hbase-site.xml
这一步的目的是确保在MapReduce任务中,GeoMesa能够顺利访问到该文件。
6.在Geoserver中安装GeoMesa插件(可选)
这一步是为了使用GeoMesa作为数据源,在geoserver中发布标准地图服务,进行可视化的工作。如果没有这个需求可以忽略。
首先安装Geoserver,这里省略,可以查看参考资料。
geoserver安装成功后,将以下的jar包复制到geoserver/WEB-INF/lib目录下。
hadoop-annotations-2.7.4.jar
hadoop-auth-2.7.4.jar
hadoop-common-2.7.4.jar
hadoop-mapreduce-client-core-2.7.4.jar
hadoop-yarn-api-2.7.4.jar
hadoop-yarn-common-2.7.4.jar
htrace-core-3.1.0-incubating.jar
commons-cli-1.2.jar
commons-io-2.5.jar // (you may need to remove an older version (2.1) from geoserver)
hbase-common-1.2.6.jar
hbase-client-1.2.6.jar
hbase-server-1.2.6.jar
hbase-protocol-1.2.6.jar
metrics-core-2.2.0.jar
netty-3.6.2.Final.jar
netty-all-4.0.41.Final.jar
zookeeper-3.4.10.jar
commons-configuration-1.6.jar
再将
$GEOMESA_HBASE_HOME/dist/gs-plugins/geomesa-hbase-gs-plugin_2.11-$VERSION-install.tar.gz
文件解压,把得到的jar包复制到geoserver/WEB-INF/lib目录。
注意:要移除geoserver/WEB-INF/lib目录下的jackson-core-2.5.0.jar文件,使用更新的版本jackson-core-2.6.x.jar替换。最后,在geoserver/WEB-INF/classes目录下,创建软连接,使其能够访问HBase配置文件hbase-site.xml:
ln -s /path/to/hbase-site.xml /path/to/geoserver/WEB-INF/classes/hbase-site.xml
启动Tomcat,访问Geoserver后台,在新建数据源的选项中可以看到HBase(GeoMesa)的选项,说明安装成功了,如下图所示。
不过,目前HBase中还没有数据,不能发布地图服务。在Quick Start中,我们会往HBase中写入数据,并使用Geoserver进行可视化。
第二部分 Quick Start教程
1.下载并构建教程
下载:
git clone https://github.com/geomesa/geomesa-tutorials.git
cd geomesa-tutorials
切换至你正在使用的GeoMesa版本:
git checkout tags/geomesa-tutorials-$TUTORIAL_VERSION
查看pom.xml文件,修改hadoop和hbase版本,要和你已安装的版本保持一致。修改后,使用maven进行构建:
mvn clean install -pl geomesa-tutorials-hbase/geomesa-tutorials-hbase-quickstart -am
建议在构建之前,将mvn的源设置为国内的,可以大幅提高构建速度。另外,如果在构建中遇到了长时间没有响应的情况,可以使用Ctrl+C停止,并再次运行以上命令。
2. 运行教程
构建成功后,在命令行执行以下命令:
java -cp geomesa-tutorials-hbase/geomesa-tutorials-hbase-quickstart/target/geomesa-tutorials-hbase-quickstart-$VERSION.jar \
org.geomesa.example.hbase.HBaseQuickStart \
--hbase.zookeepers <zookeepers> \
--hbase.catalog <table>
--hbase.zookeepers
填zookeeper的位置,在单机模式下,这个值为localhost。对于已经将hbase-site.xml设为GeoMesa能够访问的情况(按照第一部分完成安装),则这一项可以不填。
--hbase.catalog
填HBase表的名称,用于存放测试数据。所填的表要么为空,要么不存在,否则会出错。
正常情况下,你应该得到如下的结果:
Loading datastore
Creating schema: GLOBALEVENTID:String,Actor1Name:String,Actor1CountryCode:String,Actor2Name:String,Actor2CountryCode:String,EventCode:String,NumMentions:Integer,NumSources:Integer,NumArticles:Integer,ActionGeo_Type:Integer,ActionGeo_FullName:String,ActionGeo_CountryCode:String,dtg:Date,geom:Point:srid=4326
Generating test data
Writing test data
Wrote 2356 features
Running test queries
Running query BBOX(geom, -120.0,30.0,-75.0,55.0) AND dtg DURING 2017-12-31T00:00:00+00:00/2018-01-02T00:00:00+00:00
01 719027236=719027236|UNITED STATES|USA|INDUSTRY||012|1|1|1|3|Central Valley, California, United States|US|2018-01-01T00:00:00.000Z|POINT (-119.682 34.0186)
02 719027005=719027005|UNITED STATES|USA|||172|2|2|2|3|Long Beach, California, United States|US|2018-01-01T00:00:00.000Z|POINT (-118.189 33.767)
03 719026204=719026204|JUDGE||||0214|6|1|6|3|Los Angeles, California, United States|US|2018-01-01T00:00:00.000Z|POINT (-118.244 34.0522)
04 719025745=719025745|KING||||051|4|2|4|2|California, United States|US|2018-01-01T00:00:00.000Z|POINT (-119.746 36.17)
05 719026858=719026858|UNITED STATES|USA|||010|20|2|20|2|California, United States|US|2018-01-01T00:00:00.000Z|POINT (-119.746 36.17)
06 719026964=719026964|UNITED STATES|USA|||081|2|2|2|2|California, United States|US|2018-01-01T00:00:00.000Z|POINT (-119.746 36.17)
07 719026965=719026965|CALIFORNIA|USA|||081|8|1|8|2|California, United States|US|2018-01-01T00:00:00.000Z|POINT (-119.746 36.17)
08 719025635=719025635|PARIS|FRA|||010|2|1|2|3|Las Vegas, Nevada, United States|US|2018-01-01T00:00:00.000Z|POINT (-115.137 36.175)
09 719026918=719026918|UNITED STATES|USA|||042|20|5|20|3|Las Vegas, Nevada, United States|US|2018-01-01T00:00:00.000Z|POINT (-115.137 36.175)
10 719027141=719027141|ALABAMA|USA|JUDGE||172|8|1|8|2|Nevada, United States|US|2018-01-01T00:00:00.000Z|POINT (-117.122 38.4199)
Returned 669 total features
Running query BBOX(geom, -120.0,30.0,-75.0,55.0) AND dtg DURING 2017-12-31T00:00:00+00:00/2018-01-02T00:00:00+00:00
Returning attributes [GLOBALEVENTID, dtg, geom]
01 719027208=719027208|2018-01-01T00:00:00.000Z|POINT (-89.6812 32.7673)
02 719026313=719026313|2018-01-01T00:00:00.000Z|POINT (-84.388 33.749)
03 719026419=719026419|2018-01-01T00:00:00.000Z|POINT (-84.388 33.749)
04 719026316=719026316|2018-01-01T00:00:00.000Z|POINT (-83.6487 32.9866)
05 719027132=719027132|2018-01-01T00:00:00.000Z|POINT (-81.2793 33.4968)
06 719026819=719026819|2018-01-01T00:00:00.000Z|POINT (-81.9296 33.7896)
07 719026952=719026952|2018-01-01T00:00:00.000Z|POINT (-81.9296 33.7896)
08 719026881=719026881|2018-01-01T00:00:00.000Z|POINT (-82.0193 34.146)
09 719026909=719026909|2018-01-01T00:00:00.000Z|POINT (-82.0193 34.146)
10 719026951=719026951|2018-01-01T00:00:00.000Z|POINT (-82.0193 34.146)
Returned 669 total features
Running query EventCode = '051'
01 719024909=719024909|||MELBOURNE|AUS|051|10|1|10|4|Melbourne, Victoria, Australia|AS|2018-01-01T00:00:00.000Z|POINT (144.967 -37.8167)
02 719025178=719025178|AUSTRALIA|AUS|COMMUNITY||051|20|2|20|4|Sydney, New South Wales, Australia|AS|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
03 719025965=719025965|MIDWIFE||||051|10|1|10|4|Sydney, New South Wales, Australia|AS|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
04 719025509=719025509|COMMUNITY||AUSTRALIA|AUS|051|2|1|2|1|Australia|AS|2018-01-01T00:00:00.000Z|POINT (135 -25)
05 719025742=719025742|KING||||051|22|3|22|3|San Diego, California, United States|US|2018-01-01T00:00:00.000Z|POINT (-117.157 32.7153)
06 719025745=719025745|KING||||051|4|2|4|2|California, United States|US|2018-01-01T00:00:00.000Z|POINT (-119.746 36.17)
07 719025743=719025743|AUTHORITIES||||051|60|12|60|3|Wichita, Kansas, United States|US|2018-01-01T00:00:00.000Z|POINT (-97.3375 37.6922)
08 719027205=719027205|UNITED STATES|USA|SIOUX||051|4|1|4|3|Sioux City, Iowa, United States|US|2018-01-01T00:00:00.000Z|POINT (-96.4003 42.5)
09 719025111=719025111|||UNITED STATES|USA|051|2|1|2|3|Pickens County, South Carolina, United States|US|2018-01-01T00:00:00.000Z|POINT (-82.7165 34.9168)
10 719026938=719026938|PITTSBURGH|USA|||051|5|1|5|3|York County, Pennsylvania, United States|US|2018-01-01T00:00:00.000Z|POINT (-77 40.1254)
Returned 138 total features
Running query EventCode = '051' AND dtg DURING 2017-12-31T00:00:00+00:00/2018-01-02T00:00:00+00:00
Returning attributes [GLOBALEVENTID, dtg, geom]
01 719024909=719024909|2018-01-01T00:00:00.000Z|POINT (144.967 -37.8167)
02 719025178=719025178|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
03 719025965=719025965|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
04 719025509=719025509|2018-01-01T00:00:00.000Z|POINT (135 -25)
05 719025742=719025742|2018-01-01T00:00:00.000Z|POINT (-117.157 32.7153)
06 719025745=719025745|2018-01-01T00:00:00.000Z|POINT (-119.746 36.17)
07 719025743=719025743|2018-01-01T00:00:00.000Z|POINT (-97.3375 37.6922)
08 719027205=719027205|2018-01-01T00:00:00.000Z|POINT (-96.4003 42.5)
09 719025111=719025111|2018-01-01T00:00:00.000Z|POINT (-82.7165 34.9168)
10 719026938=719026938|2018-01-01T00:00:00.000Z|POINT (-77 40.1254)
Returned 138 total features
Cleaning up test data
Done
如果出错,说明GeoMesa没有安装成功,或者是底层的HDFS、HBase出了问题,要根据错误提示具体分析。
从输出结果可以看出,这一实例程序完成了创建schema、写入features、空间查询、属性查询等操作。具体实现可以查看教程中的源代码文件。
3. 使用Geoserver进行可视化
首先需要按照第一部分的内容,在geoserver中安装GeoMesa的插件。
然后,进入geoserver后台,依次点击:
数据存储 =》 添加新的数据存储 =》HBase (GeoMesa)进入“新建矢量数据源”页面,填写以下项目的内容:
数据源名称 —— 随意填写一个有意义的名称,如“geomesa_quick_start”
hbase.catalog—— 存放测试数据的HBase表名称,根据前一步运行的命令填写
hbase.zookeepers —— 可不填,情况和前一步运行的命令时相同,不再赘述最后,点击“保存”,再点击“发布”,即可完成地图服务的发布。
效果展示:
可点击地图查看数据点的详细信息,也可配置SLD文件,展示更丰富的数据样式,如热力图等。
注意事项
- 在分布式环境下,一定要确保runtime JAR包被复制到了每一个节点,并且每一个节点的hbase-site.xml文件都添加了注册协处理器的配置项。
- 教程中的Geoserver版本是12.x,我试过使用更高的版本并修改pom.xml进行重新构建,结果在发布图层时出错。因此不建议使用12.x以外的其他版本的Geoserver。
- 若在运行教程的程序出现错误时,请先确定HBase的安装是否正确,增删改查功能是否能正常运行。