num-executors
參數說明:該參數用於設置Spark作業總共要用多少個Executor進程來執行。Driver在向YARN集群管理器申請資源時,YARN集群管理器會盡可能按照你的設置來在集群的各個工作節點上,啟動相應數量的Executor進程。這個參數非常之重要,如果不設置的話,默認只會給你啟動少量的Executor進程,此時你的Spark作業的運行速度是非常慢的。
參數調優建議:每個Spark作業的運行一般設置50~100個左右的Executor進程比較合適,設置太少或太多的Executor進程都不好。設置的太少,無法充分利用集群資源;設置的太多的話,大部分隊列可能無法給予充分的資源。
executor-memory
參數說明:該參數用於設置每個Executor進程的內存。Executor內存的大小,很多時候直接決定了Spark作業的性能,而且跟常見的JVM OOM異常,也有直接的關聯。
參數調優建議:每個Executor進程的內存設置4G~8G較為合適。但是這只是一個參考值,具體的設置還是得根據不同部門的資源隊列來定。可以看看自己團隊的資源隊列的最大內存限制是多少,num-executors乘以executor-memory,就代表了你的Spark作業申請到的總內存量(也就是所有Executor進程的內存總和),這個量是不能超過隊列的最大內存量的。此外,如果你是跟團隊里其他人共享這個資源隊列,那么申請的總內存量最好不要超過資源隊列最大總內存的1/3~1/2,避免你自己的Spark作業占用了隊列所有的資源,導致別的同學的作業無法運行。
executor-cores
參數說明:該參數用於設置每個Executor進程的CPU core數量。這個參數決定了每個Executor進程並行執行task線程的能力。因為每個CPU core同一時間只能執行一個task線程,因此每個Executor進程的CPU core數量越多,越能夠快速地執行完分配給自己的所有task線程。
參數調優建議:Executor的CPU core數量設置為2~4個較為合適。同樣得根據不同部門的資源隊列來定,可以看看自己的資源隊列的最大CPU core限制是多少,再依據設置的Executor數量,來決定每個Executor進程可以分配到幾個CPU core。同樣建議,如果是跟他人共享這個隊列,那么num-executors * executor-cores不要超過隊列總CPU core的1/3~1/2左右比較合適,也是避免影響其他同學的作業運行。
應用程序屬性
| 屬性名稱 |
默認值 |
含義 |
|---|---|---|
| spark.app.name |
(none) |
你的應用程序的名字。這將在UI和日志數據中出現 |
| spark.driver.cores |
1 |
driver程序運行需要的cpu內核數 |
| spark.driver.maxResultSize |
1g |
每個Spark action(如collect)所有分區的序列化結果的總大小限制。設置的值應該不小於1m,0代表沒有限制。如果總大小超過這個限制,程序將會終止。大的限制值可能導致driver出現內存溢出錯誤(依賴於 |
| spark.driver.memory |
512m |
driver進程使用的內存數 |
| spark.executor.memory |
512m |
每個executor進程使用的內存數。和JVM內存串擁有相同的格式(如512m,2g) |
| spark.extraListeners |
(none) |
注冊監聽器,需要實現SparkListener |
| spark.local.dir |
/tmp |
Spark中暫存空間的使用目錄。在Spark1.0以及更高的版本中,這個屬性被SPARK_LOCAL_DIRS(Standalone, Mesos)和LOCAL_DIRS(YARN)環境變量覆蓋。 |
| spark.logConf |
false |
當SparkContext啟動時,將有效的SparkConf記錄為INFO。 |
| spark.master |
(none) |
集群管理器連接的地方 |
