spark參數

Driver

spark.driver.cores

driver端分配的核數,默認為1,thriftserver是啟動thriftserver服務的機器,資源充足的話可以盡量給多。

spark.driver.memory

driver端分配的內存數,默認為1g,同上。

spark.driver.maxResultSize

driver端接收的最大結果大小,默認1GB,最小1MB,設置0為無限。
這個參數不建議設置的太大,如果要做數據可視化,更應該控制在20-30MB以內。過大會導致OOM。

spark.extraListeners

默認none,隨著SparkContext被創建而創建,用于監聽單參數、無參數構造函數的創建,并拋出異常。

Executor

spark.executor.memory
每個executor分配的內存數,默認1g,會受到yarn CDH的限制,和memoryOverhead相加 不能超過總內存限制。

spark.executor.cores

每個executor的核數,默認yarn下1核,standalone下為所有可用的核。

spark.default.parallelism

默認RDD的分區數、并行數。
像reduceByKey和join等這種需要分布式shuffle的操作中,最大父RDD的分區數;像parallelize之類沒有父RDD的操作,則取決于運行環境下得cluster manager:
如果為單機模式,本機核數;集群模式為所有executor總核數與2中最大的一個。

spark.executor.heartbeatInterval

executor和driver心跳發送間隔,默認10s,必須遠遠小于spark.network.timeout

spark.files.fetchTimeout

從driver端執行SparkContext.addFile() 抓取添加的文件的超時時間,默認60s

spark.files.useFetchCache

默認true,如果設為true,拉取文件時會在同一個application中本地持久化,被若干個executors共享。這使得當同一個主機下有多個executors時,執行任務效率提高。

spark.broadcast.blockSize

TorrentBroadcastFactory中的每一個block大小,默認4m
過大會減少廣播時的并行度,過小會導致BlockManager 產生 performance hit.

spark.files.overwrite

默認false,是否在執行SparkContext.addFile() 添加文件時,覆蓋已有的內容有差異的文件。

spark.files.maxPartitionBytes

單partition中最多能容納的文件大小,單位Bytes 默認134217728 (128 MB)

spark.files.openCostInBytes

小文件合并閾值,小于該參數就會被合并到一個partition內。
默認4194304 (4 MB) 。這個參數在將多個文件放入一個partition時被用到,寧可設置的小一些,因為在partition操作中,小文件肯定會比大文件快。

spark.storage.memoryMapThreshold

從磁盤上讀文件時,最小單位不能少于該設定值,默認2m,小于或者接近操作系統的每個page的大小。

Shuffle

spark.reducer.maxSizeInFlight

默認48m。從每個reduce任務同時拉取的最大map數,每個reduce都會在完成任務后,需要一個堆外內存的緩沖區來存放結果,如果沒有充裕的內存就盡可能把這個調小一點。。相反,堆外內存充裕,調大些就能節省gc時間。

spark.reducer.maxBlocksInFlightPerAddress

限制了每個主機每次reduce可以被多少臺遠程主機拉取文件塊,調低這個參數可以有效減輕node manager的負載。(默認值Int.MaxValue)

spark.reducer.maxReqsInFlight

限制遠程機器拉取本機器文件塊的請求數,隨著集群增大,需要對此做出限制。否則可能會使本機負載過大而掛掉。。(默認值為Int.MaxValue)

spark.reducer.maxReqSizeShuffleToMem

shuffle請求的文件塊大小 超過這個參數值,就會被強行落盤,防止一大堆并發請求把內存占滿。(默認Long.MaxValue)

spark.shuffle.compress

是否壓縮map輸出文件,默認壓縮 true

spark.shuffle.spill.compress

shuffle過程中溢出的文件是否壓縮,默認true,使用spark.io.compression.codec壓縮。

spark.shuffle.file.buffer

在內存輸出流中 每個shuffle文件占用內存大小,適當提高 可以減少磁盤讀寫 io次數,初始值為32k

spark.shuffle.memoryFraction

該參數代表了Executor內存中,分配給shuffle read task進行聚合操作的內存比例,默認是20%。
cache少且內存充足時,可以調大該參數,給shuffle read的聚合操作更多內存,以避免由于內存不足導致聚合過程中頻繁讀寫磁盤。

spark.shuffle.manager

當ShuffleManager為SortShuffleManager時,如果shuffle read task的數量小于這個閾值(默認是200),則shuffle write過程中不會進行排序操作,而是直接按照未經優化的HashShuffleManager的方式去寫數據,但是最后會將每個task產生的所有臨時磁盤文件都合并成一個文件,并會創建單獨的索引文件。

當使用SortShuffleManager時,如果的確不需要排序操作,那么建議將這個參數調大一些,大于shuffle read task的數量。那么此時就會自動啟用bypass機制,map-side就不會進行排序了,減少了排序的性能開銷。但是這種方式下,依然會產生大量的磁盤文件,因此shuffle write性能有待提高。

spark.shuffle.consolidateFiles

如果使用HashShuffleManager,該參數有效。如果設置為true,那么就會開啟consolidate機制,會大幅度合并shuffle write的輸出文件,對于shuffle read task數量特別多的情況下,這種方法可以極大地減少磁盤IO開銷,提升性能。

如果的確不需要SortShuffleManager的排序機制,那么除了使用bypass機制,還可以嘗試將spark.shuffle.manager參數手動指定為hash,使用HashShuffleManager,同時開啟consolidate機制。

spark.shuffle.io.maxRetries

shuffle read task從shuffle write task所在節點拉取屬于自己的數據時,如果因為網絡異常導致拉取失敗,是會自動進行重試的。該參數就代表了可以重試的最大次數。如果在指定次數之內拉取還是沒有成功,就可能會導致作業執行失敗。

對于那些包含了特別耗時的shuffle操作的作業,建議增加重試最大次數(比如60次),以避免由于JVM的full gc或者網絡不穩定等因素導致的數據拉取失敗。在實踐中發現,對于針對超大數據量(數十億~上百億)的shuffle過程,調節該參數可以大幅度提升穩定性。

spark.shuffle.io.retryWait

同上,默認5s,建議加大間隔時長(比如60s),以增加shuffle操作的穩定性

Compression and Serialization

spark.broadcast.compress

廣播變量前是否會先進行壓縮。默認true (spark.io.compression.codec)

spark.io.compression.codec

壓縮RDD數據、日志、shuffle輸出等的壓縮格式 默認lz4

spark.io.compression.lz4.blockSize

使用lz4壓縮時,每個數據塊大小 默認32k

spark.rdd.compress

rdd是否壓縮 默認false,節省memory_cache大量內存 消耗更多的cpu資源(時間)。

spark.serializer.objectStreamReset

當使用JavaSerializer序列化時,會緩存對象防止寫多余的數據,但這些對象就不會被gc,可以輸入reset 清空緩存。默認緩存100個對象,修改成-1則不緩存任何對象。

Memory Management

spark.memory.fraction

執行內存和緩存內存(堆)占jvm總內存的比例,剩余的部分是spark留給用戶存儲內部源數據、數據結構、異常大的結果數據。
默認值0.6,調小會導致頻繁gc,調大容易造成oom。

spark.memory.storageFraction

用于存儲的內存在堆中的占比,默認0.5。調大會導致執行內存過小,執行數據落盤,影響效率;調小會導致緩存內存不夠,緩存到磁盤上去,影響效率。

值得一提的是在spark中,執行內存和緩存內存公用java堆,當執行內存沒有使用時,會動態分配給緩存內存使用,反之也是這樣。如果執行內存不夠用,可以將存儲內存釋放移動到磁盤上(最多釋放不能超過本參數劃分的比例),但存儲內存不能把執行內存搶走。

spark.memory.offHeap.enabled

是否允許使用堆外內存來進行某些操作。默認false

spark.memory.offHeap.size

允許使用進行操作的堆外內存的大小,單位bytes 默認0

spark.cleaner.periodicGC.interval

控制觸發gc的頻率,默認30min

spark.cleaner.referenceTracking

是否進行context cleaning,默認true

spark.cleaner.referenceTracking.blocking

清理線程是否應該阻止清理任務,默認true

spark.cleaner.referenceTracking.blocking.shuffle

清理線程是否應該阻止shuffle的清理任務,默認false

spark.cleaner.referenceTracking.cleanCheckpoints

清理線程是否應該清理依賴超出范圍的檢查點文件(checkpoint files不知道怎么翻譯。。)默認false

Networking

spark.rpc.message.maxSize

executors和driver間消息傳輸、map輸出的大小,默認128M。map多可以考慮增加。

spark.driver.blockManager.port和spark.driver.bindAddress

driver端綁定監聽block manager的地址與端口。

spark.driver.host和spark.driver.port

driver端的ip和端口。

spark.network.timeout

網絡交互超時時間,默認120s。如果
spark.core.connection.ack.wait.timeout
spark.storage.blockManagerSlaveTimeoutMs
spark.shuffle.io.connectionTimeout
spark.rpc.askTimeout orspark.rpc.lookupTimeout
沒有設置,那么就以此參數為準。

spark.port.maxRetries

設定了一個端口后,在放棄之前的最大重試次數,默認16。 會有一個預重試機制,每次會嘗試前一次嘗試的端口號+1的端口。如 設定了端口為8000,則最終會嘗試8000~(8000+16)范圍的端口。

spark.rpc.numRetries

rpc任務在放棄之前的重試次數,默認3,即rpc task最多會執行3次。

spark.rpc.retry.wait

重試間隔,默認3s

spark.rpc.askTimeout

rpc任務超時時間,默認spark.network.timeout

spark.rpc.lookupTimeout

rpc任務查找時長

Scheduling

spark.scheduler.maxRegisteredResourcesWaitingTime

在執行前最大等待申請資源的時間,默認30s。

spark.scheduler.minRegisteredResourcesRatio

實際注冊的資源數占預期需要的資源數的比例,默認0.8

spark.scheduler.mode

調度模式,默認FIFO 先進隊列先調度,可以選擇FAIR。

spark.scheduler.revive.interval

work回復重啟的時間間隔,默認1s

spark.scheduler.listenerbus.eventqueue.capacity

spark事件監聽隊列容量,默認10000,必須為正值,增加可能會消耗更多內存

spark.blacklist.enabled

是否列入黑名單,默認false。如果設成true,當一個executor失敗好幾次時,會被列入黑名單,防止后續task派發到這個executor。可以進一步調節spark.blacklist以下相關的參數:
(均為測試參數 Experimental)
spark.blacklist.timeout
spark.blacklist.task.maxTaskAttemptsPerExecutor
spark.blacklist.task.maxTaskAttemptsPerNode
spark.blacklist.stage.maxFailedTasksPerExecutor
spark.blacklist.application.maxFailedExecutorsPerNode
spark.blacklist.killBlacklistedExecutors
spark.blacklist.application.fetchFailure.enabled

spark.speculation

推測,如果有task執行的慢了,就會重新執行它。默認false,

詳細相關配置如下:
spark.speculation.interval

檢查task快慢的頻率,推測間隔,默認100ms。

spark.speculation.multiplier

推測比均值慢幾次算是task執行過慢,默認1.5

spark.speculation.quantile

在某個stage,完成度必須達到該參數的比例,才能被推測,默認0.75

spark.task.cpus

每個task分配的cpu數,默認1

spark.task.maxFailures

在放棄這個job前允許的最大失敗次數,重試次數為該參數-1,默認4

spark.task.reaper.enabled

賦予spark監控有權限去kill那些失效的task,默認false
(原先有 job失敗了但一直顯示有task在running,總算找到這個參數了)

其他進階的配置如下:
spark.task.reaper.pollingInterval

輪詢被kill掉的task的時間間隔,如果還在running,就會打warn日志,默認10s。

spark.task.reaper.threadDump

線程回收是是否產生日志,默認true。

spark.task.reaper.killTimeout

當一個被kill的task過了多久還在running,就會把那個executor給kill掉,默認-1。

spark.stage.maxConsecutiveAttempts

在終止前,一個stage連續嘗試次數,默認4。

Dynamic Allocation

spark.dynamicAllocation.enabled

是否開啟動態資源配置,根據工作負載來衡量是否應該增加或減少executor,默認false

以下相關參數:
spark.dynamicAllocation.minExecutors

動態分配最小executor個數,在啟動時就申請好的,默認0

spark.dynamicAllocation.maxExecutors

動態分配最大executor個數,默認infinity

spark.dynamicAllocation.initialExecutors

動態分配初始executor個數默認值=spark.dynamicAllocation.minExecutors

spark.dynamicAllocation.executorIdleTimeout

當某個executor空閑超過這個設定值,就會被kill,默認60s

spark.dynamicAllocation.cachedExecutorIdleTimeout

當某個緩存數據的executor空閑時間超過這個設定值,就會被kill,默認infinity

spark.dynamicAllocation.schedulerBacklogTimeout

任務隊列非空,資源不夠,申請executor的時間間隔,默認1s

spark.dynamicAllocation.sustainedSchedulerBacklogTimeout

同schedulerBacklogTimeout,是申請了新executor之后繼續申請的間隔,默認=schedulerBacklogTimeout

Spark Streaming

spark.streaming.stopGracefullyOnShutdown (true / false)默認fasle

確保在kill任務時,能夠處理完最后一批數據,再關閉程序,不會發生強制kill導致數據處理中斷,沒處理完的數據丟失

spark.streaming.backpressure.enabled (true / false) 默認false

開啟后spark自動根據系統負載選擇最優消費速率

spark.streaming.backpressure.initialRate (整數) 默認直接讀取所有

在開啟反壓的情況下,限制第一次批處理應該消費的數據,因為程序冷啟動隊列里面有大量積壓,防止第一次全部讀取,造成系統阻塞

spark.streaming.kafka.maxRatePerPartition (整數) 默認直接讀取所有

限制每秒每個消費線程讀取每個kafka分區最大的數據量

spark.streaming.unpersist

自動將spark streaming產生的、持久化的數據給清理掉,默認true,自動清理內存垃圾。

spark.streaming.ui.retainedBatches
spark streaming 日志接口在gc時保留的batch個數,默認1000

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372