時空大數據實踐之GeoWave安裝部署實踐 html
GeoWave是由國家地理空間情報局(NGA)與RadiantBlue和Booz Allen Hamilton合做技術開發的。GeoWave是一套類庫,利用分佈式鍵值存儲的可伸縮性,從而有效的存儲、檢索和分析大量的地理數據集。目前是經過提供插件鏈接GeoTools和PDAL Accumulo基礎數據存儲。GeoWave的主要目標是成爲流行的地理空間項目之間的橋樑,領域的分佈式鍵值存儲和分佈式處理框架。地理空間操做每每是後期工做,或不能與許多這樣的存儲和計算能力融合。經過GeoWave讓他們能夠支持大衆的應用提供一流的工具。 node
GeoWave的地理空間支持是創建在GeoTools擴展模型之上的,因此插件自己支持GeoServer,uDig和任何其餘GeoTools兼容的項目,以及能夠攝取GeoTools兼容的數據源。GeoWave是基於Accumulo開發實現而產生的。 sql
本文將針對GeoWave的技術特色,並結合官方文檔,展現軟件在安裝部署中完整的實踐過程。因爲GeoWave提供的官方文檔有限並且可讀性不強,因此但願本文能夠爲有興趣實踐的同窗提供一些幫助。 shell
GeoWave做爲一個地理空間處理工具集以及一個分佈式的鍵值存儲系統,具備如下幾個技術特色: 數據庫
l 加入了基於Apache Accumulo多空間尺度的索引能力 apache
l 加入了基於Apache Accumulo的地理對象和空間操做方法的支持 安全
l 包含了一個GeoServer插件容許在Accumulo中的空間數據經過OGC標準的服務被分享或者被可視化 服務器
l 提供了Map-Reduce 的輸入和輸出格式用於分佈式的處理和分析地理空間數據 網絡
GeoWave傾向於爲Accumulo作更多工做,就像PostGIS爲PostgreSQL作的同樣。 架構
GeoWave架構的核心概念就是數據輸入、輸出輸出或者稱做攝取和查詢。在系統中固有兩種類型的數據,分別是要素數據(Feature Data)和元數據(metadata)。要素數據是實際的屬性和地理幾何對象的集合,他們被存儲下來用於後期的檢索。元數據描述了數據是如何被持久化在數據庫中的。元數據設計的目的是爲數據檢索和發現而存儲必要的信息-因此一個現存的數據存儲不會和在一個特定的外部服務器或者客戶端上的一點配置關係在一塊兒,而取而代之的是「自描述」。
GeoWave的三個關鍵技術,索引、適配器、鍵值存儲。
經過GeoWave實現快速檢索數據的核心引擎是基於SFC(space filling curve)的索引技術。這種索引能夠配置不一樣的參數,包括等級數、空間維度數、空間維度類型(有界或無界)、任意空間尺度的值域等等。
爲了存儲幾何對象,屬性和其它信息須要一種能夠序列化和反序列化的表述格式。一種提供出來處理要素序列化和反序列化的接口。GeoWave提供一種默認支持的功能,能夠實現了對GeoTools簡單要素類型的支持。更多的特殊的功能實現會晚些以接口的形式被提供出來。在適配器固化的數據表中存儲了JAVA CLASS的指向路徑。當數據被查詢以及結果被轉換爲本地數據類型的時候,這些JAVA類會被動態的讀取。
GeoWave容許用戶定義本身的適配器,來對應各類數據的存儲以及數據形式,能夠是數據庫,也能夠是流數據。
圖中描述了Accumulo數據存儲的默認對象結構。索引ID直接來自於SFC實現的分層結構。咱們不強制要求數據ID是全局惟一的,但他們應該對於適配器是惟一的。所以成對出現的適配器ID和數據ID成爲了一個對於數據元素的惟必定義。Row ID的存儲長度是4byte的整型,這能夠完整的讀取Row ID,由於這些ID長度可變。副本的數量也是存儲在Row ID中,也爲了通知這個元素重複數據過濾器是否須要暫時存儲,確保不重複發送給調用者。Row ID內部的適配ID是獨特的行ID,它做爲一個總體的行迭代器被用於聚合字段可分配的過濾器。適配ID也被用做列家族機制僅供特定的適配器查詢來獲取相應的列家族。
GeoWave部署使用的環境包括:
操做系統:Redhat 6.5
Java版本:Jre 1.7
相關軟件:Accumulo、Hadoop 2.6.3、Zookeeper 3.4.8
因爲GeoWave提供的主要是rpm包,爲了方便部署系統採用了Redhat。在安裝運行GeoWave以前要安裝部署完成Hadoop、Zookeeper、Accumulo,順序最好是先完成Hadoop和Zookeeper的部署,最後部署Accumulo。
以前博客已經分享過相關內容,網上材料也比較多,不作贅述。說明一點,就是GeoWave是在單臺機器上部署,因此並無部署Hadoop集羣,只是單機運行。
能夠參考如下文章:http://coolxing.iteye.com/blog/1871009。本次測試GeoWave採用了單機模式。
安裝部署能夠參考在線用戶手冊,地址:http://www.nosqldb.cn/1373093083484.html
用戶手冊內容比較全,這裏將安裝部署的部分和相關設置作一介紹。
1、安裝
下載地址:https://www.apache.org/dyn/closer.lua/accumulo/1.6.5/accumulo-1.6.5-bin.tar.gz
下載後,選擇目錄安裝Accumulo。這個目錄將被引用環境變量$ ACCUMULO_HOME。運行如下命令:
$ tar xzf accumulo-1.6.5-bin.tar.gz # unpack to subdirectory
$ mv accumulo-1.6.5-bin $ACCUMULO_HOME # move to desired location
2、依賴關係
Accumulo須要HDFS,ZooKeeper的配置,運行開始以前須要配置好。至少Accumulo Master節點和TabletServer機之間密碼應配置SSH。在集羣中運行網絡時間協議(NTP),以確保節點的時鐘,不要太脫節,這可能會致使自動時間戳數據的問題。
3、配置
Accumulo須要配置編輯幾個Shell文件和XML文件。這些文件保存在 $ ACCUMULO_HOME / conf目錄下。其結構相似於Hadoop的配置文件。從$ ACCUMULO_HOME / conf/templates目錄中,將master,slaves,accumulo-env.sh,accumulo-site.xml文件複製到$ ACCUMULO_HOME / conf 目錄下。
4、編輯accumulo-env.sh
Accumulo須要知道在哪裏能夠找到它依賴於軟件。編輯accumulo-env.sh指定如下內容:
1.輸入的安裝目錄Accumulo爲$ACCUMULO_HOME的位置
2.輸入您系統的Java回家$ JAVA_HOME
3.Hadoop的輸入位置爲$ HADOOP_HOME
4.選擇的位置Accumulo日誌,並將其輸入$ ACCUMULO_LOG_DIR「
5.輸入的ZooKeeper爲$ZOOKEEPER_HOME的位置
5、Accumulo設置
指定適當的值$ACCUMULO_HOME/conf目錄中accumulo-site.xml中的下列設置:
<property>
<name>zookeeper</name>
<value>localhost:2181</value>
<description>list of zookeeper servers</description>
</property>
這使找到的ZooKeeper Accumulo。Accumulo使用ZooKeeper的協調過程,並有助於敲定TabletServer失敗之間設置的。
<property>
<name>walog</name>
<value>walogs</value>
<description>local directory for write ahead logs</description>
</property>
Accumulo預寫日誌記錄全部變動表,而後將它們提交到表。「walog設置指定預寫日誌寫入到每臺機器上的本地目錄。這個目錄應該存在全部機器上做爲TabletServers的。
<property>
<name>instance.secret</name>
<value>DEFAULT</value>
</property>
實例須要一個加密,使服務器之間的安全通訊。配置你的密碼,並確保不向其餘用戶可讀,accumulo-site.xml文件。
能夠修改某些設置經過Accumulo shell,並當即生效,但一些設置須要一個從新啓動過程才能生效。
6、初始化
必須初始化Accumulo建立的結構,它在內部使用集羣中配置的數據位置。HDFS是必需要配置的,運行以前Accumulo能夠初始化。
HDFS開始後,能夠進行初始化經過執行 $ ACCUMULO_HOME /bin/ accumulo init。這個腳本會提示輸入Accumulo實例名稱。實例名稱是用來肯定一套表和特定於實例的設置。而後,該腳本將一些信息寫入到HDFS,因此Accumulo能夠正常啓動。
初始化腳本會提示你設置root密碼。一旦Accumulo初始化後,就能夠開始。
8、運行
確保配置好Hadoop集羣中的全部機器,包括訪問共享HDFS實例。確保HDFS,ZooKeeper的運行。請確保ZooKeeper的配置和集羣中的至少一臺計算機上運行。啓動Accumulo使用.bin/start-all.sh腳本。
爲了驗證,運行Accumulo,檢查「狀態」頁面監控下 。此外,shell可提供一些信息表經過讀取元數據表的狀態。
GeoWave提供了RPM Repo的軟件安裝包。能夠經過yum –enablerepo=geowave的命令來查詢軟件包的更新以及下載安裝。具體的可參考命令以下。
# In the examples below the rpm name geowave-$VERSION-VENDOR_VERSION would be adjusted as needed
rpm -Uvh http://s3.amazonaws.com/geowave-rpms/release/noarch/geowave-repo-1.0-3.noarch.rpm
yum enablerepo=geowave search geowave-0.8.7-cdh5
# Install GeoWave Accumulo iterator on a host (probably a namenode)
yum enablerepo=geowave install geowave-0.8.7-cdh5-accumulo
# Update
yum enablerepo=geowave install geowave-0.8.7-cdh5-*
geowave-repo-1.0-3.noarch.rpm爲主要的安裝包,經過yum安裝能夠查看其依賴的相關軟件包。GeoWave的軟件包包括如下這些,能夠根據須要選擇安裝。
在完成了以前關於Hadoop、Zookeeper、Accumulo的安裝過程後,能夠對GeoWave進行配置。
Accumulo 設置步驟:
1.運行Accumulo shell
這裏前提須要將Accumulo的bin目錄設置到環境變量中。而後運行Accumulo shell –u root命令,並輸入密碼(密碼在以前Accumulo配置中在初始化中設置過了)
2.建立用戶和表空間
createuser geowave
createnamespace geowave
3.分配用戶表空間的所屬關係
grant NameSpace.CREATE_TABLE -ns geowave -u geowave
4.建立數據路徑,設置HDFS的數據路徑。對於Cloudera是/accumulo目錄而Hortonworks是在/apps/accumulo目錄下。
config -s
general.vfs.context.classpath.geowave=hdfs://localhost:8020/ACCUMULO_ROOT/classpath/geowave/VERSION_AND_VENDOR_VERSION/[^.].*.jar
5.配置全部表包含的命名空間以使用應用的classpath,鏈接命名空間和應用classpath,調整標籤能夠適配不一樣用戶或不一樣的應用名稱。
config -ns geowave -s table.classpath.context=geowave
exit
測試GeoWave的數據攝取功能。首先下載測試數據,數據下載地址:
http://naciscdn.org/naturalearth/50m/cultural/ne_50m_admin_0_countries.zip
測試的命令和參數以下,略做調整,修改-z 爲localhost:2181,用戶名爲root,密碼爲本身設置的Accumulo密碼。ingest目錄爲Accumulo目錄下。
命令執行成功後,數據會從shp數據中攝取到HDFS中,也能夠在Zookeeper snapshot目錄下查看相關日誌信息。
經過以上GeoWave的綜合介紹,咱們須要瞭解到在GIS大數據發展進程中,各類開源框架都在從多角度對地理空間大數據提供工具型的研究成果,並逐步有了實質性的應用成果。但如何提供系統化的地理空間大數據的解決方案,須要綜合分析。咱們須要從數據模型、數據存儲、數據攝取、數據分析處理、數據發佈、數據可視化等多角度瞭解開源社區有關的技術框架,爲咱們提供幫助和借鑑。
GeoWave提供了一套數據攝取的工具集、插件和存儲框架,支持多種數據源,包括shp,hdfs,以及和kafka結合的實時數據等等,最終將數據保存在HDFS中。而HDFS做爲大數據通用的分佈式數據文件系統,也就能夠支持MapReduce、Spark等框架的並行數據處理分析,實現更深層的挖掘。
所以,咱們將繼續研究並驗證GeoWave以及其餘各類GIS框架技術,爲實現最終的GIS+大數據技術解決方案做出努力。