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

做者:Ahmed Eldawy;Mohamed F.Mokbel
前端



摘要:本文實例介紹了SpatialHadoop平臺,它是第一 個基於成熟MapReduce對空間數據具備原生支持的框架。SpatialHadoop是對Hadoop的作了一個全面的擴展,使其核心功能能夠支持空 間數據。所以,對於處理空間數據,SpatialHadoop與目前存在的Hadoop項目相比具備更好的性能。SpatialHadoop主要包括一個 簡單的空間高級語言、兩級空間索引結構,以及創建在MapReduce層的基本空間組件和三個基本空間操做(範圍查詢、K-NN查詢和空間連接)。其餘的 空間操做一樣也能夠在SpatialHadoop平臺上進行部署。本文展現了一個基於SpatialHadoop的原型系統。系統運行環境爲Amazon EC2集羣,空間數據是從Tiger文件和OpenStreetMap上獲取,大小分別爲60GB和300GB。算法

一、引言編程

      許多相似於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。分佈式

二、SpatialHadoop框架函數

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

     SpatialHadoop採用了分層設計,主要包含四層,即語言層、存儲層、MapReduce和業務層。語言層提供了一個簡單高級類SQL語言,支 持空間數據類型和操做。存儲層包含了全局和局部兩個空間索引結構。全局索引用於計算節點間的數據劃分,局部索引用於節點內部數據組織。MapReduce 層擁有兩個新的空間組件,即SpatialFileSplitter和SpatialRecordReader,分別利用全局(修剪數據但不產生查詢結 果)和局部索引。業務層對基於空間索引和MapReduce層新組件實現的多種空間操做進行了封裝。SpatialHadoop與生具備高效實現三個基礎 空間操做,即範圍查詢、KNN和空間鏈接。其餘的空間操做也能夠經過相似的方法嵌入到該平臺中。

三、語言層

     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);

四、存儲層

    在存儲層,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來建 立全部分區的索引並存儲在主節點的主存中。一旦系統發生故障,全局全部就會根據須要從新創建。

五、MapReduce層

     傳統的Hadoop MapReduce層設計的目的是爲了處理不帶有索引的堆文件。而SpatialHadoop中的空間操做是以帶有空間索引的文件爲輸入的,處理方式是有 區別的。此外,一些空間操做,如空間鏈接等,是對二元操做,須要兩個輸入文件做爲輸入條件。爲了可以處理這些索引文件,SpatialHadoop在 MapReduce層引入了兩個新的組件,即SpatialFileSplitter和SpatialRecordReader,利用全局和局部索引分別對不一樣的數據進行高效訪問。

     SpatialFileSplitter須要輸入一個或兩個空間索引文件,除非用戶提供過濾功能。而後,利用全局索引修剪文件塊,這些修剪塊不會致使查 詢結果(如外圍查詢範圍),索引建立的同時,基於最小外包矩形進行分配。在進行須要兩個輸入文件的二元操做中,SpatialFileSplitter採 用兩個全局索引去選擇須要被一塊兒處理的文件塊的對組,做爲一個文件(例如,在空間鏈接中進行疊加分析塊)。SpatialRecordReader利用局 部索引,經過局部索引獲取一個分塊中容許的記錄,而不是循環遍歷全部記錄。它從指定的分區中讀取局部索引,將這個索引的指針傳遞給Map函數,該函數經過 這個索引去選擇在整個記錄中不須要迭代的處理記錄。同時,SpatialFileSplitter和SpatialRecordReader幫助開發者編 寫許多相似於MapReduce程序的空間操做。

六、業務層

    存儲層創建的空間索引,以及MapReduce層新的組件保證了SpatialHadoop能夠實現高效的空間操做功能。在這個實例中,本文展現了範圍查 詢、KNN和空間鏈接三個案例功能的實現。展現瞭如何使用SpatialHadoop中存儲層和MapReduce層。其餘的空間操做如KNN鏈接和最短 路徑分析也可以經過以下相似的方法實現。

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

    KNN操做運用於兩次迭代操做當中。第一次迭代,SpatialFileSplitter利用全局索引選取到包含查詢點的區塊。經過 SpatialRecordReader來提取出這個區塊中的局部索引,而後在這個區塊中查找KNN。爲了驗證查詢的結果是否正確,以查詢點做爲圓心,以 Kth鄰近目標做爲半徑,繪製一個測試圓。若是測試圓在處理的區塊中徹底符合,那麼結果就認爲是正確的。若是測試圓覆蓋到了其餘的分區,將經過第二個迭代 來處理這些重疊區域。

對於空間連接,SpatialFileSplitter在兩個文件中利用兩個全局索引去查找全部重疊區域組對。每一對都經過SpatialRecordReader來處理,SpatialRecordReader採用局部索引去查找重疊的記錄。

七、演示情景

     本文展現了一個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/),用戶能夠看到。

相關文章
相關標籤/搜索