?

Spark參數重要性研究

2020-04-14 04:54王奕
電腦知識與技術 2020年4期
關鍵詞:分布式重要性

摘要:隨著大數據時代的到來,Spark因其基于內存的計算方式,已經成為當前最流行的分布式計算框架之一。為了提升易用性,Spark為用戶提供了約200個可配置參數,這些參數控制著任務的運行。然而,Spark參數空間巨大,用戶經常無法合理選擇哪些參數進行配置。針對此問題,本文通過實驗對不同Spark參數與任務運行時間之間的關系進行了詳細分析,對Spark參數重要性進行研究。實驗表明,不同參數對任務影響程度差異巨大,這對開發者如何選擇參數進行配置具有指導意義。

關鍵詞:Spark;分布式;配置參數;任務運行時間;重要性

中圖分類號:TP311.13

文獻標識碼:A

文章編號:1009-3044(2020)04-0247-03

收稿日期:2019-11-02

作者簡介:王奕(1994—),男,浙江衢州人,同濟大學在讀碩士研究生,主要研究方向為大數據。

Research on the Importance of Spark Configurations

WANG Yi

(Tongji University,Shanghai 201804,China)

Abstract:With the advent of the era of big data,Spark has become one of the most popular distributed computing frameworks due to its ?memory-based computing methods.To improve ease of use,Spark provides users with about 200 configurable parameters that control the operation of the task.However,Spark has a huge parameter space,and users often cannot reasonably choose which parameters to configure.Aiming at this problem,this paper analyzes the relationship between different Spark parameters and task running time through experiments,and studies the importance of Spark parameters.Experiments show that the impact of different parameters on the task varies greatly,which has guiding significance for developers to choose parameters for configuration.

Key words:spark;distributed;configuration parameters;task runtime;importance

1 研究背景

Apache Spark[1]是由UC Berkeley AMP lab在2009年開發的一個基于內存的分布式計算系統。由于其在編程模型和性能的靈活性方面改進了Hadoop[2]MapReduce[3],尤其針對迭代式應用,所以Spark已經成為廣泛應用的大規模并行數據分析的計算框架之一。Spark 的編程核心是彈性分布式數據集(RDD)[4],RDD是一種不可變的分布式數據集合,它可以將計算中間結果:保存在內存中以加速計算。Spark對于RDD有兩種算子操作:Transformation(轉換)和Action(行動),其中Transformation(如map ilter等)表示父RDD轉換成子RDD是惰性執行的過程,直到有Action(如count、top等)操作時,才會觸發Spark提交作業開始計算。RDD之間存在寬依賴(W ide Dependencies)和窄依賴(Narrow Dependencies)兩種依賴關系,其中寬依賴指的是一個父RDD分區對應多個子RDD分區,如ReduceByKey、SortbyKey等,窄依賴指的是一個父RDD分區對應一個子RDD分區,如filter .union等。

Spark為常見的大數據存儲技術提供了接口,如HDFS和NoSQL數據庫。Spark功能組件較為完善,如圖1所示,Spark.Core為核心組件,實現了常見的算子;SparkSQL[5]提供了類似SQL的結構化查詢方式;SparkStreaming[6]使得Spark可以支持流計算;Mllib[7]提供了常見的機器學習算法庫;GraphXI[8]提供了常見的圖算法用于圖計算。

如圖2為Spark運行架構,Driver所在節點為主節點,Worker所在節點為從節點。當用戶使用spark-submit提交一個任務后,SparkContext首先會向Master進行注冊并向資源管理器進行資源申請。資源管理器會根據參數配置,在各個從節點上啟動一定數量的Executor,每個Executor都會占用一定的計算資源(如CPUCore、內存大小等)。申請到資源后,Spark會根據程序代碼將RDD間的依賴關系形成有向無環圖(DAG),然后劃分為不同的Stage,每個Stage包含若千個Task,這些Task被分配到Executor中進行分布式計算。Task是最小的執行單元,等到所有節點上的Task執行完畢,Spark會將任務執行結果進行匯總,然后將結果輸入到下一個Stage,直到代碼邏輯執行完畢,得到最終結果并保存。

為了支持上述所有功能,Spark已經發展成為一個高效且負責的分布式計算系統,其為用戶提供了約200個參數,這些參數決定了資源的分配,控制著任務的運行。國內外很少有針對Spark參數和性能之間作用關系的研究,對于前者,Spark官網為理解大多數參數的作用提供了寶貴的指導作用。由于參數眾多,這些建議并不能使用戶快速定位自己應該配置的參數。大多數參數我們可以直觀地知道參數或多或少地影響任務執行效率和集群性能,然而熟悉不同參數對Spark任務的影響程度比僅僅知道存在影響更加重要。

在本文中,我們研究了不同Spark參數與任務運行時間之間的關系。對于每個參數,通過在相應的值范圍內隨機配置參數值,我們通過實驗獲取任務最短和最長運行時間,從而確定每個參數對任務的影響程度,確定其重要性。

2 實驗分析

Spark有約200個參數,可以分為全局參數、環境參數、任務執行參數、序列化與壓縮參數Shuffle行為參數、內存存儲參數等,其中全局參數和環,境參數數量眾多,但基本與性能之間無關,比如 name 信息、Java環境變量、HDFS地址信息等。本文結合Spark官網川的指南,選擇了16個參數進行重要性研究:

(1)任務執行參數:spark.cores.max,spark.executor.cores,spark.de-fault.parallelism

(2)序列化與壓縮參數:spark.serializer,spark.io.compression.codec,spark.rdd.compress,spark.shuffle.compress,spark.shuffle.spill.compress

(3)Shuffle 行為參數:spark.shuffle.manager,spark .shuffle.file.buffer,spark .shuffle.io.retry W ait,spark.shuffle.io.maxRetries

(4)內存存儲參數:spark.executor.memory,spark.memory.fraction,spark.memory.storageF raction,spark.driver.memory

每個參數的取值范圍在由于不同集群硬件資源的差異不盡相同,除去可選值為離散值的參數外,其余的參數我們通過算法2.1確定參數的取值范圍。

本研究從大數據壓力測試工具HiBench[9]中選取了3個有代表性的任務進行實驗,包括Sort、K-Means和PageRank。對于每個選定的參數,我們通過隨機參數生成器才參數范圍內生成參數,為其執行上述3個Spark任務并獲取平均運行時間。對于離散值的參數,我們選取每個可能取值進行測試,對于連續值的參數,我們為每個參數隨機生成50個參數值進行測試,單個任務對應的一個取值情況下運行兩次取平均運行時間。

本實驗在參數取默認值情況下,Spark任務平均運行時間為62.92秒,如圖3所示為每個參數在取值范圍內對應的Spark任務最短和最長運行時間,實驗結果顯示spark.cores.max參數對任務運行時間影響最大,最長執行時間是最短執行時間約5.35倍。為了更好地評估參數對任務運行時間的影響程度,我們定義了公式2.1,其中tmax表示任務最大運行時間,tmin表示任務最短運行時間,t。default 表示任務默認運行時間:

通過公式2.1計算可知,所選取的16個參數對任務運行時間的平均影響程度impact為58.13%,其中參數spark.cores.max的impact值達到158.93%,對任務運行時間影響最大,參數spark.shuffle.io.maxRetries的impact值為14.62%,對任務運行時間影響最小。我們還可以計算獲取任務執行參數、序列化與壓縮參數、Shufle行為參數、內存存儲參數的impact值分別為123.97%、31.47% .42.99%和57.22%。

3 結論

本文實驗分析了Spark參數與任務執行時間之間的關系,研究了參數的重要性。實驗結果表明不同參數對任務影響程度差異巨大,對Spark任務執行時間影響程度最大和最小的參數分別為spark.cores.max和spark.shufle.io.maxRetries。對于不同類型的參數,任務執行參數對Spark任務運行時間影響程度最高,其次是內存存儲參數,接著是Shuffle行為參數,最后是序列化與壓縮參數。本文對于Spark參數重要性的研究對于用戶選擇哪些參數進行配置優化具有很好的實用價值和指導意義。參考文獻:

[1]Apache Spark,htp://park.apache.org/.

[2]White T.Hadoop:The definitive guide[M]." O'Reilly Media,Inc.",2012.

[3]Dean J,Ghemawat S.MapReduce:simplified data processing on large clusters[J].Communications of the ACM,2008,51(1):.107-113.

[4]Zaharia M,Chowdhury M,Das T,et al.Resilient distributed datasets:A fault-tolerant abstraction for in-memory cluster computing[C]//Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation.USENIX Association,2012:2-2.

[5]Armbrust M,Xin R S,Lian C,et al.Spark sql:Relational data processing in spark[C]//Proceedings of the 2015 ACM SIG MOD international conference on management of data.ACM,2015:1383-1394.

[6]Zaharia M,Das T,Li H Y,et al.Discretized streams:A fault-tolerant model for scalable stream processing[R].Defense Technical Information Center,2012.

[7]Meng X,Bradley J,Yavuz B,et al.Mllib:Machine learning in apache spark[J].The Journal of Machine Learning Research,2016,17(1):1235-1241.

[8]Xin R S,Gonzalez J E,Franklin M J,et al.Graphx:A resilient distributed graph system on spark[C]//First International W orkshop on Graph Data Management Experiences and Sys-tems.ACM,2013:2.

[9]Huang S S,Huang J,Dai J Q,et al.The HiBench benchmark

suite:Characterization of the MapReduce-based data analysis [C]//2010 IEEE 26th International Conference on Data Engineering Workshops (ICDEW 2010),March 1-6,2010.Long Beach,CA,USA.IEEE,2010.

[通聯編輯:光文玲]

猜你喜歡
分布式重要性
“0”的重要性
論七分飽之重要性
論七分飽之重要性
基于預處理MUSIC算法的分布式陣列DOA估計
讀《邊疆的重要性》有感
西門子 分布式I/O Simatic ET 200AL
家庭分布式儲能的發展前景
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合