以下是整理的Spark中的一些配置參數,官方文檔請參考Spark Configuration。
Spark提供三個位置用來配置系統:
- Spark屬性:控制大部分的應用程式參數,可以用SparkConf對象或者Java系統屬性設定
- 環境變量:可以通過每個節點的
腳本設定。例如IP位址、端口等資訊conf/spark-env.sh
- 日志配置:可以通過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出現記憶體溢出錯誤(依賴于 和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.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屬性需要用SparkConf對象或者 腳本用到的 檔案設定。堆記憶體可以通過 設定 |
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。通過 展示分析結果。或者在driver退出前展示分析結果。可以通過 将結果dump到磁盤中。如果一些分析結果已經手動展示,那麼在driver退出前,它們再不會自動展示 |
spark.python.profile.dump | (none) | driver退出前儲存分析結果的dump檔案的目錄。每個RDD都會分别dump一個檔案。可以通過 加載這些檔案。如果指定了這個屬性,分析結果不會自動展示 |
spark.python.worker.reuse | true | 是否重用python worker。如果是,它将使用固定數量的Python workers,而不需要為每個任務 一個Python程序。如果有一個非常大的廣播,這個設定将非常有用。因為,廣播不需要為每個任務從JVM到Python worker傳遞一次 |
spark.executorEnv.[EnvironmentVariableName] | (none) | 通過 添加指定的環境變量到executor程序。使用者可以指定多個 ,設定多個環境變量 |
spark.mesos.executor.home | driver side SPARK_HOME | 設定安裝在Mesos的executor上的Spark的目錄。預設情況下,executors将使用driver的Spark本地(home)目錄,這個目錄對它們不可見。注意,如果沒有通過 指定Spark的二進制包,這個設定才起作用 |
spark.mesos.executor.memoryOverhead | executor memory * 0.07, 最小384m | 這個值是 的補充。它用來計算mesos任務的總記憶體。另外,有一個7%的寫死設定。最後的值将選擇 或者 的7%二者之間的大者 |
Shuffle行為
屬性名稱 | 預設值 | 含義 |
---|---|---|
spark.reducer.maxMbInFlight | 48 | 從遞歸任務中同時擷取的map輸出資料的最大大小(mb)。因為每一個輸出都需要我們建立一個緩存用來接收,這個設定代表每個任務固定的記憶體上限,是以除非你有更大的記憶體,将其設定小一點 |
spark.shuffle.blockTransferService | netty | 實作用來在executor直接傳遞shuffle和緩存塊。有兩種可用的實作: 和 。基于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資料。有兩種可用的實作: 和 。基于sort的shuffle有更高的記憶體使用率 |
spark.shuffle.memoryFraction | 0.2 | 如果 為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”,通過将多出的資料寫入磁盤來限制記憶體數。通過 來指定spilling的門檻值 |
spark.shuffle.spill.compress | true | 在shuffle時,是否将spilling的資料壓縮。壓縮算法通過 指定。 |
Spark UI
屬性名稱 | 預設值 | 含義 |
---|---|---|
spark.eventLog.compress | false | 是否壓縮事件日志。需要 為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提供了三種選擇: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序列化,設定這個類去注冊你的自定義類。如果你需要用自定義的方式注冊你的類,那麼這個屬性是有用的。否則 會更簡單。它應該設定一個繼承自KryoRegistrator的類 |
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 | 當用 序列化時,序列化器通過緩存對象防止寫多餘的資料,然而這會造成這些對象的垃圾回收停止。通過請求’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;其他: | 如果使用者不設定,系統使用叢集中運作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 and 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 . Tune this in combination of and 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 and 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 | ||
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 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設定。環境變量從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