SpatialHadoop例項:面向空間資料的高效MapReduce框架

GeoWin_CAS發表於2014-12-17

原作:Ahmed Eldawy;Mohamed F.Mokbel (UMN)

翻譯:Leo(CAU)

注:由於本人翻譯水平有限,如有錯誤,敬請諒解,可以在評論中指出,歡迎交流!

摘要:本文例項介紹了SpatialHadoop平臺,它是第一個基於成熟MapReduce對空間資料具有原生支援的框架。SpatialHadoop是對Hadoop的做了一個全面的擴充套件,使其核心功能可以支援空間資料。因此,對於處理空間資料,SpatialHadoop與目前存在的Hadoop專案相比具有更好的效能。SpatialHadoop主要包括一個簡單的空間高階語言、兩級空間索引結構,以及建立在MapReduce層的基本空間元件和三個基本空間操作(範圍查詢、K-NN查詢和空間連結)。其他的空間操作同樣也可以在SpatialHadoop平臺上進行部署。本文展示了一個基於SpatialHadoop的原型系統。系統執行環境為Amazon EC2叢集,空間資料是從Tiger檔案和OpenStreetMap上獲取,大小分別為60GB和300GB。

1、引言

      許多類似於MapReduce系統,例如Hadoop等,發展的已經比較成熟,而且也有許多基於此的應用程式,如機器學習[3]、兆位元組排序[9]、影像處理[1]等,多年來也被證實了對於大資料分析來說是一個有效的框架。與此同時,對於空間資料也進入了一個爆炸的時代,如智慧手機、醫療裝置、太空望遠鏡等不同來源的資料。然而,不幸的是,對於支援空間資料而言,Hadoop存在著先天的不足,它的核心框架並不能很好的支援空間資料的特性。現有基於Hadoop處理空間資料主要集中在特定的資料型別和資料操作等方面,如根據軌跡進行範圍查詢[6]、基於點狀資料進行KNN連線[5,13]等。而且這些對空間資料操作的效率也受到Hadoop內在因素的限制。


     本文提出的SpatialHadoop平臺可以通過線上的資源獲取(http:// spatialhadoop.cs.umn.edu/.)。SpatialHadoop是基於Hadoop一個全面的擴充套件(約12000行核心程式碼),使從程式碼層對空間結構和空間資料進行了支援。這保證了SpatialHadoop的工作方式與Hadoop的一致性,通過呼叫Map和Reduce函式庫來完成工作,因此現有Hadoop專案也能夠在SpatialHadoop上執行。然而,對於處理空間資料而言,SpatialHadoop與Hadoop相比具有更好的效能。如圖1所示,(a)和(b)分別表示基於Hadoop和SpatialHadoop何進行空間範圍查詢。70000000條的空間資料要素在20個節點的叢集上執行同樣的查詢,Hadoop需要200s,而SpatialHadoop只需2s。

    SpatialHadoop基於Hadoop所有層都嵌入了空間結構,包括語言層、儲存層、MapReduce層以及業務層。在語言層,提供了一種簡單高階語言用於空間資料分析,即使非技術人員也可以進行操作。在儲存層,提供了一個兩級空間索引機制,即節點之間分割槽資料的全域性索引和每個節點組織資料的區域性索引。通過這樣的索引機制建立了格網索引[7]、R-tree[4]和R+-tree[11]索引。在MapReduce層,嵌入了兩個新的空間元件,通過該元件可以獲取索引檔案,即SaptialFileSplitter和SpatialRecordReader。SaptialFileSplitter通過修剪分割槽來利用全域性索引,但不會導致生成查詢結果;而SpatialRecordReader利用區域性索引來獲得每個分割槽內有效的訪問記錄。在業務層,提供了一系列空間操作(範圍查詢、KNN和空間連線),實現了在MapReduce層應用索引和新的空間元件。其他的空間操作也可以通過同樣的方式嵌入到該平臺中。

 SpatialHadoop是一個開源共享的平臺,允許研究社群的每一位貢獻者對其功能進行擴充。針對不同的應用,SpatialHadoop中的核心基礎元件都能夠幫助使用者高效的實現更多空間操作。通過一個案例研究,SpatialHadoop已經擁有了三個空間操作,即範圍查詢,K-nearest-neighbor 查詢和空間連線。我們設想,在未來SpatialHadoop將扮演者一個研究載體的角色,更多的研究者將在此基礎上共享他們的空間操作和分析工具,形成一套豐富的體系供開發者、實踐者和科研者使用。

  本文將通過一個真實的原型系統來介紹SpatialHadoop。該系統採用了兩套資料,資料分別來自Tiger檔案集[12]和OpenStreetMap[10],執行環境為Amazon EC2叢集。Tiger檔案集包含7000,0000條記錄(大小為60GB),有道路、水體和其他的美國地理資訊。OpenStreetMap包含全世界的道路、熱點和建築物邊界,資料大小為300GB。

2、SpatialHadoop框架

      圖2為SpatialHadoop系統框架。SpatialHadoop叢集主要包括一個主節點,用來接收使用者的查詢,並將其分割為更小的任務,並通過多個從節點類執行這些任務。根據與SpatialHadoop互動目的,使用者可以分為三類:普通使用者、開發者和管理者。普通使用者(非技術人員)可以通過該平臺提供的語言處理他們的資料集;開發者(更高階使用者)可以實現一些針對具體應用的新空間操作功能;管理者能夠通過調整配置檔案中的系統引數來控制整個系統。

     SpatialHadoop採用了分層設計,主要包含四層,即語言層、儲存層、MapReduce和業務層。語言層提供了一個簡單高階類SQL語言,支援空間資料型別和操作。儲存層包含了全域性和區域性兩個空間索引結構。全域性索引用於計算節點間的資料劃分,區域性索引用於節點內部資料組織。MapReduce層擁有兩個新的空間元件,即SpatialFileSplitter和SpatialRecordReader,分別利用全域性(修剪資料但不產生查詢結果)和區域性索引。業務層對基於空間索引和MapReduce層新元件實現的多種空間操作進行了封裝。SpatialHadoop與生具有高效實現三個基礎空間操作,即範圍查詢、KNN和空間連線。其他的空間操作也可以通過類似的方法嵌入到該平臺中。


3、語言層

     SpatialHadoop提供了一種簡單高階語言,非技術人員也可以通過該語言與系統進行互動。該語言內建支援空間資料型別、空間基礎功能以及空間操作。空間資料類(點、矩形和多邊形)定義了檔案載入過程中的輸入檔案模式。空間基礎功能包括測距、疊加以及MRB(最小外包矩形)。測距即通過空間屬性計算兩要素質心之間的距離;疊加分析是發現兩個要素之間是否有重疊區域;而MRB是用來計算面狀要素的最小外包矩形。空間操作包括範圍查詢、KNN和空間愛你連線用來輸入帶有空間屬性的檔案和生成輸出檔案結果。

       SpatialHadoop並沒有從底層開發一個新的空間語言,而是擴充套件了Pig Latin[8]。這樣不僅保留Pig Latin語言的原始功能,同時也加入了空間結構。尤其是SpatialHadoop語言重寫了關鍵的FILTER和JOIN類庫,當輸入引數具有空間謂詞時,將分別執行範圍查詢和空間連線。例如,當FILTER關鍵詞帶有Overlays謂詞時,SpatialHadoop將執行範圍查詢操作。對於KNN查詢,引入了一種新的KNN演算法。例如計算查詢點query_loc距離最近的100間房屋。

houses = LOAD ’houses’ AS (id:int,loc:point);

nearest_houses = KNN houses WITH_K=100USING Distance(loc, query_loc);

4、儲存層

    在儲存層,SaptialHadoop增加了新的空間索引。而且索引適合MapReduce執行環境。通過索引客服了Hadoop僅支援無索引堆檔案的限制。在Hadoop上直接運用傳統的空間索引具有兩大挑戰。一方面傳統空間索引是採用過程程式設計正規化,而SpatialHadoop採用的是MapReduce程式設計正規化;另一方面傳統索引採用區域性檔案系統,而SpatialHadoop採用的是Hadoop分散式檔案系統,這樣的方式有一個內在的限制,檔案僅以一種附加的方式被寫入,同時一旦寫入就不能被修改。為了克服這些挑戰,SpatialHadoop通過兩級組織其索引,即全域性索引和區域性索引。全域性索引通過叢集中的節點分割資料,而區域性索引在每一個節點內部高效組織資料。全域性和區域性索引的分離適合MapReduce編碼正規化。全域性索引用於準備MapReduce工作,而區域性索引用於處理Map任務。將檔案拆分成更小的檔案,允許每個記憶體分割槽索引並以順序的方式將其寫入檔案。

     全域性索引儲存在主節點的記憶體中,而每一個區域性索引儲存在從節點的檔案塊(通常為64M)中。SpatialHadoop支援格網檔案[7],R-tree[4]和R+-tree[11]索引。通過發行新的檔案系統命令writeSpatialFile(SaptialHadoop中)為已經存在的檔案建立索引,使用者需要明確輸入檔案、列建立索引和索引型別。

    通過MapReduce工作建立索引經過三個階段,即分割槽,區域性索引和全域性索引。在分割槽階段,一個檔案被按照空間分割槽,每一個分割槽包含一個矩形適合一個檔案塊(64MB)。格網索引通過一致的網格進行分割槽,而R-tree和R+-tree通過一個分佈清晰的R-tree分割槽,從輸入檔案中隨機讀取一個樣本、批量載入此樣本到臨時記憶體R-tree,然後使用邊界的葉節點分割整個檔案。值得注意的是,在格網和R+-tree索引中,當每一個記錄被寫入最合適的分割槽時,如果重疊多個分割槽,那麼這些記錄可能被複制[4]。在查詢過程中,重複的記錄會被後期處理掉,這樣就避免了產生重複的結果。在區域性索引階段,根據被構造的索引型別,每一個分割槽獨立建立並同步到一個HDFS塊檔案中,這個塊檔案需要標記分割槽的MBR。因此,每一個分割槽都有一個固定大小的檔案(64M),區域性索引在一次性寫入此本之前在記憶體中構建。最後一個階段是全域性索引。包含區域性索引的檔案組成一個大的檔案,全域性索引通過他們的MBRS來建立所有分割槽的索引並儲存在主節點的主存中。一旦系統發生故障,全域性所有就會根據需要重新建立。

5、MapReduce層

     傳統的Hadoop MapReduce層設計的目的是為了處理不帶有索引的堆檔案。而SpatialHadoop中的空間操作是以帶有空間索引的檔案為輸入的,處理方式是有區別的。此外,一些空間操作,如空間連線等,是對二元操作,需要兩個輸入檔案作為輸入條件。為了能夠處理這些索引檔案,SpatialHadoop在MapReduce層引入了兩個新的元件,即SpatialFileSplitter和SpatialRecordReader,利用全域性和區域性索引分別對不同的資料進行高效訪問。

     SpatialFileSplitter需要輸入一個或兩個空間索引檔案,除非使用者提供過濾功能。然後,利用全域性索引修剪檔案塊,這些修剪塊不會導致查詢結果(如外圍查詢範圍),索引建立的同時,基於最小外包矩形進行分配。在進行需要兩個輸入檔案的二元操作中,SpatialFileSplitter採用兩個全域性索引去選擇需要被一起處理的檔案塊的對組,作為一個檔案(例如,在空間連線中進行疊加分析塊)。SpatialRecordReader利用區域性索引,通過區域性索引獲取一個分塊中允許的記錄,而不是迴圈遍歷所有記錄。它從指定的分割槽中讀取區域性索引,將這個索引的指標傳遞給Map函式,該函式通過這個索引去選擇在整個記錄中不需要迭代的處理記錄。同時,SpatialFileSplitter和SpatialRecordReader幫助開發者編寫許多類似於MapReduce程式的空間操作。

6、業務層

    儲存層建立的空間索引,以及MapReduce層新的元件保證了SpatialHadoop可以實現高效的空間操作功能。在這個例項中,本文展示了範圍查詢、KNN和空間連線三個案例功能的實現。展示瞭如何使用SpatialHadoop中儲存層和MapReduce層。其他的空間操作如KNN連線和最短路徑分析也能夠通過如下類似的方法實現。

     在範圍查詢當中,SpatialFileSplitter利用全域性索引選取僅僅覆蓋查詢範圍的區塊。每一個查詢出來的區塊都將通過SpatialRecordReader提取在該塊中的區域性索引,然後基於這個索引執行一個傳統的範圍查詢去尋找匹配的記錄。對於建立索引過程中重複的記錄,採用參考點副本避免技術[2]來確保每一個結果記錄都只出現一次。

    KNN操作運用於兩次迭代操作當中。第一次迭代,SpatialFileSplitter利用全域性索引選取到包含查詢點的區塊。通過SpatialRecordReader來提取出這個區塊中的區域性索引,然後在這個區塊中查詢KNN。為了驗證查詢的結果是否正確,以查詢點作為圓心,以Kth鄰近目標作為半徑,繪製一個測試圓。如果測試圓在處理的區塊中完全符合,那麼結果就認為是正確的。如果測試圓覆蓋到了其他的分割槽,將通過第二個迭代來處理這些重疊區域。

對於空間連結,SpatialFileSplitter在兩個檔案中利用兩個全域性索引去查詢所有重疊區域組對。每一對都通過SpatialRecordReader來處理,SpatialRecordReader採用區域性索引去查詢重疊的記錄。

7、演示情景

     本文展示了一個SpatialFileSplitter原型系統(http://spatialhadoop.cs.umn.edu/),該系統環境為具有20個節點的Amazon EC2叢集。採用了兩份資料集,包括Tiger[12]檔案集和OpenStreetMap[10]。對已Tiger檔案集,本文提取出了三個檔案包括美國的現有的道路段、河流和湖泊。OpenStreetMap,本文提取了全球現有的道路段、熱點、公園、建築範圍等。參與者可以通過前端機器(例如,筆記本)訪問Amazon EC2,而所有的處理都在叢集后端執行。


7.1  前端

圖3展示了系統的前端,主要幫助使用者和管理者與SpatialHadoop互動,提供了查詢和視覺化工具。左邊有一個選擇控制元件,顯示系統載入的檔案列表。使用者可以通過載入按鈕上傳新的檔案,也可以通過刪除按鈕去除已經存在的檔案。如果一個檔案被選中,檔案中的內容會在右側螢幕中顯示。當更多的檔案被選中時,他們將以不同的顏色顯示以加以區分。如圖3所示,藍色和紅色的線狀地物分別代表美國的水體(河流和湖泊)和道路。然後使用者可以通過上面的工具條執行查詢(範圍查詢、KNN或者空間連線)操作。前端展示了查詢執行過程,當查詢結束時,其結果會在前端進行顯示。


7.2  業務操作

    首先,使用者通過選擇一個檔案並點選讓它在螢幕中顯示。顯示過程是通過MapReduce工作將選擇檔案中的資料生成了一副影像進行輸出。生成的影像僅僅包含了檔案中的空間屬性,並根據資料型別(點,矩形或者多邊形)繪製記錄。如圖3所示,全域性的索引邊界也可以在螢幕中顯示,便於使用者進行索引展示。系統允許使用者對格網索引和R-tree索引進行對比,會發現格網索引更適合一致的分散式資料集,而R-tree索引更適合不一致的資料。由於資料不一致(不規則),圖中的邊界是有R-tree索引生成的。顯示索引邊界是可選的,而且僅顯示系統內部。

     使用者選中一個檔案,就可以通過選擇上面工具條中的操作來執行一個查詢。可用的操作包括範圍查詢、KNN和空間連線。其中只有空間連線操作需要選擇兩個檔案執行二元操作。如圖4所以,使用者選擇一個操作後,會彈出一個對話方塊,使用者可以填寫查詢引數和輸的出檔名稱。對於範圍查詢,使用者需要提供查詢範圍的兩個角點。對於KNN,需要提供查詢點和鄰近物件的個數(k)。對已空間連線,主需提供連線的操作詞,預設為疊加。一個有趣的例子是通過連線公園和湖泊去查詢所有公園中含有湖泊的公園,並在螢幕上顯示結果。如圖4所示,設定完查詢引數之後,前端會顯示SpatialHadoop中查詢空間語句寫入的過程。一旦使用者向系統提交了查詢請求,前端將會把查詢提交到後臺進行處理。如圖5所以,使用者可以看到系統後臺查詢處理的整個程式。在所有的工作完成之前,這個管理介面列出了所有正在執行的工作的進展。使用者也可以提交隨後的查詢,這些操作也會同時在後臺進行。一旦一個查詢執行成功,其結果將會在螢幕上展示。

7.3  與Hadoop對比

  為了對比SpatialHadoop和Hadoop,本文又搭建了一個擁有20個節點的Hadoop叢集。使用者可以在兩個叢集(Hadoop叢集和SpatialHadoop)上執行相同的查詢,同時觀察兩者的執行進度。由於SpatialHadoop保留了傳統Hadoop的功能,所以非空間查詢也可以在SpatialHadoop上沒有任何條件的執行。這樣使用者可以測試非空間查詢功能來比較兩個叢集的效能。


7.4  安裝和配置

     SpatialHadoop是開原始碼的,在網路上可以公開獲取。在例項中,提供了快速安裝指南,如何在單機上快速安裝和執行SpatialHadoop。第一步下載安裝壓縮包並解壓到本地磁碟;然後,通過編輯配置檔案配置安裝。之後,啟動SpatialHadoop服務,一些操作案例就可以和與服務互動並執行。這些步驟可以通過SpatialHadoop官方網頁獲得更多資訊(http://spatialhadoop.cs.umn.edu/),使用者可以看到。

8、參考文獻

[1] Giraph.http://giraph.apache.org/.

[2] J.-P.Dittrich and B. Seeger. Data Redundancy and Duplicate Detection in Spatial JoinProcessing. In ICDE, pages 535–546, Mar. 2000.

[3] A.Ghoting, R. Krishnamurthy, E. Pednault, B. Reinwald, V. Sindhwani, S.Tatikonda, Y. Tian, and S. Vaithyanathan. SystemML: Declarative MachineLearning on MapReduce. In ICDE, Apr. 2011.

[4] A.Guttman. R-Trees: A Dynamic Index Structure for Spatial Searching. In SIGMOD,June 1984.

[5] W. Lu, Y.Shen, S. Chen, and B. C. Ooi. Efficient Processing of k Nearest Neighbor Joinsusing MapReduce. PVLDB, 5:1016–1027, 2012.

[6] Q. Ma, B.Yang, W. Qian, and A. Zhou. Query Processing of Massive Trajectory Data Basedon MapReduce. In CLOUDDB, pages 9–16, Oct. 2009.

[7] J. Nievergelt,H. Hinterberger, and K. Sevcik. The Grid File: An Adaptable, Symmetric MultikeyFile Structure. TODS, 9(1):38–71, 1984.

[8] C. Olston,B. Reed, U. Srivastava, R. Kumar, and A. Tomkins. Pig Latin: A Not-so-foreignLanguage for Data Processing. In SIGMOD, June 2008.

[9] O.O’Malley. Terabyte Sort on Apache Hadoop. 2008. [10] OpenStreetMap.http://www.openstreetmap.org/.

[11] T. K.Sellis, N. Roussopoulos, and C. Faloutsos. The R+-Tree: A Dynamic Index forMulti-Dimensional Objects. In VLDB, 1987.

[12] TIGERfiles. http://www.census.gov/geo/www/tiger/.

[13] C. Zhang,F. Li, and J. Jestes. Efficient Parallel kNN Joins for Large Data in MapReduce.In EDBT, Mar.


相關文章