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 [email protected]
其實只是將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 接命令能夠看到命令的基本使用情況,更具體的估計要去找原始碼了。