Spark單機部署優化

Spark單機部署優化

在單機部署過程中,遇到的性能問題無非就是機器配置低,配置master模式提交運行也會慢,於是使用中有一些調優思路。

環境介紹

項目環境

技術棧 版本號
scala 2.10
spark 2.2.0
hadoop 2.7.x
hive 0.12.0
springboot 1.4.2
JDK 1.8.x

項目內容介紹

本項目使用Spark Graphx組件進行關係圖譜的計算,其中涉及到大量的內存運算,但機器資源有限,無非在集羣環境計算,只能在虛擬機中運算,最終選擇的使用單機部署方式使用。後期爲了增加拓展性,可以適配微服務等,項目成品是一個jar包形式。

機器介紹

硬件名稱 規格
CPU 16C
內存 64G
硬盤 300G

調優思路

scala基本代碼
val masterName = "local[16]"
val appName = “myAPP”
val sc:SparkContext = new SparkContext(new SparkConf()
						               .setMaster(masterName)
						               .setAppName(appName))
參數 解釋
master 填寫使用的模式,本地模式就寫local,括號內是指起幾個線程,通常與cpu數量相同即可
appName 給起的服務起名字,能夠標示即可
核數調優

local[]中數字寫大,最大爲cpu的核數,多了無意義,沒有效果提升。

並行數調優

需要添加參數spark.default.parallelism,具體代碼如下

val masterName = "local[16]"
val appName = “myAPP”
val parallelism = 10
val sc:SparkContext = new SparkContext(new SparkConf()
						               .setMaster(masterName)
						               .setAppName(appName)
						               .set("spark.default.parallelism", parallelism))

這個參數默認是與cpu核數相同,運行效率一般,可根據經驗進行調整,若無經驗,就按照有規律遞減/遞增的方式進行測試。

parallelism並行數設置 效果(毫秒)
100 81577
50 47039
16 38003
15 36217
10 31701
8 29741
5 26551

本效果僅供參考

本人固定使用代碼
val masterName = "local[16]"
val appName = “myAPP”
val parallelism = 10
val port = 2333
val localDir = "./data"
val sc:SparkContext = new SparkContext(new SparkConf()
						               .setMaster(masterName)
						               .setAppName(appName)
						               .set("spark.default.parallelism", parallelism)
						               .set("spark.driver.allowMultipleContexts", "true")
						               .set("spark.ui.port", port)
						               .set("spark.local.dir", localDir))
sc.setLogLevel("WARN")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章