一、 安装
官网说明GeoMesa
需要Hbase1.3
版本或1.4版本,安装GeoMesa
前首先安装Hbase1.3以上版本。
1.1 Hbase安装
由于我之前装过Hbase1.2
,所以在Hbase1.2
版本的基础上升级Hbase
版本至1.4.9
。
我是将Hbase1.4.9
和Geomesa
安装在/opt/
目录下。
1.1.1 下载解压新版本安装包
下载HBase1.4.9
版本安装包hbase-1.4.9-bin.tar.gz
解压到指定/opt/
目录下
tar zxvf geomesa-hbase_2.11-2.1.0.tar.gz -C /opt/
1.1.2 配置环境变量:
将环境变量HADOOP_HOME
、HBASE_HOME
配置在~/.bash_profile
文件中:
export HADOOP_HOME=/usr/lib/hadoop
export HBASE_HOME=/opt/hbase-1.4.9
export HBASE_CLASSPATH=/etc/hadoop
export PATH=$HADOOP_HOME/bin:$HBASE_HOME/bin:$PATH
加载环境变量:
source ~/.bash_profile
1.1.3 HBase环境配置
为简化HBase
配置直接拷贝原HBase1.2.0
的配置文件并进行修改,拷贝/etc/hadoop
目录下6个配置文件覆盖到HBase1.4.9
的/opt/hbase-1.4.9/conf
目录,并创建/opt/hbase-1.4.9/logs
目录存储日志:
core-site.xml
hbase-env.sh
hbase-site.xml
hdfs-site.xml
masters
regionservers
只需要修改hbase-env.sh
文件中三项标星号的部分(注意文件中不要写上星号)。
hbase-env.sh:
export JAVA_HOME=/usr/lib/jdk1.8
export HBASE_LOG_DIR=/opt/hbase-1.4.9/logs
export HBASE_PID_DIR=/opt/hbase-1.4.9
export HBASE_MANAGES_ZK=false
* export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC"
* export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
* export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
export HADOOP_HOME=/usr/lib/hadoop
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HADOOP_HOME}/lib/native/
1.1.4 运行HBase1.4.9
- 卸载
HBase1.2.0
,检查并kill 掉HMaster
和HRegionServer
服务 - 删除
zookeeper
中原HBase
缓存文件(删除zk
上hbase
节点)
$ cd /usr/lib/zookeeper/bin
$ ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[zk: localhost:2181(CONNECTED) 1] rmr /hbase
[zk: localhost:2181(CONNECTED) 1] quit
-
重启zookeeper服务
./zkServer.sh restart
启动
HBase1.4.9
cd /opt/hbase-1.4.9/bin
./start-hbase.sh
1.2 GeoMesa安装
1.2.1 下载GeoMesa-Hbase
的二进制版本安装包
geomesa-hbase_2.11-2.1.0-bin.tar.gz
1.2.2 解压到/opt/
路径下
tar xvf geomesa-hbase-dist_2.11-2.1.0-bin.tar.gz –C /opt/
1.2.3 配置环境变量
在/etc/profile
文件中增加以下配置
export HADOOP_HOME=/path/to/hadoop
export HBASE_HOME=/path/to/hbase
export GEOMESA_HBASE_HOME=/path/to/geomesa
export PATH=$HADOOP_HOME/bin:$HBASE_HOME/bin:$GEOMESA_HBASE_HOME/bin:$PATH
1.2.4 为geomesa
安装依赖
在geomesa主目录下运行以下四个命令
$ bin/install-jai.sh
$ bin/install-jline.sh
$ bin/install-hadoop.sh
$ bin/install-hbase.sh
如果安装失败可以根据提示中的地址自己去下载下面jar
包,并将其放到geomesa
主目录的lib
目录下,主要包括下列jar
包依赖。
1.2.5 为geomesa-hbase
配置协处理器
(1) 创建hdfs
目录
hdfs dfs –mkdir /hbase/lib
(2) 将{geomesa_hbase_home}/dist/hbase/
目录下的geomesa-hbase-distributed-runtime_2.11-2.1.0.jar
拷贝到hdfs
上的hbase/lib
目录下
hadoop fs -put geomesa-hbase-distributed-runtime_2.11-2.1.0.jar /hbase/lib
(3) 同时将该jar
包放到hbase
安装目录下的/lib/
下
scp geomesa-hbase-distributed-runtime_2.11-2.1.0.jar /opt/hbase/lib
(4) 在Hbase-site.xml
注册协处理器
增加下面property配置项:
hbase.coprocessor.user.region.classes
org.locationtech.geomesa.hbase.coprocessor.GeoMesaCoprocessor
(5) 初始化Geomesa
在geomesa
主目录下的/bin/
下,执行以下命令:
[root@node69191 bin]# ./geomesa-hbase configure
1.3 重启Hbase
安装配置完成后,重启hbase
。
测试Geomesa
安装是否成功
[root@node69191 logs]# geomesa-hbase version
GeoMesa tools version: 2.0.2
Commit ID: 4e59c0952f46824ef31cbbc9b5152e44c70c1c8f
Branch: 4e59c0952f46824ef31cbbc9b5152e44c70c1c8f
Build date: 2018-06-11T19:14:09+0000
[root@node69191 logs]#
Bingo 完成。
二、 Geomesa协处理器
GeoMesa
利用服务器端处理来加速某些查询,为了利用这些功能,GeoMesa
协处理器必须在所有GeoMesa
表上注册,且geomesa-hbase-distributed-runtime
代码必须在hdfs
路径上可用。
Hbase
协处理器可理解为服务端的拦截器,能够将处理过程移动到服务器端运行来提高查询效率,即实现谓词下推。例如数据的过滤处理流程直接放到服务器端执行,就只需要返回一个小的处理后的结果集。
协处理器框架提供了Observer
和EndPoint
两种模块,通过继承这些类来扩展自己的功能。Observer
这类协处理器与触发器类似,定义了一些钩子函数在一些特定时间发生时被执行,Observer
提供了一些设计好的钩子函数,可以在集群服务器端被调用。EndPoint
模式的协处理器能够自定义一些操作并添加到服务端,用户代码可以被部署到管理数据的服务器端,在服务器端进行数据的处理执行,endpoint
通过添加一些RPC
调用来动态扩展RPC
协议。
2.1 协处理器实现
Geomesa
使用了EndPoint
模式来实现特定的功能,EndPoint
协处理器需要与服务端直接通信。服务端是对于Protobuf Service
的实现,客户端和服务端都需要进行基于接口的代码逻辑实现。
EndPoint
类比于数据库的存储过程,触发服务端基于Region
的同步运行,类似map
操作,然后将各个Region Server
的结果在客户端收集后归并计算,类似reduce
操作。
实现EndPoint
分三步走:
- 1.
Protobuf
编写和定义RPC
客户端与服务端存在RPC
通信,需要确定RPC
接口,Hbase
协处理器是通过protobuf
协议实现数据交换,故通过probuf
定义接口。
Geomesa
中的probuf
协议类为GeoMesaProto
,该类中定义的接口即Geomesa
希望通过协处理器实现的功能。
- 2.服务端代码实现
本质上来说,实现协处理器的框架,就是实现两点:
(1)继承Hbase
协处理器提供的EndPoint
抽象类或者接口
(2)基于框架代码填充业务逻辑
GeoMesa
的协处理主类为GeoMesaCoprocessor
class GeoMesaCoprocessor extends GeoMesaCoprocessorService with Coprocessor with CoprocessorService
我们可以看到它实现两个接口
Coprocessor
和 CoprocessorService
,Coprocessor
如上文提到,是Hbase
协处理器基础类,CoprocessorService
即为扩展的RPC
协议接口。
需要说明的是EndPoint
协处理器是针对单个Region
处理的,每一个计算结果都是对于单个Region
的数据范围的计算结果,开发时需要注意逻辑。
- 3.部署
Endpoint
协处理器
将定义的GeoMesaCoprocessor
协处理器打成jar
包部署到Hbase
。具体部署过程见 1.2.5 为geomesa-hbase配置协处理器
2.2 验证协处理器是否加载成功
2.2.1 在官网下载hbase-tutorials
源码进行测试。
2.2.3 进入源码的org.geomesa.example.hbase.HBaseQuickStart
类中,为主函数传入参数:
--hbase.zookeepers 1.1.1.1
--hbase.catalog wcy_geomesa
其中1.1.1.1时指zk
安装的ip
地址
具体操作如下图:
配好之后,运行HBaseQuickStart
的main
函数,查看输出结果。如果结果跟下面结果一直,则协处理器加载成功。
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 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 719025288=719025288|CANADA|CAN|||190|4|1|4|4|Penticton, British Columbia, Canada|CA|2018-01-01T00:00:00.000Z|POINT (-119.583 49.5)
02 719025945=719025945|DEPARTMENT OF EDUCATION||OBAMA|USA|090|20|2|20|2|North Dakota, United States|US|2018-01-01T00:00:00.000Z|POINT (-99.793 47.5362)
03 719025853=719025853|PRESIDENT||MEXICO|MEX|0874|3|3|3|2|Minnesota, United States|US|2018-01-01T00:00:00.000Z|POINT (-93.9196 45.7326)
04 719025856=719025856|PRESIDENT||MEXICO|MEX|131|3|3|3|2|Minnesota, United States|US|2018-01-01T00:00:00.000Z|POINT (-93.9196 45.7326)
05 719026960=719026960|UNITED STATES|USA|||071|6|1|6|2|Minnesota, United States|US|2018-01-01T00:00:00.000Z|POINT (-93.9196 45.7326)
06 719024925=719024925|||CORPORATION||172|2|1|2|4|Saskatoon, Saskatchewan, Canada|CA|2018-01-01T00:00:00.000Z|POINT (-106.667 52.1333)
07 719025289=719025289|CANADA|CAN|CORPORATION||115|6|1|6|4|Saskatoon, Saskatchewan, Canada|CA|2018-01-01T00:00:00.000Z|POINT (-106.667 52.1333)
08 719025290=719025290|CANADA|CAN|CORPORATION||172|8|1|8|4|Saskatoon, Saskatchewan, Canada|CA|2018-01-01T00:00:00.000Z|POINT (-106.667 52.1333)
09 719025276=719025276|SASKATCHEWAN|CAN|||020|20|1|10|4|Saskatchewan, Manitoba, Canada|CA|2018-01-01T00:00:00.000Z|POINT (-97.7167 52.15)
10 719025946=719025946|PREMIER||||015|6|1|6|4|Saskatchewan, Manitoba, Canada|CA|2018-01-01T00:00:00.000Z|POINT (-97.7167 52.15)
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 719025281=719025281|2018-01-01T00:00:00.000Z|POINT (-119.583 49.5)
02 719024929=719024929|2018-01-01T00:00:00.000Z|POINT (-119.35 50.3667)
03 719025855=719025855|2018-01-01T00:00:00.000Z|POINT (-93.9196 45.7326)
04 719026967=719026967|2018-01-01T00:00:00.000Z|POINT (-93.9196 45.7326)
05 719027201=719027201|2018-01-01T00:00:00.000Z|POINT (-93.9196 45.7326)
06 719025275=719025275|2018-01-01T00:00:00.000Z|POINT (-106.667 52.1333)
07 719027017=719027017|2018-01-01T00:00:00.000Z|POINT (-117.157 32.7153)
08 719027116=719027116|2018-01-01T00:00:00.000Z|POINT (-117.157 32.7153)
09 719025124=719025124|2018-01-01T00:00:00.000Z|POINT (-117.393 33.2103)
10 719026572=719026572|2018-01-01T00:00:00.000Z|POINT (-117.823 33.6695)
Returned 669 total features
Running query EventCode = '051'
01 719025248=719025248|BUSINESS||||051|10|1|10|1|Australia|AS|2018-01-01T00:00:00.000Z|POINT (135 -25)
02 719026319=719026319|SENATOR||UNITED STATES|USA|051|2|1|2|2|Texas, United States|US|2018-01-01T00:00:00.000Z|POINT (-97.6475 31.106)
03 719027258=719027258|UNITED STATES|USA|||051|2|1|2|2|Texas, United States|US|2018-01-01T00:00:00.000Z|POINT (-97.6475 31.106)
04 719026945=719026945|CALIFORNIA|USA|||051|8|1|8|2|California, United States|US|2018-01-01T00:00:00.000Z|POINT (-119.746 36.17)
05 719027115=719027115|LOS ANGELES|USA|KING||051|10|1|10|3|Sacramento, California, United States|US|2018-01-01T00:00:00.000Z|POINT (-121.494 38.5816)
06 719025112=719025112|||UNITED STATES|USA|051|48|12|48|3|Wichita, Kansas, United States|US|2018-01-01T00:00:00.000Z|POINT (-97.3375 37.6922)
07 719025110=719025110|||UNITED STATES|USA|051|6|1|6|3|Edgefield, South Carolina, United States|US|2018-01-01T00:00:00.000Z|POINT (-81.9296 33.7896)
08 719026297=719026297|SENATOR||||051|6|1|6|3|Washington, District of Columbia, United States|US|2018-01-01T00:00:00.000Z|POINT (-77.0364 38.8951)
09 719026943=719026943|AMERICAN|USA|||051|14|1|8|3|Chicago, Illinois, United States|US|2018-01-01T00:00:00.000Z|POINT (-87.6501 41.85)
10 719026364=719026364|MEXICO|MEX|||051|2|1|2|2|Pennsylvania, United States|US|2018-01-01T00:00:00.000Z|POINT (-77.264 40.5773)
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 719025739=719025739|2018-01-01T00:00:00.000Z|POINT (5 8.5)
02 719025867=719025867|2018-01-01T00:00:00.000Z|POINT (7.53333 9.08333)
03 719025606=719025606|2018-01-01T00:00:00.000Z|POINT (12.847 10.8658)
04 719026504=719026504|2018-01-01T00:00:00.000Z|POINT (12.847 10.8658)
05 719026508=719026508|2018-01-01T00:00:00.000Z|POINT (14.2377 11.7066)
06 719026066=719026066|2018-01-01T00:00:00.000Z|POINT (35.1 31.5333)
07 719025842=719025842|2018-01-01T00:00:00.000Z|POINT (35.2333 31.7667)
08 719025359=719025359|2018-01-01T00:00:00.000Z|POINT (12.4833 41.9)
09 719025360=719025360|2018-01-01T00:00:00.000Z|POINT (12.4833 41.9)
10 719025249=719025249|2018-01-01T00:00:00.000Z|POINT (12.833333 42.833333)
Returned 138 total features
Done
Process finished with exit code 0
如果returned
结果中存在为0的,则协处理器加载失败。