Spark配置參數詳解

 

如下是整理的Spark中的一些配置參數,官方文檔請參考Spark Configurationhtml

Spark提供三個位置用來配置系統:java

  • Spark屬性:控制大部分的應用程序參數,能夠用SparkConf對象或者Java系統屬性設置node

  • 環境變量:能夠經過每一個節點的conf/spark-env.sh腳本設置。例如IP地址、端口等信息python

  • 日誌配置:能夠經過log4j.properties配置web

Spark屬性

Spark屬性控制大部分的應用程序設置,而且爲每一個應用程序分別配置它。這些屬性能夠直接在SparkConf上配置,而後傳遞給SparkContextSparkConf容許你配置一些通用的屬性(如master URL、應用程序名稱等等)以及經過set()方法設置的任意鍵值對。例如,咱們能夠用以下方式建立一個擁有兩個線程的應用程序。算法

 

[plain]  view plain  copy
 
  1. val conf = new SparkConf()  
  2.              .setMaster("local[2]")  
  3.              .setAppName("CountingSheep")  
  4.              .set("spark.executor.memory", "1g")  
  5. val sc = new SparkContext(conf)  

 

動態加載Spark屬性

在一些狀況下,你可能想在SparkConf中避免硬編碼肯定的配置。例如,你想用不一樣的master或者不一樣的內存數運行相同的應用程序。Spark容許你簡單地建立一個空conf。shell

 

[plain]  view plain  copy
 
  1. val sc = new SparkContext(new SparkConf())  

 

而後你在運行時設置變量:apache

 

[plain]  view plain  copy
 
  1. ./bin/spark-submit --name "My app" --master local[4] --conf spark.shuffle.spill=false  
  2.   --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jar  

 

Spark shell和spark-submit工具支持兩種方式動態加載配置。第一種方式是命令行選項,例如--master,如上面shell顯示的那樣。spark-submit能夠接受任何Spark屬性,用--conf參數表示。可是那些參與Spark應用程序啓動的屬性要用特定的參數表示。運行./bin/spark-submit --help將會顯示選項的整個列表。編程

bin/spark-submit也會從conf/spark-defaults.conf中讀取配置選項,這個配置文件中,每一行都包含一對以空格或者等號分開的鍵和值。例如:windows

 

[plain]  view plain  copy
 
  1. spark.master            spark://5.6.7.8:7077  
  2. spark.executor.memory   512m  
  3. spark.eventLog.enabled  true  
  4. spark.serializer        org.apache.spark.serializer.KryoSerializer  

 

任何標籤指定的值或者在配置文件中的值將會傳遞給應用程序,而且經過SparkConf合併這些值。在SparkConf上設置的屬性具備最高的優先級,其次是傳遞給spark-submit或者spark-shell的屬性值,最後是spark-defaults.conf文件中的屬性值。

優先級順序:

 

[plain]  view plain  copy
 
  1. SparkConf > CLI > spark-defaults.conf  

 

查看Spark屬性

http://<driver>:4040上的應用程序Web UI在Environment標籤中列出了全部的Spark屬性。這對你確保設置的屬性的正確性是頗有用的。

注意:只有經過spark-defaults.conf, SparkConf以及命令行直接指定的值纔會顯示。對於其它的配置屬性,你能夠認爲程序用到了默認的值。

可用的屬性

控制內部設置的大部分屬性都有合理的默認值,一些最通用的選項設置以下:

 

應用程序屬性

屬性名稱 默認值 含義

spark.app.name

(none)

你的應用程序的名字。這將在UI和日誌數據中出現

spark.driver.cores

1

driver程序運行須要的cpu內核數

spark.driver.maxResultSize

1g

每一個Spark action(如collect)全部分區的序列化結果的總大小限制。設置的值應該不小於1m,0表明沒有限制。若是總大小超過這個限制,程序將會終止。大的限制值可能致使driver出現內存溢出錯誤(依賴於spark.driver.memory和JVM中對象的內存消耗)。

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)

集羣管理器鏈接的地方

 

運行環境

屬性名稱 默認值 含義

spark.driver.extraClassPath

(none)

附加到driver的classpath的額外的classpath實體。

spark.driver.extraJavaOptions

(none)

傳遞給driver的JVM選項字符串。例如GC設置或者其它日誌設置。注意,在這個選項中設置Spark屬性或者堆大小是不合法的。Spark屬性須要用--driver-class-path設置。

spark.driver.extraLibraryPath

(none)

指定啓動driver的JVM時用到的庫路徑

spark.driver.userClassPathFirst

false

(實驗性)當在driver中加載類時,是否用戶添加的jar比Spark本身的jar優先級高。這個屬性能夠下降Spark依賴和用戶依賴的衝突。它如今仍是一個實驗性的特徵。

spark.executor.extraClassPath

(none)

附加到executors的classpath的額外的classpath實體。這個設置存在的主要目的是Spark與舊版本的向後兼容問題。用戶通常不用設置這個選項

spark.executor.extraJavaOptions

(none)

傳遞給executors的JVM選項字符串。例如GC設置或者其它日誌設置。注意,在這個選項中設置Spark屬性或者堆大小是不合法的。Spark屬性須要用SparkConf對象或者spark-submit腳本用到的spark-defaults.conf文件設置。堆內存能夠經過spark.executor.memory設置

spark.executor.extraLibraryPath

(none)

指定啓動executor的JVM時用到的庫路徑

spark.executor.logs.rolling.maxRetainedFiles

(none)

設置被系統保留的最近滾動日誌文件的數量。更老的日誌文件將被刪除。默認沒有開啓。

spark.executor.logs.rolling.size.maxBytes

(none)

executor日誌的最大滾動大小。默認狀況下沒有開啓。值設置爲字節

spark.executor.logs.rolling.strategy

(none)

設置executor日誌的滾動(rolling)策略。默認狀況下沒有開啓。能夠配置爲timesize。對於time,用spark.executor.logs.rolling.time.interval設置滾動間隔;對於size,用spark.executor.logs.rolling.size.maxBytes設置最大的滾動大小

spark.executor.logs.rolling.time.interval

daily

executor日誌滾動的時間間隔。默認狀況下沒有開啓。合法的值是dailyhourlyminutely以及任意的秒。

spark.files.userClassPathFirst

false

(實驗性)當在Executors中加載類時,是否用戶添加的jar比Spark本身的jar優先級高。這個屬性能夠下降Spark依賴和用戶依賴的衝突。它如今仍是一個實驗性的特徵。

spark.python.worker.memory

512m

在聚合期間,每一個python worker進程使用的內存數。在聚合期間,若是內存超過了這個限制,它將會將數據塞進磁盤中

spark.python.profile

false

在Python worker中開啓profiling。經過sc.show_profiles()展現分析結果。或者在driver退出前展現分析結果。能夠經過sc.dump_profiles(path)將結果dump到磁盤中。若是一些分析結果已經手動展現,那麼在driver退出前,它們再不會自動展現

spark.python.profile.dump

(none)

driver退出前保存分析結果的dump文件的目錄。每一個RDD都會分別dump一個文件。能夠經過ptats.Stats()加載這些文件。若是指定了這個屬性,分析結果不會自動展現

spark.python.worker.reuse

true

是否重用python worker。若是是,它將使用固定數量的Python workers,而不須要爲每一個任務fork()一個Python進程。若是有一個很是大的廣播,這個設置將很是有用。由於,廣播不須要爲每一個任務從JVM到Python worker傳遞一次

spark.executorEnv.[EnvironmentVariableName]

(none)

經過EnvironmentVariableName添加指定的環境變量到executor進程。用戶能夠指定多個EnvironmentVariableName,設置多個環境變量

spark.mesos.executor.home

driver side SPARK_HOME

設置安裝在Mesos的executor上的Spark的目錄。默認狀況下,executors將使用driver的Spark本地(home)目錄,這個目錄對它們不可見。注意,若是沒有經過 spark.executor.uri指定Spark的二進制包,這個設置才起做用

spark.mesos.executor.memoryOverhead

executor memory * 0.07, 最小384m

這個值是spark.executor.memory的補充。它用來計算mesos任務的總內存。另外,有一個7%的硬編碼設置。最後的值將選擇spark.mesos.executor.memoryOverhead或者spark.executor.memory的7%兩者之間的大者

 

Shuffle行爲

屬性名稱 默認值 含義

spark.reducer.maxMbInFlight

48

從遞歸任務中同時獲取的map輸出數據的最大大小(mb)。由於每個輸出都須要咱們建立一個緩存用來接收,這個設置表明每一個任務固定的內存上限,因此除非你有更大的內存,將其設置小一點

spark.shuffle.blockTransferService

netty

實現用來在executor直接傳遞shuffle和緩存塊。有兩種可用的實現:nettynio。基於netty的塊傳遞在具備相同的效率狀況下更簡單

spark.shuffle.compress

true

是否壓縮map操做的輸出文件。通常狀況下,這是一個好的選擇。

spark.shuffle.consolidateFiles

false

若是設置爲」true」,在shuffle期間,合併的中間文件將會被建立。建立更少的文件能夠提供文件系統的shuffle的效 率。這些shuffle都伴隨着大量遞歸任務。當用ext4和dfs文件系統時,推薦設置爲」true」。在ext3中,由於文件系統的限制,這個選項可 能機器(大於8核)下降效率

spark.shuffle.file.buffer.kb

32

每一個shuffle文件輸出流內存內緩存的大小,單位是kb。這個緩存減小了建立只中間shuffle文件中磁盤搜索和系統訪問的數量

spark.shuffle.io.maxRetries

3

Netty only,自動重試次數

spark.shuffle.io.numConnectionsPerPeer

1

Netty only

spark.shuffle.io.preferDirectBufs

true

Netty only

spark.shuffle.io.retryWait

5

Netty only

spark.shuffle.manager

sort

它的實現用於shuffle數據。有兩種可用的實現:sorthash。基於sort的shuffle有更高的內存使用率

spark.shuffle.memoryFraction

0.2

若是spark.shuffle.spill爲 true,shuffle中聚合和合並組操做使用的java堆內存佔總內存的比重。在任什麼時候候,shuffles使用的全部內存內maps的集合大小都受 這個限制的約束。超過這個限制,spilling數據將會保存到磁盤上。若是spilling太過頻繁,考慮增大這個值

spark.shuffle.sort.bypassMergeThreshold

200

(Advanced) In the sort-based shuffle manager, avoid merge-sorting data if there is no map-side aggregation and there are at most this many reduce partitions

spark.shuffle.spill

true

若是設置爲」true」,經過將多出的數據寫入磁盤來限制內存數。經過spark.shuffle.memoryFraction來指定spilling的閾值

spark.shuffle.spill.compress

true

在shuffle時,是否將spilling的數據壓縮。壓縮算法經過spark.io.compression.codec指定。

 

Spark UI

屬性名稱 默認值 含義

spark.eventLog.compress

false

是否壓縮事件日誌。須要spark.eventLog.enabled爲true

spark.eventLog.dir

file:///tmp/spark-events

Spark事件日誌記錄的基本目錄。在這個基本目錄下,Spark爲每一個應用程序建立一個子目錄。各個應用程序記錄日誌到直到的目錄。用戶可能想設置這爲統一的地點,像HDFS同樣,因此歷史文件能夠經過歷史服務器讀取

spark.eventLog.enabled

false

是否記錄Spark的事件日誌。這在應用程序完成後,從新構造web UI是有用的

spark.ui.killEnabled

true

運行在web UI中殺死stage和相應的job

spark.ui.port

4040

你的應用程序dashboard的端口。顯示內存和工做量數據

spark.ui.retainedJobs

1000

在垃圾回收以前,Spark UI和狀態API記住的job數

spark.ui.retainedStages

1000

在垃圾回收以前,Spark UI和狀態API記住的stage數

 

壓縮和序列化

屬性名稱 默認值 含義

spark.broadcast.compress

true

在發送廣播變量以前是否壓縮它

spark.closure.serializer

org.apache.

spark.serializer.

JavaSerializer

閉包用到的序列化類。目前只支持java序列化器

spark.io.compression.codec

snappy

壓縮諸如RDD分區、廣播變量、shuffle輸出等內部數據的編碼解碼器。默認狀況下,Spark提供了三種選擇:lz四、lzf和snappy,你也能夠用完整的類名來制定。

spark.io.compression.lz4.block.size

32768

LZ4壓縮中用到的塊大小。下降這個塊的大小也會下降shuffle內存使用率

spark.io.compression.snappy.block.size

32768

Snappy壓縮中用到的塊大小。下降這個塊的大小也會下降shuffle內存使用率

spark.kryo.classesToRegister

(none)

若是你用Kryo序列化,給定的用逗號分隔的自定義類名列表表示要註冊的類

spark.kryo.referenceTracking

true

當用Kryo序列化時,跟蹤是否引用同一對象。若是你的對象圖有環,這是必須的設置。若是他們包含相同對象的多個副本,這個設置對效率是有用的。若是你知道不在這兩個場景,那麼能夠禁用它以提升效率

spark.kryo.registrationRequired

false

是否須要註冊爲Kyro可用。若是設置爲true,而後若是一個沒有註冊的類序列化,Kyro會拋出異常。若是設置爲false,Kryo將會同時寫每一個對象和其非註冊類名。寫類名可能形成顯著地性能瓶頸。

spark.kryo.registrator

(none)

若是你用Kryo序列化,設置這個類去註冊你的自定義類。若是你須要用自定義的方式註冊你的類,那麼這個屬性是有用的。不然spark.kryo.classesToRegister會更簡單。它應該設置一個繼承自KryoRegistrator的類

spark.kryoserializer.buffer.max.mb

64

Kryo序列化緩存容許的最大值。這個值必須大於你嘗試序列化的對象

spark.kryoserializer.buffer.mb

0.064

Kyro序列化緩存的大小。這樣worker上的每一個核都有一個緩存。若是有須要,緩存會漲到spark.kryoserializer.buffer.max.mb設置的值那麼大。

spark.rdd.compress

true

是否壓縮序列化的RDD分區。在花費一些額外的CPU時間的同時節省大量的空間

spark.serializer

org.apache.

spark.serializer.

JavaSerializer

序列化對象使用的類。默認的Java序列化類能夠序列化任何可序列化的java對象可是它很慢。全部咱們建議用org.apache.spark.serializer.KryoSerializer

spark.serializer.objectStreamReset

100

當用org.apache.spark.serializer.JavaSerializer序列化時,序列化器經過緩存對象防止寫多餘的數據,然而這會形成這些對象的垃圾回收中止。經過請求’reset’,你從序列化器中flush這些信息並容許收集老的數據。爲了關閉這個週期性的reset,你能夠將值設爲-1。默認狀況下,每一百個對象reset一次

 

運行時行爲

屬性名稱 默認值 含義

spark.broadcast.blockSize

4096

TorrentBroadcastFactory傳輸的塊大小,太大值會下降併發,過小的值會出現性能瓶頸

spark.broadcast.factory

org.apache.spark.

broadcast.TorrentBroadcastFactory

broadcast實現類

spark.cleaner.ttl

(infinite)

spark記錄任何元數據(stages生成、task生成等)的持續時間。按期清理能夠確保將超期的元數據丟棄,這在運行長時間任務是頗有用的,如運行7*24的sparkstreaming任務。RDD持久化在內存中的超期數據也會被清理

spark.default.parallelism

本地模式:機器核數;Mesos:8;其餘:max(executor的core,2)

若是用戶不設置,系統使用集羣中運行shuffle操做的默認任務數(groupByKey、 reduceByKey等)

spark.executor.heartbeatInterval

10000

executor 向 the driver 彙報心跳的時間間隔,單位毫秒

spark.files.fetchTimeout

60

driver 程序獲取經過SparkContext.addFile()添加的文件時的超時時間,單位秒

spark.files.useFetchCache

true

獲取文件時是否使用本地緩存

spark.files.overwrite

false

調用SparkContext.addFile()時候是否覆蓋文件

spark.hadoop.cloneConf

false

每一個task是否克隆一份hadoop的配置文件

spark.hadoop.validateOutputSpecs

true

是否校驗輸出

spark.storage.memoryFraction

0.6

Spark內存緩存的堆大小佔用總內存比例,該值不能大於老年代內存大小,默認值爲0.6,可是,若是你手動設置老年代大小,你能夠增長該值

spark.storage.memoryMapThreshold

2097152

內存塊大小

spark.storage.unrollFraction

0.2

Fraction of spark.storage.memoryFraction to use for unrolling blocks in memory.

spark.tachyonStore.baseDir

System.getProperty(「java.io.tmpdir」)

Tachyon File System臨時目錄

spark.tachyonStore.url

tachyon://localhost:19998

Tachyon File System URL

 

 

網絡

屬性名稱 默認值 含義

spark.driver.host

(local hostname)

driver監聽的主機名或者IP地址。這用於和executors以及獨立的master通訊

spark.driver.port

(random)

driver監聽的接口。這用於和executors以及獨立的master通訊

spark.fileserver.port

(random)

driver的文件服務器監聽的端口

spark.broadcast.port

(random)

driver的HTTP廣播服務器監聽的端口

spark.replClassServer.port

(random)

driver的HTTP類服務器監聽的端口

spark.blockManager.port

(random)

塊管理器監聽的端口。這些同時存在於driver和executors

spark.executor.port

(random)

executor監聽的端口。用於與driver通訊

spark.port.maxRetries

16

當綁定到一個端口,在放棄前重試的最大次數

spark.akka.frameSize

10

在」control plane」通訊中容許的最大消息大小。若是你的任務須要發送大的結果到driver中,調大這個值

spark.akka.threads

4

通訊的actor線程數。當driver有不少CPU核時,調大它是有用的

spark.akka.timeout

100

Spark節點之間的通訊超時。單位是秒

spark.akka.heartbeat.pauses

6000

This is set to a larger value to disable failure detector that comes inbuilt akka. It can be enabled again, if you plan to use this feature (Not recommended). Acceptable heart beat pause in seconds for akka. This can be used to control sensitivity to gc pauses. Tune this in combination of spark.akka.heartbeat.interval and spark.akka.failure-detector.threshold if you need to.

spark.akka.failure-detector.threshold

300.0

This is set to a larger value to disable failure detector that comes inbuilt akka. It can be enabled again, if you plan to use this feature (Not recommended). This maps to akka’s akka.remote.transport-failure-detector.threshold. Tune this in combination of spark.akka.heartbeat.pauses and spark.akka.heartbeat.interval if you need to.

spark.akka.heartbeat.interval

1000

This is set to a larger value to disable failure detector that comes inbuilt akka. It can be enabled again, if you plan to use this feature (Not recommended). A larger interval value in seconds reduces network overhead and a smaller value ( ~ 1 s) might be more informative for akka’s failure detector. Tune this in combination of spark.akka.heartbeat.pauses and spark.akka.failure-detector.threshold if you need to. Only positive use case for using failure detector can be, a sensistive failure detector can help evict rogue executors really quick. However this is usually not the case as gc pauses and network lags are expected in a real Spark cluster. Apart from that enabling this leads to a lot of exchanges of heart beats between nodes leading to flooding the network with those.

 

調度相關屬性

屬性名稱 默認值 含義

spark.task.cpus

1

爲每一個任務分配的內核數

spark.task.maxFailures

4

Task的最大重試次數

spark.scheduler.mode

FIFO

Spark的任務調度模式,還有一種Fair模式

spark.cores.max

 

當應用程序運行在Standalone集羣或者粗粒度共享模式Mesos集羣時,應用程序向集羣請求的最大CPU內核總數(不是指每 臺機器,而是整個集羣)。若是不設置,對於Standalone集羣將使用spark.deploy.defaultCores中數值,而Mesos將使 用集羣中可用的內核

spark.mesos.coarse

False

若是設置爲true,在Mesos集羣中運行時使用粗粒度共享模式

spark.speculation

False

如下幾個參數是關於Spark推測執行機制的相關參數。此參數設定是否使用推測執行機制,若是設置爲true則spark使用推測執行機制,對於Stage中拖後腿的Task在其餘節點中從新啓動,並將最早完成的Task的計算結果最爲最終結果

spark.speculation.interval

100

Spark多長時間進行檢查task運行狀態用以推測,以毫秒爲單位

spark.speculation.quantile

 

推測啓動前,Stage必需要完成總Task的百分比

spark.speculation.multiplier

1.5

比已完成Task的運行速度中位數慢多少倍才啓用推測

spark.locality.wait

3000

如下幾個參數是關於Spark數據本地性的。本參數是以毫秒爲單位啓動本地數據task的等待時間,若是超出就啓動下一本地優先級別 的task。該設置一樣能夠應用到各優先級別的本地性之間(本地進程 -> 本地節點 -> 本地機架 -> 任意節點 ),固然,也能夠經過spark.locality.wait.node等參數設置不一樣優先級別的本地性

spark.locality.wait.process

spark.locality.wait

本地進程級別的本地等待時間

spark.locality.wait.node

spark.locality.wait

本地節點級別的本地等待時間

spark.locality.wait.rack

spark.locality.wait

本地機架級別的本地等待時間

spark.scheduler.revive.interval

1000

復活從新獲取資源的Task的最長時間間隔(毫秒),發生在Task由於本地資源不足而將資源分配給其餘Task運行後進入等待時間,若是這個等待時間內從新獲取足夠的資源就繼續計算

 

Dynamic Allocation

屬性名稱 默認值 含義        

spark.dynamicAllocation.enabled

false

是否開啓動態資源蒐集

spark.dynamicAllocation.executorIdleTimeout

600

 

spark.dynamicAllocation.initialExecutors

spark.dynamicAllocation.minExecutors

 

spark.dynamicAllocation.maxExecutors

Integer.MAX_VALUE

 

spark.dynamicAllocation.minExecutors

0

 

spark.dynamicAllocation.schedulerBacklogTimeout

5

 

spark.dynamicAllocation.sustainedSchedulerBacklogTimeout

schedulerBacklogTimeout

 

 

安全

屬性名稱 默認值 含義

spark.authenticate

false

是否Spark驗證其內部鏈接。若是不是運行在YARN上,請看spark.authenticate.secret

spark.authenticate.secret

None

設置Spark兩個組件之間的密匙驗證。若是不是運行在YARN上,可是須要驗證,這個選項必須設置

spark.core.connection.auth.wait.timeout

30

鏈接時等待驗證的實際。單位爲秒

spark.core.connection.ack.wait.timeout

60

鏈接等待回答的時間。單位爲秒。爲了不不但願的超時,你能夠設置更大的值

spark.ui.filters

None

應用到Spark web UI的用於過濾類名的逗號分隔的列表。過濾器必須是標準的javax servlet Filter。經過設置java系統屬性也能夠指定每一個過濾器的參數。spark.<class name of filter>.params='param1=value1,param2=value2'。例如-Dspark.ui.filters=com.test.filter1-Dspark.com.test.filter1.params='param1=foo,param2=testing'

spark.acls.enable

false

是否開啓Spark acls。若是開啓了,它檢查用戶是否有權限去查看或修改job。UI利用使用過濾器驗證和設置用戶

spark.ui.view.acls

empty

逗號分隔的用戶列表,列表中的用戶有查看Spark web UI的權限。默認狀況下,只有啓動Spark job的用戶有查看權限

spark.modify.acls

empty

逗號分隔的用戶列表,列表中的用戶有修改Spark job的權限。默認狀況下,只有啓動Spark job的用戶有修改權限

spark.admin.acls

empty

逗號分隔的用戶或者管理員列表,列表中的用戶或管理員有查看和修改全部Spark job的權限。若是你運行在一個共享集羣,有一組管理員或開發者幫助debug,這個選項有用

 

加密

屬性名稱 默認值 含義

spark.ssl.enabled

false

是否開啓ssl

spark.ssl.enabledAlgorithms

Empty

JVM支持的加密算法列表,逗號分隔

spark.ssl.keyPassword

None

 

spark.ssl.keyStore

None

 

spark.ssl.keyStorePassword

None

 

spark.ssl.protocol

None

 

spark.ssl.trustStore

None

 

spark.ssl.trustStorePassword

None

 

 

Spark Streaming

屬性名稱 默認值 含義

spark.streaming.blockInterval

200

在這個時間間隔(ms)內,經過Spark Streaming receivers接收的數據在保存到Spark以前,chunk爲數據塊。推薦的最小值爲50ms

spark.streaming.receiver.maxRate

infinite

每秒鐘每一個receiver將接收的數據的最大記錄數。有效的狀況下,每一個流將消耗至少這個數目的記錄。設置這個配置爲0或者-1將會不做限制

spark.streaming.receiver.writeAheadLogs.enable

false

Enable write ahead logs for receivers. All the input data received through receivers will be saved to write ahead logs that will allow it to be recovered after driver failures

spark.streaming.unpersist

true

強制經過Spark Streaming生成並持久化的RDD自動從Spark內存中非持久化。經過Spark Streaming接收的原始輸入數據也將清除。設置這個屬性爲false容許流應用程序訪問原始數據和持久化RDD,由於它們沒有被自動清除。可是它會 形成更高的內存花費

 

集羣管理 

Spark On YARN

屬性名稱 默認值 含義

spark.yarn.am.memory

512m

client 模式時,am的內存大小;cluster模式時,使用spark.driver.memory變量

spark.driver.cores

1

claster模式時,driver使用的cpu核數,這時候driver運行在am中,其實也就是am和核數;client模式時,使用spark.yarn.am.cores變量

spark.yarn.am.cores

1

client 模式時,am的cpu核數

spark.yarn.am.waitTime

100000

啓動時等待時間

spark.yarn.submit.file.replication

3

應用程序上傳到HDFS的文件的副本數

spark.yarn.preserve.staging.files

False

若爲true,在job結束後,將stage相關的文件保留而不是刪除

spark.yarn.scheduler.heartbeat.interval-ms

5000

Spark AppMaster發送心跳信息給YARN RM的時間間隔

spark.yarn.max.executor.failures

2倍於executor數,最小值3

致使應用程序宣告失敗的最大executor失敗次數

spark.yarn.applicationMaster.waitTries

10

RM等待Spark AppMaster啓動重試次數,也就是SparkContext初始化次數。超過這個數值,啓動失敗

spark.yarn.historyServer.address

 

Spark history server的地址(不要加 http://)。這個地址會在Spark應用程序完成後提交給YARN RM,而後RM將信息從RM UI寫到history server UI上。

spark.yarn.dist.archives

(none)

 

spark.yarn.dist.files

(none)

 

spark.executor.instances

2

executor實例個數

spark.yarn.executor.memoryOverhead

executorMemory * 0.07, with minimum of 384

executor的堆內存大小設置

spark.yarn.driver.memoryOverhead

driverMemory * 0.07, with minimum of 384

driver的堆內存大小設置

spark.yarn.am.memoryOverhead

AM memory * 0.07, with minimum of 384

am的堆內存大小設置,在client模式時設置

spark.yarn.queue

default

使用yarn的隊列

spark.yarn.jar

(none)

 

spark.yarn.access.namenodes

(none)

 

spark.yarn.appMasterEnv.[EnvironmentVariableName]

(none)

設置am的環境變量

spark.yarn.containerLauncherMaxThreads

25

am啓動executor的最大線程數

spark.yarn.am.extraJavaOptions

(none)

 

spark.yarn.maxAppAttempts

yarn.resourcemanager.am.max-attempts in YARN

am重試次數

Spark on Mesos

使用較少,參考Running Spark on Mesos

Spark Standalone Mode

參考Spark Standalone Mode

Spark History Server

當你運行Spark Standalone Mode或者Spark on Mesos模式時,你能夠經過Spark History Server來查看job運行狀況。

Spark History Server的環境變量:

屬性名稱 含義

SPARK_DAEMON_MEMORY

Memory to allocate to the history server (default: 512m).

SPARK_DAEMON_JAVA_OPTS

JVM options for the history server (default: none).

SPARK_PUBLIC_DNS

 

SPARK_HISTORY_OPTS

配置 spark.history.* 屬性

Spark History Server的屬性:

屬性名稱 默認 含義

spark.history.provider

org.apache.spark.deploy.history.FsHistoryProvide

應用歷史後端實現的類名。 目前只有一個實現, 由Spark提供, 它查看存儲在文件系統裏面的應用日誌

spark.history.fs.logDirectory

file:/tmp/spark-events

 

spark.history.updateInterval

10

以秒爲單位,多長時間Spark history server顯示的信息進行更新。每次更新都會檢查持久層事件日誌的任何變化。

spark.history.retainedApplications

50

在Spark history server上顯示的最大應用程序數量,若是超過這個值,舊的應用程序信息將被刪除。

spark.history.ui.port

18080

官方版本中,Spark history server的默認訪問端口

spark.history.kerberos.enabled

false

是否使用kerberos方式登陸訪問history server,對於持久層位於安全集羣的HDFS上是有用的。若是設置爲true,就要配置下面的兩個屬性。

spark.history.kerberos.principal

用於Spark history server的kerberos主體名稱

spark.history.kerberos.keytab

用於Spark history server的kerberos keytab文件位置

spark.history.ui.acls.enable

false

受權用戶查看應用程序信息的時候是否檢查acl。若是啓用,只有應用程序全部者和spark.ui.view.acls指定的用戶能夠查看應用程序信息;若是禁用,不作任何檢查。

 

環境變量

經過環境變量配置肯定的Spark設置。環境變量從Spark安裝目錄下的conf/spark-env.sh腳本讀取(或者windows的conf/spark-env.cmd)。在獨立的或者Mesos模式下,這個文件能夠給機器肯定的信息,如主機名。當運行本地應用程序或者提交腳本時,它也起做用。

注意,當Spark安裝時,conf/spark-env.sh默認是不存在的。你能夠複製conf/spark-env.sh.template建立它。

能夠在spark-env.sh中設置以下變量:

環境變量 含義

JAVA_HOME

Java安裝的路徑

PYSPARK_PYTHON

PySpark用到的Python二進制執行文件路徑

SPARK_LOCAL_IP

機器綁定的IP地址

SPARK_PUBLIC_DNS

你Spark應用程序通知給其餘機器的主機名

除了以上這些,Spark standalone cluster scripts也能夠設置一些選項。例如每臺機器使用的核數以及最大內存。

由於spark-env.sh是shell腳本,其中的一些能夠以編程方式設置。例如,你能夠經過特定的網絡接口計算SPARK_LOCAL_IP

 

配置日誌

Spark用log4j logging。你能夠經過在conf目錄下添加log4j.properties文件來配置。一種方法是複製log4j.properties.template文件。

原創文章,轉載請註明: 轉載自JavaChen Blog,做者:JavaChen

本文連接地址:http://blog.javachen.com/2015/06/07/spark-configuration.html

相關文章
相關標籤/搜索