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