1. 程式人生 > >GeoMesa的安裝與Quick Start(HBase)

GeoMesa的安裝與Quick Start(HBase)

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)的選項,說明安裝成功了,如下圖所示。

 

geoserver新建圖層.jpg

不過,目前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 —— 可不填,情況和前一步執行的命令時相同,不再贅述

  • 最後,點選“儲存”,再點選“釋出”,即可完成地圖服務的釋出。

效果展示:

geoserver效果展示.jpg

可點選地圖檢視資料點的詳細資訊,也可配置SLD檔案,展示更豐富的資料樣式,如熱力圖等。

注意事項

  • 在分散式環境下,一定要確保runtime JAR包被複制到了每一個節點,並且每一個節點的hbase-site.xml檔案都添加了註冊協處理器的配置項。
  • 教程中的Geoserver版本是12.x,我試過使用更高的版本並修改pom.xml進行重新構建,結果在釋出圖層時出錯。因此不建議使用12.x以外的其他版本的Geoserver。
  • 若在執行教程的程式出現錯誤時,請先確定HBase的安裝是否正確,增刪改查功能是否能正常執行。



作者:濤O_O
連結:https://www.jianshu.com/p/d474bcf598bf
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。