1. 程式人生 > >Spark2.3.2原始碼解析: 5. SparkConf原始碼分析

Spark2.3.2原始碼解析: 5. SparkConf原始碼分析

 

在執行程式碼的時候,首先要宣告:SparkConf,本文以SparkConf進行分析,逐步展開。

val conf = new SparkConf()

 

 

 

類中的方法(org.apache.spark.SparkConf)

Modifier and Type Method and Description
SparkConf clone()

複製物件

boolean
contains
(String key)

是否包含指定的配置引數

String get(String key)

獲取引數,獲取不到的話丟擲異常NoSuchElementException

String get(String key, String defaultValue)

獲取引數,獲取失敗得到預設值

scala.Tuple2<String,String>[] getAll()

獲取所有引數

scala.Tuple2<String,String>[]
getAllWithPrefix(String prefix)

根據字首獲取所有引數

String getAppId()

獲取application id ,驗證Driver在TaskScheduler註冊之後,啟動Executor

scala.collection.immutable.Map<Object,String> getAvroSchema()

獲取avro schemas,如果配置Avro序列化

boolean getBoolean(String key, boolean defaultValue)

驗證引數是否設定

static scala.Option<String> getDeprecatedConfig(String key, java.util.Map<String,String> conf)

Looks for available deprecated keys for the given config option, and return the first value available.

double getDouble(String key, double defaultValue)

獲取double型別引數

scala.collection.Seq<scala.Tuple2<String,String>> getExecutorEnv()

獲取 SparkConf中所有executor的環境變數

scala.Option<String> getOption(String key)

獲取 Option型別引數

SparkConf registerKryoClasses(Class<?>[] classes)

使用 Kryo 序列化類

SparkConf remove(String key)

移除配置

SparkConf set(String key, String value)

設定引數

SparkConf setAll(scala.collection.Traversable<scala.Tuple2<String,String>> settings)

設定多個值

SparkConf setAppName(String name)

設定application名稱

SparkConf setExecutorEnv(scala.collection.Seq<scala.Tuple2<String,String>> variables)

設定多個Executor環境

SparkConf setExecutorEnv(String variable, String value)

設定executors環境

SparkConf setExecutorEnv(scala.Tuple2<String,String>[] variables)

設定多個executors環境

SparkConf

setJars(scala.collection.Seq<String> jars)

在分散式叢集中設定jar包

SparkConf

setJars(String[] jars)

在分散式叢集中設定jar包

SparkConf

setMaster(String master)

設定master URL 連線

如 “local”  本地執行一個執行緒

"local[4]" 本地執行四個cores

或者 "spark://master:7077" 執行在spark standalone 叢集中

SparkConf

setSparkHome(String home)

設定spark在每個worker節點的安裝地址

String

toDebugString()

返回所有的key-value 值的字串。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

詳情參考:http://spark.apache.org/docs/2.3.2/api/java/index.html

其他屬性參考:

應用程式屬性

屬性名稱 預設值 含義
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提供了三種選擇: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.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應用程式通知給其他機器的主機名

 

 

 

 

參考連線:http://blog.javachen.com/2015/06/07/spark-configuration.html