GeoMesa是一個(gè)運(yùn)行在分布式計(jì)算系統(tǒng)上,支持大規(guī)模時(shí)空矢量數(shù)據(jù)查詢和分析的開(kāi)源工具。
本文介紹GeoMesa安裝,以及來(lái)自官方的Quick Start教程(基于HBase)。
第一部分 GeoMesa的安裝
1.下載
從Github下載已經(jīng)編譯好的二進(jìn)制文件,解壓至目標(biāo)目錄
# 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手動(dòng)編譯
2.配置classpath
GeoMesa for HBase需要使用Hadoop和HBase,讀取他們的配置文件,因此需要設(shè)置幾個(gè)環(huán)境變量。
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文件中設(shè)置以上環(huán)境變量,也可以在.bashrc或/etc/profile中設(shè)置。
由于許可的原因,需要手動(dòng)執(zhí)行以下命令,安裝兩個(gè)插件:
bin/install-jai.sh
bin/install-jline.sh
3.部署jar包
GeoMesa for HBase需要使用本地過(guò)濾器來(lái)加速查詢,因此需要將GeoMesa的runtime JAR包,拷貝到HBase的庫(kù)目錄下。
官網(wǎng)給的默認(rèn)設(shè)置是拷貝至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}/
但我執(zhí)行了卻不起作用,而是要將這個(gè)jar包復(fù)制到HBase的安裝目錄的lib文件夾中。
注意:如果是分布式環(huán)境,需要將其復(fù)制到每一個(gè)節(jié)點(diǎn)。
4. 注冊(cè)協(xié)處理器(Coprocessors)
注冊(cè)的過(guò)程其實(shí)就是使HBase在運(yùn)行時(shí)能夠訪問(wèn)到geomesa-hbase-distributed-runtime的jar包。官網(wǎng)給出了幾種方法實(shí)現(xiàn)這一目標(biāo),最方便的是在HBase的配置文件hbase-site.xml添加如下內(nèi)容:
<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>org.locationtech.geomesa.hbase.coprocessor.GeoMesaCoprocessor</value>
</property>
注意:如果是分布式環(huán)境,需要在每一個(gè)節(jié)點(diǎn)都添加相同的內(nèi)容。
5. 設(shè)置命令行工具
在完成以上設(shè)置后,GeoMesa的主要部分就安裝完成了??梢允褂?bin/geomesa-hbase 命令調(diào)用GeoMesa的命令行工具,執(zhí)行一系列的功能。
這里要額外設(shè)置的是使用如下命令,將HBase配置文件hbase-site.xml打包進(jìn)geomesa-hbase-datastore_2.11-$VERSION.jar中:
zip -r lib/geomesa-hbase-datastore_2.11-$VERSION.jar hbase-site.xml
這一步的目的是確保在MapReduce任務(wù)中,GeoMesa能夠順利訪問(wèn)到該文件。
6.在Geoserver中安裝GeoMesa插件(可選)
這一步是為了使用GeoMesa作為數(shù)據(jù)源,在geoserver中發(fā)布標(biāo)準(zhǔn)地圖服務(wù),進(jìn)行可視化的工作。如果沒(méi)有這個(gè)需求可以忽略。
首先安裝Geoserver,這里省略,可以查看參考資料。
geoserver安裝成功后,將以下的jar包復(fù)制到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包復(fù)制到geoserver/WEB-INF/lib目錄。
注意:要移除geoserver/WEB-INF/lib目錄下的jackson-core-2.5.0.jar文件,使用更新的版本jackson-core-2.6.x.jar替換。最后,在geoserver/WEB-INF/classes目錄下,創(chuàng)建軟連接,使其能夠訪問(wèn)HBase配置文件hbase-site.xml:
ln -s /path/to/hbase-site.xml /path/to/geoserver/WEB-INF/classes/hbase-site.xml
啟動(dòng)Tomcat,訪問(wèn)Geoserver后臺(tái),在新建數(shù)據(jù)源的選項(xiàng)中可以看到HBase(GeoMesa)的選項(xiàng),說(shuō)明安裝成功了,如下圖所示。

不過(guò),目前HBase中還沒(méi)有數(shù)據(jù),不能發(fā)布地圖服務(wù)。在Quick Start中,我們會(huì)往HBase中寫入數(shù)據(jù),并使用Geoserver進(jìn)行可視化。
第二部分 Quick Start教程
1.下載并構(gòu)建教程
下載:
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進(jìn)行構(gòu)建:
mvn clean install -pl geomesa-tutorials-hbase/geomesa-tutorials-hbase-quickstart -am
建議在構(gòu)建之前,將mvn的源設(shè)置為國(guó)內(nèi)的,可以大幅提高構(gòu)建速度。另外,如果在構(gòu)建中遇到了長(zhǎng)時(shí)間沒(méi)有響應(yīng)的情況,可以使用Ctrl+C停止,并再次運(yùn)行以上命令。
2. 運(yùn)行教程
構(gòu)建成功后,在命令行執(zhí)行以下命令:
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的位置,在單機(jī)模式下,這個(gè)值為localhost。對(duì)于已經(jīng)將hbase-site.xml設(shè)為GeoMesa能夠訪問(wèn)的情況(按照第一部分完成安裝),則這一項(xiàng)可以不填。
--hbase.catalog 填HBase表的名稱,用于存放測(cè)試數(shù)據(jù)。所填的表要么為空,要么不存在,否則會(huì)出錯(cuò)。
正常情況下,你應(yīng)該得到如下的結(jié)果:
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
如果出錯(cuò),說(shuō)明GeoMesa沒(méi)有安裝成功,或者是底層的HDFS、HBase出了問(wèn)題,要根據(jù)錯(cuò)誤提示具體分析。
從輸出結(jié)果可以看出,這一實(shí)例程序完成了創(chuàng)建schema、寫入features、空間查詢、屬性查詢等操作。具體實(shí)現(xiàn)可以查看教程中的源代碼文件。
3. 使用Geoserver進(jìn)行可視化
首先需要按照第一部分的內(nèi)容,在geoserver中安裝GeoMesa的插件。
然后,進(jìn)入geoserver后臺(tái),依次點(diǎn)擊:
數(shù)據(jù)存儲(chǔ) =》 添加新的數(shù)據(jù)存儲(chǔ) =》HBase (GeoMesa)進(jìn)入“新建矢量數(shù)據(jù)源”頁(yè)面,填寫以下項(xiàng)目的內(nèi)容:
數(shù)據(jù)源名稱 —— 隨意填寫一個(gè)有意義的名稱,如“geomesa_quick_start”
hbase.catalog—— 存放測(cè)試數(shù)據(jù)的HBase表名稱,根據(jù)前一步運(yùn)行的命令填寫
hbase.zookeepers —— 可不填,情況和前一步運(yùn)行的命令時(shí)相同,不再贅述最后,點(diǎn)擊“保存”,再點(diǎn)擊“發(fā)布”,即可完成地圖服務(wù)的發(fā)布。
效果展示:

可點(diǎn)擊地圖查看數(shù)據(jù)點(diǎn)的詳細(xì)信息,也可配置SLD文件,展示更豐富的數(shù)據(jù)樣式,如熱力圖等。
注意事項(xiàng)
- 在分布式環(huán)境下,一定要確保runtime JAR包被復(fù)制到了每一個(gè)節(jié)點(diǎn),并且每一個(gè)節(jié)點(diǎn)的hbase-site.xml文件都添加了注冊(cè)協(xié)處理器的配置項(xiàng)。
- 教程中的Geoserver版本是12.x,我試過(guò)使用更高的版本并修改pom.xml進(jìn)行重新構(gòu)建,結(jié)果在發(fā)布圖層時(shí)出錯(cuò)。因此不建議使用12.x以外的其他版本的Geoserver。
- 若在運(yùn)行教程的程序出現(xiàn)錯(cuò)誤時(shí),請(qǐng)先確定HBase的安裝是否正確,增刪改查功能是否能正常運(yùn)行。