1. 程式人生 > >SpatialHadoop的編譯與執行

SpatialHadoop的編譯與執行

本文通過MetaWeblog自動釋出,原文及更新連結:https://extendswind.top/posts/technical/spatialhadoop_compile_and_run

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

主要參考連結