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

SpatialHadoop的編譯與運行

end 沒有 entry cts 直接下載 nds lang mbr 提交

本文通過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 $@

其實只是將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的編譯與運行