劉思宇+梁毅+陳誠
摘要:Spark是一種新型分布式海量數據處理平臺,在應用執行過程中,Spark以任務作為最小執行單元。因此,任務執行時間預測是指導Spark進行性能分析、優化資源調度以及故障監控的基礎。在Spark平臺中,由于計算數據分布不均及網絡資源的共享,導致同樣計算邏輯的任務在不同計算節點上執行的時間可能產生很大差異,需根據實時運行環境進行動態預測。通過結合任務在不同節點所需數據量以及集群網絡狀況,對任務在不同節點的執行時間進行預測。實驗表明,該方法對任務進行預估,誤差可保證在19%以內,任務執行時間預估算法對Spark調優有一定的指導作用。
關鍵詞:大數據;Spark;預測;分布式;任務
DOIDOI:10.11907/rjdk.171509
中圖分類號:TP306
文獻標識碼:A 文章編號:1672-7800(2017)012-0019-03
Abstract:Spark is a new distributed big data processing platform. In the implementation of Spark, task is the minimum execution unit. Therefore, the prediction of the execution time of the task can guide Spark to perform performance analysis, optimize resource scheduling and fault monitoring. In Spark platform, due to the uneven distribution of computing data and the sharing of network resources, the task with same computing logic may have different execution time in different nodes, and it needs to be dynamically predicted according to the real time environment. Currently on the Spark platform, the prediction technology is rarely studied. This paper predicts the execution time of each task at different nodes by combing the amount of data required by different tasks in each node and the status of cluster network. Experiment show that the method can be used to estimate the tasks in the task set, the error can guarantee less than 19%. Therefore, the task execution time estimation algorithm proposed in this paper has some guiding effect on Spark tuning.
Key Words:big data; Spark; prediction; distributed; task
0 引言
大數據時代,新型海量數據處理平臺大量涌現。其中,以Spark數據處理平臺為典型代表的分布式內存計算平臺得到廣泛關注 [1]。Spark是繼Hadoop之后提出的一種基于內存的分布式大數據處理平臺,被譽為可以取代Map/Reduce的下一代大數據處理核心技術[2-3]。與Hadoop Map/Reduce相比,Spark基于內存的運算可提升100倍處理速度[4]。
任務是Spark的最小執行單元。由于不同任務所需數據可能存在于集群各節點上,且數據量不盡相同,導致同樣計算邏輯任務在不同的計算節點上執行的時間產生很大差異,需要根據應用運行的實時環境進行動態預測[5]。對任務執行時間的有效預測可以指導Spark進行性能分析、優化資源調度以及監控平臺故障。目前,在Spark平臺還沒有任務執行時間預估技術。
本文分析了Spark平臺任務的拉取、執行過程,結合各任務在不同節點所需的數據量以及集群網絡狀況,對各任務執行時間進行預測,為優化資源調度、應用性能分析奠定基礎。
1 相關技術
1.1 Spark系統模型
Spark 是由 UC Berkeley AMP 實驗室開發的開源通用的海量數據處理平臺,是對Map/Reduce型海量數據處理平臺的創新與豐富,其構架如圖1所示。
Spark平臺采用Master/Slave結構,其中集群管理器作為Master端,負責平臺中的應用與資源管理;計算節點作為Slave端,負責啟動任務執行器Executor,由Executor負責任務的實際計算。在執行應用時,會在相應節點運行Driver進程,負責整個應用的執行和管理。
Spark大數據處理平臺的計算模型使用有向無環圖(Directed Acyclic Graph, DAG),描述復雜數據處理邏輯并提供更豐富的數據操作原語。Spark引入新的分布式數據集抽象表達模型——彈性分布式數據集(Resilient Distributed Datasets,RDDs)。RDD作為Spark平臺的核心概念,用于描述分布存儲于多個節點的海量數據集。
1.2 Spark任務執行模型
Spark計算模型中,依據數據操作類型,作業分為多個階段(Stage),各階段以一定的拓撲結構執行。在單個階段內部,為了操作海量數據集,Spark會并行執行一組完全相同的任務來處理RDD的每一分片。任務執行完成后,輸出結果會進行分區處理,具有相同分區值的元組會傳給后繼階段中同一個任務進行相關計算。不同Stage之間的數據傳輸過程被稱為混洗(Shuffle)。同一階段任務啟動時,會首先選擇合適的節點,并拉取其它節點上屬于該任務的數據進行計算。
執行任務時,Spark首先并行拉取遠程數據,而后對拉取來的數據進行處理,Spark的任務執行模型如圖2所示。
2 任務執行時間預測方法
本節介紹任務執行時間預測技術,主要是不同節點上各任務數據量獲取及各任務執行時間計算。
2.1 各節點數據量獲取
當新的Stage開始時,各任務需要根據上一階段不同任務寫入Spark既有模塊MapStatus中的文件位置信息,尋找合適的啟動位置,本方案擬定義新的方法對Map任務輸出到各節點的數據量進行統計,核心算法如下:
2.3 系統實現
系統基于Spark 1.6平臺實現,主要針對Spark平臺中既有的各模塊進行改造,并新增了數據采集模塊和任務執行代價預測模塊,圖3為系統架構。
在Executor端,新增了用以獲取Executor間網絡通信狀況以及Executor輸出數據信息的ExecutorMonitor。
在Driver端,新增了PartitionSizeGetter組件以及TaskCostEstimator組件。其中PartitionSizeGetter模塊負責在任務啟動之前訪問Spark既有的組件MapOutputTracker,統計出該任務在不同節點所需拉取的數據量,為任務執行代價估計模塊做準備。TaskCostEstimator通過PartitionSizeGetter模塊獲取不同任務在不同節點上所需的數據量,以及在Driver上的網絡通信狀況,通過計算模型進行綜合,對任務在不同位置的執行時間進行預估。
3 性能評估
3.1 實驗環境及負載選擇
本系統基于Apache Spark 1.6實現,所用操作系統為CentOS6.2,實驗測試環境由 4臺物理節點構成,每臺節點的硬件配置、網絡狀況、操作系統以及JVM版本等如表1所示。在本測試環境中,1臺節點作為提交節點,其余3臺作為數據計算節點。
任務執行時間通過Spark提供的UI界面監控獲得,選擇BigDataBench中的標準負載WordCount進行實驗。
3.2 預測結果分析
監測WordCount負載中執行Count操作的各任務所花費的時間,圖4為任務執行時間預測值與實際值的對比情況。
使用本文方法對各任務的執行時間進行預測,所得到的預測曲線與實際曲線基本吻合,任務預測時間與實際執行時間的平均誤差為13%,最大誤差不超過19%。
4 結語
本文面向Spark海量數據處理平臺,設計并實現了任務執行時間的預測模型,該模型充分考慮了任務的數據拉取代價與數據處理代價,對任務執行時間進行了綜合預測。實驗表明,本文預測方法可有效預測任務執行時間,最大誤差不超過19%。
參考文獻:
[1] AVAILABLE.Apache spark [EB/OL]. https://spark.apache.org.
[2] AVAILABLE.Apache hadoop [EB/OL]. http://hadoop.apache.org/.
[3] DEAN J, GHEMAWAT S. MapReduce: simplified data processing on large clusters[EB/OL]. http://blog.csdn.net/cnlht/article/details/6181799.
[4] KRISH K R, ANWAR A, BUTT A R. HatS: a heterogeneity-aware tiered storage for hadoop[C].Ieee/acm International Symposium on Cluster, Cloud and Grid Computing. IEEE,2014:502-511.
[5] ZAHARIA M, CHOWDHURY M, DAS T, et al. Resilient distributed datasets[C].A fault-tolerant abstraction for in-memory cluster computing,2014.
(責任編輯:杜能鋼)