SpatialHadoop的編譯與運行
SpatialHadoop相對HadoopGIS等庫,在MapReduce時代的空間數據處理開源庫算處理較好。SpatialHadoop在效率上相對一些新的基於Spark空間數據處理開源庫明顯偏低,加上本身的功能實現得差不多,最近提交的更新越來越少,感覺發展趨勢不太好,主要用於學習相關的索引技術。
編譯與運行
主頁上有已經編譯好的包,可以直接解壓到Hadoop目錄下運行,但官方的版本解壓有錯誤,因此下載github上源碼編譯。
需要的環境:
- jdk8
- Hadoop 2.7.7
- maven
源碼編譯
源碼地址 https://github.com/aseldawy/spatialhadoop2,直接下載或者git clone到本地。
需要安裝maven用於代碼編譯。
編譯前將pom.xml文件中hadoop相關的版本改為需要的版本。
mvn compile
編譯源碼
mvn assembly:assembly
代碼打包,會在target目錄下生成jar和一個包含jar與相關依賴的tar.gz包
在2f1aefd32860d0279f2fc479a8bafb68d07e3761版本(Mar 13,2018)編譯時會由於缺少一個測試文件測試失敗,可以選擇跳過測試,或者註釋掉測試的代碼(src/test/java/edu/umn/cs/spatialHadoop/indexing/RStarTreeTest.java中的某個函數)。
運行
首先需要有一個Hadoop集群,能夠提交yarn任務。
將target目錄下生成的tar.gz包(spatialhadoop-2.4.3-SNAPSHOT-bin.tar.gz)拷貝到Hadoop目錄下並解壓即可。
cp target/spatialhadoop-2.4.3-SNAPSHOT-bin.tar.gz $HADOOP_HOME/
cd $HADOOP_HOME
tar -zxvf spatialhadoop-2.4.3-SNAPSHOT-bin.tar.gz
Hadoop目錄下運行下面的測試代碼,會向HDFS中寫入一個隨機生成的矩形文件。
sbin/shadoop generate test.rects size:1.gb shape:rect mbr:0,0,1000000,1000000 -overwrite
SpatialHadoop運行機制
shadoop 腳本
SpatialHadoop 通過腳本shadoop運行命令,腳本就只有幾行代碼
bin=`dirname "$0"`
bin=`cd "$bin" > /dev/null; pwd`
# Call Hadoop with the operations.Main as the main class
. "$bin"/hadoop edu.umn.cs.spatialHadoop.operations.Main $@
其實只是將spatialhadoop的jar包與相關依賴jar包放入Hadoop的包目錄中,然後通過shadoop腳本調用Hadoop腳本調用包中的一個類,向YARN提交MapReduce任務。
spatialhadoop的相關文件
spatialhadoop-2.4.3-SNAPSHOT-bin.tar.gz 中有以下的文件。
.
├── bin
│ └── shadoop
├── etc
│ └── hadoop
│ ├── spatial-site.xml
│ └── spatial-site.xml.template
├── LICENSE.txt
├── README.md
└── share
└── hadoop
└── common
└── lib
├── esri-geometry-api-1.2.1.jar
├── javax.mail-1.5.5.jar
├── javax.mail-api-1.5.5.jar
├── jts-1.13.jar
└── spatialhadoop-2.4.3-SNAPSHOT.jar
配置文件貌似基本功能上用得不多,shadoop腳本也比較簡單,除去使用的相關環境依賴jar包,spatialhadoop實質上只是執行spatialhadoop-2.4.3-SNAPSHOT.jar包中的函數而已。
SpatialHadoop 基本使用
構建索引文件與空間範圍查詢
shadoop index test.rects sindex:grid test.grid shape:rect
shadoop rangequery test.grid rect:10,10,2000,3000 rangequery.out shape:rect
主要的索引結構,文件存儲形式等在官網有相關文檔。
具體運行的參數和運行的命令很多沒有介紹,輸入bin/shadoop以及bin/shadoop 接命令能夠看到命令的基本使用情況,更具體的估計要去找源碼了。
主要參考鏈接
- http://spatialhadoop.cs.umn.edu/all_operations.html 所有操作和說明
- http://spatialhadoop.cs.umn.edu/ 官網
- https://github.com/aseldawy/spatialhadoop2 github倉庫
SpatialHadoop的編譯與運行