SpatialHadoop是一個開源的MapReduce擴展,專門用於在ApacheHadoop集羣上處理空間數據。SpatialHadoop內置了空間高級語言,空間數據類型、空間索引和高效的空間操做。html
SpatialHadoop設計了一個通用的運行方式,它能夠在任何一個已配置好的Hadoop集羣上運行。SpatialHadoop已經在Hadoop1.2.1上進行過測試,可是它也支持Hadoop其它發行版本。算法
首 先,你須要一個已配置好的Hadoop集羣。而後你能夠將SpatialHadoop特有的類以及配置文件加入已配置好的Hadoop集羣中,這樣新的 SpatialHadoop命令就可使用了。如下步驟就是在如何在已配置好的Hadoop中安裝SpatialHadoop。瀏覽器
經過以下鏈接下載SpatialHadoop安全
http://spatialhadoop.cs.umn.edu/spatialhadoop-2.1-hadoop-1.2.1-bin.tar.gzjsp
將下載好的SpatialHadoop文件解壓到本地目錄。再在conf/hadoop-env.sh中加入本地的JAVA_HOME安裝路徑。分佈式
爲了方便你們,咱們能夠直接下載SpatialHadoop的虛擬機,在VirtueBox中導入下載好的虛擬機,虛擬機中已經爲咱們配置好了SpatialHadoop,咱們能夠直接使用。安裝虛擬機有以下幾個步驟:
a.點擊以下鏈接下載最新的VirtueBoxoop
https://www.virtualbox.org/wiki/Downloads測試
b.點擊以下鏈接得到最新的SpatialHadoop虛擬機spa
http://spatialhadoop.cs.umn.edu/SpatialHadoop-vm-2.1.ova設計
c.安裝好VirtureBox,點擊左上角:管理->導入虛擬電腦,導入已經下載好的SpatialHadoop虛擬機。
d.啓動SpatialHadoop虛擬機,虛擬機的用戶名和密碼皆爲:shadoop
e.SpatialHadoop位於虛擬機的 ’~/spatialhadoop-*’目錄下。如今咱們能夠在僞分佈式模式下運行SpatialHadoop。
在Ubuntu中,輸入終端命令進入SpatialHadoop目錄下,啓動SpatialHadoop集羣:
爲了方便起見,咱們用以下命令將SpatialHadoop默認的目錄更名:
注意:更改了SpatialHadoop目錄名爲shadoop後,咱們須要配置shadoop/conf文件夾下的hdfs-site.xml和mapred-site.xml文件。
進入~/shadoop/conf目錄下,咱們用以下命令:sudogedit hdfs-site.xml
<configuration> <property> <name>dfs.data.dir</name> <value>/home/shadoop/shadoop/hdfs/data</value> </property>
<property> <name>dfs.name.dir</name> <value>/home/shadoop/shadoop/hdfs/name</value> </property> </configuration>
|
進入~/shadoop/conf目錄下,咱們用以下命令:sudogedit mapred-site.xml
<configuration> <property> <name>mapred.job.tracker</name> <value>hdfs://localhost:9001</value> </property> <property> <name>mapred.local.dir</name> <value>/home/shadoop/ shadoop /hdfs/mapred</value> </property> </configuration> |
進入~/shadoop目錄下,輸入以下命令:bin/start-all.sh啓動集羣。再輸入jps命令,查看五個守護進程是否啓動成功。
當 咱們的SpatialHadoop配置好以後,咱們須要運行一些例子來讓咱們瞭解SpatialHadoop的特性。下面咱們將生成一個隨機文件,並用網 格索引這個文件,而後對這個已經創建索引的文件進行一些空間查詢。這個示例所需的類都包含在spatialhadoop *.jar中,你能夠輸入「bin / shadoop」命令來使用這些類。
a.生成一個隨機的文件其中包含隨機生成的矩形,輸入下面的命令:
bin/shadoop generate test mbr:0,0,1000000,1000000size:1.gb shape:rect
這個命令生成了一個名爲」test」的1G文件,文件中全部的矩形都包含在角爲(0,0),長寬分別爲1000000,1000000的矩形內。
b.用網格索引來索引這個文件,輸入以下命令:
bin/shadoop index test test.grid mbr:0,0,1000000,1000000sindex:grid
c.查看網格索引是如何劃分這個文件
bin/shadoop readfile test.grid
執行該命令,咱們能夠看到文件被化成多少部分,已經各部分的的邊界。
d.對文件進行一個rangequery操做
bin/shadoop rangequery test.grid rq_resultsrect:500,500,1000,1000
上面的命令是執行一個range query操做,查詢的範圍設置爲邊角爲(500,500),長寬爲1000,1000,運行的結果保存在HDFS上的rq_results文件夾中。
e.對文件進行一個knn操做
bin/shadoop knn test.grid knn_results point:1000,1000k:1000
這個knn查詢的查詢點爲(1000,1000),k=1000,運行的結果存放在HDFS的knn_results文件夾中。
f.對文件進行一個spatial join操做
首先先生成另一個文件,該文件已進行了網格索引。
bin/shadoop generate test2.grid mbr:0,0,1000000,1000000size:100.mb sindex:grid
如今,鏈接兩個文件經過分佈式鏈接算法使用以下命令:
bin/shadoop dj test.grid test2.grid sj_results
首先進入SpatialHadoop的目錄並用「bin/start-all.sh」啓動集羣,最後使用」jps」查看五個守護進程是否啓動成功。如圖所示:
要在Hadoop集羣上進行操做,須要關閉Hadoop的安全模式,用」bin/hadoop dfsadmin –safemode leave」命令來關閉Hadoop的安全模式。如圖所示:
咱們把須要處理的數據集,放在主文件夾下的Downloads目錄下。如圖所示:
咱們在HDFS的根目錄下創建文件夾,存放咱們須要處理的數據集,利用」bin/hadoop fs –mkdir /parks」命令來創建’parks’文件夾,利用」bin/hadoopfs –ls /」來查看文件夾是否被建立。如圖所示:
接 着咱們把Downloads目錄下的’parks.tsv.bz2’數據集上傳至HDFS根目錄下的‘parks’文件夾中,將使用 到」bin/hadoopfs –put ~/Downloads/parks.tsv.bz2 /parks」,接着能夠利用」bin/hadoop fs–ls /parks」查看數據集是否上傳成功。如圖所示:
咱們也能夠利用「localhost:50070」查看HDFS的基本情況,以下圖所示:
咱們也能夠點擊」Browse thefilesystem」查看HDFS所存儲的文件。
接着咱們在瀏覽器中輸入’ localhost:50070/visualizer.jsp’,進入數據處理的可視化界面,如圖所示:
點 擊左側的‘parks’文件夾,再點擊‘preprocess’按鈕,開始處理文件。處理數據集分爲兩個步驟,一是對數據集進行FileMBR操做,另外一 個是對數據集進行Plot操做。咱們能夠進入‘localhost:50030’頁面對兩個任務進行跟蹤。當出現以下界面是則表示兩個任務均執行完成。
接着咱們進入‘localhost:50070/visualizer.jsp’界面,點擊’parks’文件夾則能夠看到,數據集被可視化了,如圖所示:
想了解更多能夠登陸: