以下是整理的Spark中的一些配置參數,官方文檔請參考Spark Configuration。
Spark提供三個位置用來配置系統:
-
Spark屬性:控制大部分的應用程序參數,可以用SparkConf對象或者Java系統屬性設置
-
環境變量:可以通過每個節點的
conf/spark-env.sh
腳本設置。例如IP地址、端口等信息 -
日志配置:可以通過log4j.properties配置
Spark屬性
Spark屬性控制大部分的應用程序設置,並且為每個應用程序分別配置它。這些屬性可以直接在SparkConf上配置,然后傳遞給SparkContext
。SparkConf
允許你配置一些通用的屬性(如master URL、應用程序名稱等等)以及通過set()
方法設置的任意鍵值對。例如,我們可以用如下方式創建一個擁有兩個線程的應用程序。
val conf = new SparkConf() .setMaster("local[2]") .setAppName("CountingSheep") .set("spark.executor.memory", "1g") val sc = new SparkContext(conf)
動態加載Spark屬性
在一些情況下,你可能想在SparkConf
中避免硬編碼確定的配置。例如,你想用不同的master或者不同的內存數運行相同的應用程序。Spark允許你簡單地創建一個空conf。
val sc = new SparkContext(new SparkConf())
然后你在運行時設置變量:
./bin/spark-submit --name "My app" --master local[4] --conf spark.shuffle.spill=false --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
中讀取配置選項,這個配置文件中,每一行都包含一對以空格
或者等號
分開的鍵和值。例如:
spark.master spark://5.6.7.8:7077 spark.executor.memory 512m spark.eventLog.enabled true spark.serializer org.apache.spark.serializer.KryoSerializer
任何標簽指定的值或者在配置文件中的值將會傳遞給應用程序,並且通過SparkConf
合並這些值。在SparkConf
上設置的屬性具有最高的優先級,其次是傳遞給spark-submit
或者spark-shell
的屬性值,最后是spark-defaults.conf
文件中的屬性值。
優先級順序:
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 |
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.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.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)策略。默認情況下沒有開啟。可以配置為 |
spark.executor.logs.rolling.time.interval |
daily |
executor日志滾動的時間間隔。默認情況下沒有開啟。合法的值是 |
spark.files.userClassPathFirst |
false |
(實驗性)當在Executors中加載類時,是否用戶添加的jar比Spark自己的jar優先級高。這個屬性可以降低Spark依賴和用戶依賴的沖突。它現在還是一個實驗性的特征。 |
spark.python.worker.memory |
512m |
在聚合期間,每個python worker進程使用的內存數。在聚合期間,如果內存超過了這個限制,它將會將數據塞進磁盤中 |
spark.python.profile |
false |
在Python worker中開啟profiling。通過 |
spark.python.profile.dump |
(none) |
driver退出前保存分析結果的dump文件的目錄。每個RDD都會分別dump一個文件。可以通過 |
spark.python.worker.reuse |
true |
是否重用python worker。如果是,它將使用固定數量的Python workers,而不需要為每個任務 |
spark.executorEnv.[EnvironmentVariableName] |
(none) |
通過 |
spark.mesos.executor.home |
driver side SPARK_HOME |
設置安裝在Mesos的executor上的Spark的目錄。默認情況下,executors將使用driver的Spark本地(home)目錄,這個目錄對它們不可見。注意,如果沒有通過 |
spark.mesos.executor.memoryOverhead |
executor memory * 0.07, 最小384m |
這個值是 |
Shuffle行為
屬性名稱 | 默認值 | 含義 |
---|---|---|
spark.reducer.maxMbInFlight |
48 |
從遞歸任務中同時獲取的map輸出數據的最大大小(mb)。因為每一個輸出都需要我們創建一個緩存用來接收,這個設置代表每個任務固定的內存上限,所以除非你有更大的內存,將其設置小一點 |
spark.shuffle.blockTransferService |
netty |
實現用來在executor直接傳遞shuffle和緩存塊。有兩種可用的實現: |
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數據。有兩種可用的實現: |
spark.shuffle.memoryFraction |
0.2 |
如果 |
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.spill.compress |
true |
在shuffle時,是否將spilling的數據壓縮。壓縮算法通過 |
Spark UI
屬性名稱 | 默認值 | 含義 |
---|---|---|
spark.eventLog.compress |
false |
是否壓縮事件日志。需要 |
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提供了三種選擇:lz4、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.kryoserializer.buffer.max.mb |
64 |
Kryo序列化緩存允許的最大值。這個值必須大於你嘗試序列化的對象 |
spark.kryoserializer.buffer.mb |
0.064 |
Kyro序列化緩存的大小。這樣worker上的每個核都有一個緩存。如果有需要,緩存會漲到 |
spark.rdd.compress |
true |
是否壓縮序列化的RDD分區。在花費一些額外的CPU時間的同時節省大量的空間 |
spark.serializer |
org.apache. spark.serializer. JavaSerializer |
序列化對象使用的類。默認的Java序列化類可以序列化任何可序列化的java對象但是它很慢。所有我們建議用org.apache.spark.serializer.KryoSerializer |
spark.serializer.objectStreamReset |
100 |
當用 |
運行時行為
屬性名稱 | 默認值 | 含義 |
---|---|---|
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;其他: |
如果用戶不設置,系統使用集群中運行shuffle操作的默認任務數(groupByKey、 reduceByKey等) |
spark.executor.heartbeatInterval |
10000 |
executor 向 the driver 匯報心跳的時間間隔,單位毫秒 |
spark.files.fetchTimeout |
60 |
driver 程序獲取通過 |
spark.files.useFetchCache |
true |
獲取文件時是否使用本地緩存 |
spark.files.overwrite |
false |
調用 |
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.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 |
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.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 |
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.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.cores |
1 |
claster模式時,driver使用的cpu核數,這時候driver運行在am中,其實也就是am和核數;client模式時,使用 |
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的地址(不要加 |
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 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設置。環境變量從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