Geomesa在Linux下的安装

一、 安装

官网说明GeoMesa需要Hbase1.3版本或1.4版本,安装GeoMesa前首先安装Hbase1.3以上版本。

Geomesa在Linux下的安装_第1张图片
geomesa对HBase版本的要求.png

1.1 Hbase安装

由于我之前装过Hbase1.2,所以在Hbase1.2版本的基础上升级Hbase版本至1.4.9

我是将Hbase1.4.9Geomesa安装在/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_HOMEHBASE_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

  1. 卸载HBase1.2.0,检查并kill 掉HMasterHRegionServer服务
  2. 删除zookeeper中原HBase缓存文件(删除zkhbase节点)
       $ 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
  1. 重启zookeeper服务

    ./zkServer.sh restart

  2. 启动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包依赖。

Geomesa在Linux下的安装_第2张图片
依赖jar包.png

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协处理器可理解为服务端的拦截器,能够将处理过程移动到服务器端运行来提高查询效率,即实现谓词下推。例如数据的过滤处理流程直接放到服务器端执行,就只需要返回一个小的处理后的结果集。

协处理器框架提供了ObserverEndPoint两种模块,通过继承这些类来扩展自己的功能。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 

我们可以看到它实现两个接口
CoprocessorCoprocessorServiceCoprocessor如上文提到,是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地址

具体操作如下图:


Geomesa在Linux下的安装_第3张图片
IDEA配置页面1.png

配好之后,运行HBaseQuickStartmain函数,查看输出结果。如果结果跟下面结果一直,则协处理器加载成功。

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的,则协处理器加载失败。

你可能感兴趣的:(Geomesa在Linux下的安装)