SpatialHadoop實例:面向空間數據的高效MapReduce框架

原作:Ahmed Eldawy;Mohamed F.Mokbel (UMN)
翻譯:Leo(CAU)
譯文來源:SpatialBall《SpatialHadoop實例:面向空間數據的高效MapReduce框架》

摘要:

本文實例介紹了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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章