TOP

Spark Configuration
2018-12-24 13:04:14 】 瀏覽:612
Tags:

Spark Properties

Spark屬性控制大多數應用程序設置,并為每個應用程序單獨配置。 可以直接在傳遞給SparkContext的SparkConf上設置這些屬性。 SparkConf允許您通過set()方法配置一些常見屬性(例如主URL和應用程序名稱)以及任意鍵值對。 例如,我們可以使用兩個線程初始化應用程序,如下所示:

請注意,我們使用local [2]運行,這意味著兩個線程 - 代表“最小”并行性,這可以幫助檢測僅在我們在分布式上下文中運行時存在的錯誤。

val conf = new SparkConf()
             .setMaster("local[2]")
             .setAppName("CountingSheep")
val sc = new SparkContext(conf)

請注意,我們可以在本地模式下擁有多個線程,在像Spark Streaming這樣的情況下,我們實際上可能需要多個線程來防止出現任何類型的饑餓問題。

指定某個持續時間的屬性應使用時間單位進行配置。 接受以下格式:

25ms (milliseconds)
5s (seconds)
10m or 10min (minutes)
3h (hours)
5d (days)
1y (years)

指定字節大小的屬性應使用單位大小進行配置。 接受以下格式:

1b (bytes)
1k or 1kb (kibibytes = 1024 bytes)
1m or 1mb (mebibytes = 1024 kibibytes)
1g or 1gb (gibibytes = 1024 mebibytes)
1t or 1tb (tebibytes = 1024 gibibytes)
1p or 1pb (pebibytes = 1024 tebibytes)

雖然沒有單位的數字通常被解釋為字節,但有些數字被解釋為KiB或MiB。 請參閱各個配置屬性的文檔。 在可能的情況下,需要指定單位。

Dynamically Loading Spark Properties

在某些情況下,您可能希望避免在SparkConf中對某些配置進行硬編碼。 例如,如果您想使用不同的主服務器或不同的內存量運行相同的應用程序。 Spark允許您簡單地創建一個空conf:

val sc = new SparkContext(new SparkConf())

然后,您可以在運行時提供配置值:

./bin/spark-submit --name "My app" --master local[4] --conf spark.eventLog.enabled=false
  --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jar

Spark shell和spark-submit工具支持兩種動態加載配置的方法。 第一個是命令行選項,例如–master,如上所示。 spark-submit可以使用–conf標志接受任何Spark屬性,但是對于在啟動Spark應用程序中起作用的屬性使用特殊標志。 運行./bin/spark-submit –help將顯示這些選項的完整列表。

bin / spark-submit還將讀取conf / spark-defaults.conf中的配置選項,其中每一行由一個鍵和一個由空格分隔的值組成。 例如:

spark.master            spark://5.6.7.8:7077
spark.executor.memory   4g
spark.eventLog.enabled  true
spark.serializer        org.apache.spark.serializer.KryoSerializer

指定為flags或屬性文件中的任何值都將傳遞給應用程序,并與通過SparkConf指定的值合并。直接在SparkConf上設置的屬性取最高優先級,然后將標志傳遞給spark-submit或spark-shell,然后選擇spark-defaults.conf文件中的選項。自早期版本的Spark以來,已經重命名了一些配置鍵;在這種情況下,舊的密鑰名稱仍然被接受,但優先級低于任何新密鑰的實例。

Spark屬性主要可以分為兩種:一種與部署相關,如“spark.driver.memory”,“spark.executor.instances”,在運行時通過SparkConf以編程方式設置時,這種屬性可能不受影響,或者行為取決于您選擇的集群管理器和部署模式,因此建議通過配置文件或spark-submit命令行選項進行設置;另一個主要與Spark運行時控件有關,比如“spark.task.maxFailures”,這種屬性可以以任何一種方式設置。

Viewing Spark Properties

位于http:// :4040的應用程序Web UI在“環境”選項卡中列出了Spark屬性。 這是一個檢查以確保您的屬性設置正確的有用位置。 請注意,僅顯示通過spark-defaults.conf,SparkConf或命令行顯式指定的值。 對于所有其他配置屬性,您可以假設使用默認值。

可用屬性

控制內部設置的大多數屬性都具有合理的默認值。 一些最常見的選項是:
Application Properties

Property Name Default Meaning
spark.app.name (none) 你應用的名字,這將顯示在UI和日志數據中。
spark.driver.cores 1 僅在cluster模式下用于驅動程序進程的核心數。
spark.driver.maxResultSize 1g 每個Spark操作(例如,收集)的所有分區的序列化結果的總大小限制(以字節為單位)。 應至少為1M,或0為無限制。 如果總大小超過此限制,則將中止作業。 具有高限制可能會導致驅動程序中出現內存不足錯誤(取決于spark.driver.memory和JVM中對象的內存開銷)。 設置適當的限制可以保護驅動程序免受內存不足錯誤的影響
spark.driver.memory 1g 除非另有說明(例如1g,2g),否則在MiB中用于驅動程序進程的內存量,即SparkContext初始化的內存量。注意:在client端模式下,不能直接在應用程序中通過SparkConf設置此配置,因為驅動程序JVM已在此時啟動。 相反优乐棋牌app下载,請通過–driver-memory命令行選項或默認屬性文件設置此項。
spark.driver.memoryOverhead driverMemory * 0.10, with minimum of 384 除非另有說明,否則在群集模式下為每個驅動程序分配的堆外內存量(MiB)。 這是一個內存,可以解決諸如VM開銷,實習字符串,其他本地開銷等問題。這會隨著容器大小(通常為6-10%)而增長。 YARN和Kubernetes目前支持此選項
spark.executor.memory 1g 除非另有說明,否則每個執行程序進程使用的內存量(MiB)。 (例如2g,8g)。
spark.executor.memoryOverhead executorMemory * 0.10, with minimum of 384 除非另有說明,否則每個執行程序要分配的堆外內存量(MiB)。 這是內存,可以解決諸如VM開銷,實習字符串,其他本機開銷等問題。這會隨著執行程序大小(通常為6-10%)而增長。 YARN和Kubernetes目前支持此選項。
spark.extraListeners (none) 以逗號分隔的實現SparkListener的類列表; 在初始化SparkContext時,將創建這些類的實例并使用Spark的偵聽器總線進行注冊。 如果一個類有一個接受SparkConf的單參數構造函數,那么將調用該構造函數; 否則,將調用零參數構造函數。 如果找不到有效的構造函數,SparkContext創建將失敗并出現異常。
spark.local.dir /tmp 用于Spark中“臨時”空間的目錄,包括映射輸出文件和存儲在磁盤上的RDD。 這應該位于系統中的快速本地磁盤上。 它也可以是不同磁盤上多個目錄的逗號分隔列表。 注意:在Spark 1.0及更高版本中,這將由集群管理器設置的SPARK_LOCAL_DIRS(Standalone,Mesos)或LOCAL_DIRS(YARN)環境變量覆蓋。
spark.logConf false 啟動SparkContext時,將有效的SparkConf記錄為INFO。
spark.master (none) 要連接的集群管理器。 請參閱允許的主URL列表。
spark.submit.deployMode (none) Spark驅動程序的部署模式,“client”或“cluster”,這意味著在集群內的其中一個節點上本地(“client”)或遠程(“cluster”)啟動驅動程序。
spark.log.callerContext (none) 在Yarn / HDFS上運行時將寫入Yarn RM log / HDFS審核日志的應用程序信息。 它的長度取決于Hadoop配置hadoop.caller.context.max.size。 它應該簡潔,通常最多可包含50個字符。
spark.driver.supervise false 如果為true,則在失敗且退出狀態為非零時自動重新啟動驅動程序。 僅在Spark standalone 模式或Mesos集群部署模式下有效。

除此之外,還提供以下屬性,在某些情況下可能有用:
Runtime Environment

Property Name Default Meaning
spark.driver.extraClassPath (none) 額外的類路徑條目,前置于驅動程序的類路徑。注意:在client模式下,不能直接在應用程序中通過SparkConf設置此配置,因為驅動程序JVM已在此時啟動。 相反优乐棋牌app下载,請通過–driver-class-path命令行選項或在默認屬性文件中設置它。
spark.driver.extraJavaOptions (none) 要傳遞給驅動程序的一串額外JVM選項。 例如,GC設置或其他日志記錄。 請注意,使用此選項設置最大堆大小(-Xmx)設置是非法的。 可以在群集模式下使用spark.driver.memory并在客戶端模式下通過–driver-memory命令行選項設置最大堆大小設置。注意:在客戶端模式下,不能直接在應用程序中通過SparkConf設置此配置,因為驅動程序JVM已在此時啟動。 相反优乐棋牌app下载,請通過–driver-java-options命令行選項或在默認屬性文件中設置它。
spark.driver.extraLibraryPath (none) 設置啟動驅動程序JVM時要使用的特殊庫路徑。注意:在client模式下,不能直接在應用程序中通過SparkConf設置此配置,因為驅動程序JVM已在此時啟動。 相反优乐棋牌app下载,請通過–driver-library-path命令行選項或在默認屬性文件中設置它。
spark.driver.userClassPathFirst false (實驗)在驅動程序中加載類時,是否優先使用用戶添加的jar優先于Spark自己的jar。 此功能可用于緩解Spark的依賴項和用戶依賴項之間的沖突。 它目前是一個實驗性功能。 這僅在群集模式下使用。
spark.executor.extraClassPath (none) 額外的類路徑條目,前置于執行程序的類路徑。 這主要是為了向后兼容舊版本的Spark。 用戶通常不需要設置此選項。
spark.executor.extraJavaOptions (none) 要傳遞給執行程序的一串額外JVM選項。 例如,GC設置或其他日志記錄。 請注意,使用此選項設置Spark屬性或最大堆大小(-Xmx)設置是非法的。 應使用SparkConf對象或spark-submit腳本使用的spark-defaults.conf文件設置Spark屬性。 可以使用spark.executor.memory設置最大堆大小設置。
spark.executor.extraLibraryPath (none) 設置啟動執行程序JVM時要使用的特殊庫路徑。
spark.executor.logs.rolling.maxRetainedFiles (none) 設置將由系統保留的最新滾動日志文件的數量。 舊的日志文件將被刪除。 默認情況下禁用。
spark.executor.logs.rolling.enableCompression false 啟用執行程序日志壓縮。 如果已啟用,則將壓縮已滾動的執行程序日志。 默認情況下禁用。
spark.executor.logs.rolling.maxSize (none) 設置文件的最大大小(以字節為單位),執行程序日志將通過該字節翻轉。 默認情況下禁用滾動。 請參閱spark.executor.logs.rolling.maxRetainedFiles以自動清除舊日志。
spark.executor.logs.rolling.strategy (none) 設置執行程序日志的滾動策略。 默認情況下,它被禁用。 它可以設置為“時間”(基于時間的滾動)或“大小”(基于大小的滾動)。 對于“time”,使用spark.executor.logs.rolling.time.interval設置滾動間隔。 對于“size”,使用spark.executor.logs.rolling.maxSize設置滾動的最大文件大小。
spark.executor.logs.rolling.time.interval daily 設置執行程序日志將被滾動的時間間隔。 默認情況下禁用滾動。 有效值為每日,每小時,每分鐘或以秒為單位的任何間隔。 請參閱spark.executor.logs.rolling.maxRetainedFiles以自動清除舊日志。
spark.executor.userClassPathFirst false (實驗)與spark.driver.userClassPathFirst功能相同,但應用于執行程序實例。
spark.executorEnv.[EnvironmentVariableName] (none) 將EnvironmentVariableName指定的環境變量添加到Executor進程。 用戶可以指定其中的多個來設置多個環境變量。
spark.redaction.regex (i)secret | password 正則表達式決定驅動程序和執行程序環境中的哪些Spark配置屬性和環境變量包含敏感信息。 當此正則表達式與屬性鍵或值匹配時,將從環境UI和各種日志(如YARN和事件日志)中編輯該值。
spark.python.profile false Python worker中啟用性能分析,配置文件結果將顯示為sc.show_profiles(),否則將在驅動程序退出之前顯示。 它也可以通過sc.dump_profiles(path)轉儲到磁盤中。 如果手動顯示某些配置文件結果,則在驅動程序退出之前不會自動顯示它們。 默認情況下,將使用pyspark.profiler.BasicProfiler,但可以通過將探查器類作為參數傳遞給SparkContext構造函數來覆蓋它。
spark.python.profile.dump (none) 在驅動程序退出之前用于轉儲配置文件結果的目錄。 結果將作為每個RDD的單獨文件轉儲。 它們可以通過ptats.Stats()加載。 如果指定了此選項,則不會自動顯示配置文件結果。
spark.python.worker.memory 512m 聚合期間每個python worker進程使用的內存量,格式與具有大小單位后綴(“k”,“m”,“g”或“t”)的JVM內存字符串相同(例如512m,2g)。 如果聚合期間使用的內存超過此數量,則會將數據溢出到磁盤中
spark.python.worker.reuse true 是否重用Python工作者。 如果是,它將使用固定數量的Python工作者,不需要為每個任務fork()一個Python進程。 如果有大型廣播,那將非常有用,那么就不需要廣播從JVM轉移到Python工作人員來完成每項任務。
spark.files Comma-separated list of files to be placed in the working directory of each executor. Globs are allowed.
spark.submit.pyFiles 以逗號分隔的.zip,.egg或.py文件列表,放在Python應用程序的PYTHONPATH上。 允許使用全球。
spark.jars 以逗號分隔的jar列表,包含在驅動程序和執行程序類路徑中。 允許使用全球。
spark.jars.packages 以逗號分隔的jar的Maven坐標列表,包含在驅動程序和執行程序類路徑中。 坐標應為groupId:artifactId:version。 如果給出spark.jars.ivySettings,則將根據文件中的配置解析工件,否則將在本地maven repo中搜索工件,然后在maven central中搜索,最后由命令行選項提供的任何其他遠程存儲庫 - 庫。 有關更多詳細信息,請參閱高級依賴關系管理。
spark.jars.excludes 逗號分隔的groupId:artifactId列表,在解析spark.jars.packages中提供的依賴項時排除,以避免依賴性沖突。
spark.jars.ivy 指定Ivy用戶目錄的路徑,用于來自spark.jars.packages的本地Ivy緩存和包文件。 這將覆蓋Ivy屬性ivy.default.ivy.user.dir,默認為/ .ivy2。
spark.jars.ivySettings 常春藤設置文件的路徑,用于自定義使用spark.jars.packages指定的jar的分辨率,而不是內置的默認值,例如maven central。 還將包括命令行選項–repositories或spark.jars.repositories提供的其他存儲庫。 用于允許Spark從防火墻后面解析工件,例如 通過像Artifactory這樣的內部工件服務器。 有關設置文件格式的詳細信息,請訪問
spark.jars.repositories 以逗號分隔的其他遠程存儲庫列表,用于搜索使用–packages或spark.jars.packages指定的maven坐標。
spark.pyspark.driver.python Python二進制可執行文件,用于驅動程序中的PySpark。 (默認為spark.pyspark.python)
spark.pyspark.python Python二進制可執行文件,用于驅動程序和執行程序中的PySpark。

Shuffle Behavior

Property Name Default Meaning
spark.reducer.maxSizeInFlight 48m 除非另有說明,否則在MiB中同時從每個reduce任務獲取的映射輸出的最大大小。 由于每個輸出都需要我們創建一個緩沖區來接收它,這表示每個reduce任務的固定內存開銷,所以除非你有大量的內存,否則保持它很小。
col 2 is centered $12
spark.reducer.maxReqsInFlight Int.MaxValue 此配置限制在任何給定點獲取塊的遠程請求數。 當群集中的主機數量增加時,可能會導致與一個或多個節點的入站連接數量非常大,從而導致工作負載失敗。 通過允許它限制獲取請求的數量,可以減輕此方案。
spark.reducer.maxBlocksInFlightPerAddress Int.MaxValue 此配置限制從給定主機端口每個reduce任務獲取的遠程塊的數量。 當在單次提取中同時從給定地址請求大量塊時,這可能會使服務執行程序或節點管理器崩潰。 這對于在啟用外部隨機播放時減少節點管理器上的負載特別有用。 您可以通過將其設置為較低的值來緩解此問題。
spark.maxRemoteBlockSizeFetchToMem Long.MaxValue 當塊的大小高于此閾值(以字節為單位)時,遠程塊將被提取到磁盤。 這是為了避免巨大的請求占用太多內存。 我們可以通過設置特定值(例如200米)來啟用此配置。 請注意,此配置將影響隨機提取和塊管理器遠程塊提取。 對于啟用了外部shuffle服務的用戶,只有當外部shuffle服務比Spark 2.2更新時,才能使用此功能。
spark.shuffle.compress true 是否壓縮map輸出文件。 一般來說是個好主意。 壓縮將使用spark.io.compression.codec。
spark.shuffle.file.buffer 32k 除非另有說明,否則每個shuffle文件輸出流的內存緩沖區大小(KiB)。 這些緩沖區減少了在創建中間shuffle文件時進行的磁盤搜索和系統調用的次數。
spark.shuffle.io.maxRetries 3 (僅限Netty)如果將此設置為非零值,則會自動重試因IO相關異常而失敗的提取。 這種重試邏輯有助于在長時間GC暫停或瞬態網絡連接問題時穩定大型混洗。
spark.shuffle.io.numConnectionsPerPeer 1 (僅限Netty)重用主機之間的連接,以減少大型群集的連接建立。 對于具有許多硬盤和少數主機的群集优乐棋牌app下载,這可能導致并發性不足以使所有磁盤飽和,因此用戶可能會考慮增加此值。
spark.shuffle.io.preferDirectBufs true (僅限Netty)堆外緩沖區用于減少隨機播放和緩存塊傳輸期間的垃圾收集。 對于嚴格限制堆外內存的環境,用戶可能希望將其關閉以強制Netty的所有分配都在堆上。
spark.shuffle.io.retryWait 5s (僅限Netty)在重試提取之間等待多長時間。 默認情況下,重試導致的最大延遲為15秒,計算為maxRetries * retryWait。
spark.shuffle.service.enabled false 啟用外部隨機服務。 此服務保留執行程序寫入的隨機文件,以便可以安全地刪除執行程序。 如果spark.dynamicAllocation.enabled為“true”,則必須啟用此選項。 必須設置外部隨機服務才能啟用它。 有關更多信息,請參閱動態分配配置和設置文檔。
spark.shuffle.service.port 7337 將運行外部shuffle服務的端口。
spark.shuffle.service.index.cache.size 100m 緩存條目僅限于指定的內存占用(以字節為單位)
spark.shuffle.maxChunksBeingTransferred Long.MAX_VALUE 允許在隨機服務上同時傳輸的最大塊數。 請注意,當達到最大數量時,將關閉新的傳入連接。 客戶端將根據shuffle重試配置重試(請參閱spark.shuffle.io.maxRetries和spark.shuffle.io.retryWait),如果達到這些限制,則任務將因提取失敗而失敗。
spark.shuffle.sort.bypassMergeThreshold 200 (高級)在基于排序的shuffle管理器中,如果沒有映射端聚合,則避免合并排序數據,并且最多存在多個reduce分區。
spark.shuffle.spill.compress true 是否壓縮在隨機播放期間溢出的數據。 壓縮將使spark.io.compression.codec。
spark.shuffle.accurateBlockThreshold 100 * 1024 * 1024 以字節為單位的閾值,高于該閾值可準確記錄HighlyCompressedMapStatus中隨機塊的大小。 這有助于通過避免在獲取shuffle塊時低估shuffle塊大小來防止OOM
spark.shuffle.registration.timeout 5000 注冊到外部shuffle服務的超時(以毫秒為單位)。
spark.shuffle.registration.maxAttempts 3 當我們未能注冊到外部shuffle服務時,我們將重試maxAttempts次。
spark.io.encryption.enabled false 啟用IO加密。 目前除了Mesos之外的所有模式都支持。 建議在使用此功能時啟用RPC加密。
spark.io.encryption.keySizeBits 128 IO加密密鑰大小(位)。 支持的值為128,192和256。
spark.io.encryption.keygen.algorithm HmacSHA1 生成IO加密密鑰時使用的算法。 Java Cryptography體系結構標準算法名稱文檔的KeyGenerator部分中描述了支持的算法。

Spark UI

Property Name Default Meaning
spark.eventLog.logBlockUpdates.enabled false 是否為每個塊更新記錄事件,如果spark.eventLog.enabled為true。 警告:這會大大增加事件日志的大小。
spark.eventLog.compress false 是否壓縮已記錄的事件,如果spark.eventLog.enabled為true。 壓縮將使用spark.io.compression.codec。
spark.eventLog.dir file:///tmp/spark-events 如果spark.eventLog.enabled為true,則記錄Spark事件的基目錄。 在此基本目錄中,Spark為每個應用程序創建一個子目錄,并將特定于該應用程序的事件記錄在此目錄中。 用戶可能希望將其設置為統一位置(如HDFS目錄),以便歷史記錄服務器可以讀取歷史記錄文件。
spark.eventLog.enabled false 是否記錄Spark事件,對于在應用程序完成后重建Web UI非常有用。
spark.eventLog.overwrite false 是否覆蓋任何現有文件。
spark.eventLog.buffer.kb 100k 寫入輸出流時使用的緩沖區大小,以KiB表示,除非另有說明。
spark.ui.enabled true 是否為Spark應用程序運行Web UI。
spark.ui.killEnabled true 允許從Web UI中刪除作業和階段。
spark.ui.port 4040 應用程序儀表板的端口,顯示內存和工作負載數據。
spark.ui.retainedJobs 1000 在垃圾收集之前,Spark UI和狀態API記住了多少個作業。 這是目標最大值,在某些情況下可以保留更少的元素。
spark.ui.retainedStages 1000 在垃圾收集之前,Spark UI和狀態API記住了多少個階段。 這是目標最大值,在某些情況下可以保留更少的元素。
spark.ui.retainedTasks 100000 垃圾收集之前Spark UI和狀態API記住了多少個任務。 這是目標最大值,在某些情況下可以保留更少的元素。
spark.ui.reverseProxy false 啟用Spark Master作為工作程序和應用程序UI的反向代理。 在此模式下,Spark master將反向代理工作者和應用程序UI以啟用訪問,而無需直接訪問其主機。 請謹慎使用,因為工作人員和應用程序UI無法直接訪問,您只能通過spark master / proxy公共URL訪問它們。 此設置會影響群集中運行的所有工作程序和應用程序UI,并且必須在所有工作程序,驅動程序和主服務器上進行設置。
spark.ui.reverseProxyUrl 這是運行代理的URL。 此URL用于在Spark Master前運行的代理。 這在運行代理進行身份驗證時很有用 OAuth代理。 確保這是一個完整的URL,包括方案(http / https)和端口以訪問您的代理。
spark.ui.showConsoleProgress true 在控制臺中顯示進度條。 進度條顯示運行時間超過500毫秒的階段的進度。 如果多個階段同時運行,則會在同一行上顯示多個進度條。
spark.worker.ui.retainedExecutors 1000 在垃圾收集之前,Spark UI和狀態API記住了多少個已完成的執行程序。
spark.worker.ui.retainedDrivers 1000 在垃圾收集之前,Spark UI和狀態API記住了多少個已完成的驅動程序。
spark.sql.ui.retainedExecutions 1000 在垃圾收集之前,Spark UI和狀態API記住完成的執行次數。
spark.streaming.ui.retainedBatches 1000 在垃圾收集之前,Spark UI和狀態API記住了多少批次。
spark.ui.retainedDeadExecutors 100 在垃圾收集之前,Spark UI和狀態API記住了多少個死執行程序。

Compression and Serialization

Property Name Default Meaning
spark.broadcast.compress true 是否在發送之前壓縮廣播變量。 一般來說是個好主意。 壓縮將使用spark.io.compression.codec。
spark.io.compression.codec lz4 用于壓縮內部數據的編解碼器,例如RDD分區,事件日志,廣播變量和隨機輸出。 默認情況下,Spark提供了四種編解碼器:lz4,lzf,snappy和zstd。 您還可以使用完全限定的類名來指定編解碼器,例如 org.apache.spark.io.LZ4CompressionCodec,org.apache.spark.io.LZFCompressionCodec,org.apache.spark.io.SnappyCompressionCodec和org.apache.spark.io.ZstdCompressionCodec。
spark.io.compression.lz4.blockSize 32k 在使用LZ4壓縮編解碼器的情況下,LZ4壓縮中使用的塊大小(以字節為單位)。 當使用LZ4時,降低此塊大小也會降低隨機內存使用量。
spark.io.compression.snappy.blockSize 32k 在使用Snappy壓縮編解碼器的情況下,在Snappy壓縮中使用的塊大小(以字節為單位)。 使用Snappy時,降低此塊大小也會降低隨機內存使用量。
spark.io.compression.zstd.level 1 Zstd壓縮編解碼器的壓縮級別。 增加壓縮級別將導致更好的壓縮,代價是更多的CPU和內存。
spark.io.compression.zstd.bufferSize 32k 在使用Zstd壓縮編解碼器的情況下,在Zstd壓縮中使用的緩沖區大小(以字節為單位)。 降低此大小將降低使用Zstd時的隨機內存使用量,但由于過多的JNI調用開銷,可能會增加壓縮成本。
spark.kryo.classesToRegister (none) 如果使用Kryo序列化,請提供以逗號分隔的自定義類名列表以向Kryo注冊。 有關詳細信息,請參閱調整指南。
spark.kryo.referenceTracking true 在使用Kryo序列化數據時是否跟蹤對同一對象的引用,如果對象圖形具有循環并且如果它們包含同一對象的多個副本,則這對于效率是有用的。 如果您知道不是這種情況,可以禁用以提高性能。
spark.kryo.registrationRequired false 是否要求注冊Kryo。 如果設置為’true’,如果未注冊的類被序列化,Kryo將拋出異常。 如果設置為false(默認值),Kryo將編寫未注冊的類名以及每個對象。 編寫類名會導致顯著的性能開銷,因此啟用此選項可以嚴格執行用戶未從注冊中省略的類。
spark.kryo.registrator (none) 如果您使用Kryo序列化,請提供以逗號分隔的類列表,這些類使用Kryo注冊您的自定義類。 如果您需要以自定義方式注冊類,則此屬性非常有用,例如 指定自定義字段序列化程序。 否則spark.kryo.classesToRegister更簡單。 它應該設置為擴展KryoRegistrator的類。 有關詳細信息,請參閱調整指南。
spark.kryo.unsafe false 是否使用不安全的Kryo序列化程序。 使用基于不安全的IO可以大大加快速度。
spark.kryoserializer.buffer.max 64m 除非另有說明,否則MiB中Kryo序列化緩沖區的最大允許大小。 這必須大于您嘗試序列化的任何對象,且必須小于2048米。 如果在Kryo中出現“超出緩沖區限制”異常,請增加此值。
spark.kryoserializer.buffer 64k 除非另有說明,否則Kryo序列化緩沖區的初始大小(KiB)。 請注意,每個worker上每個核心將有一個緩沖區。 如果需要,此緩沖區將長大為spark.kryoserializer.buffer.max。
spark.rdd.compress false 是否壓縮序列化RDD分區(例如,Java中的StorageLevel.MEMORY_ONLY_SER和Python中的Scala或StorageLevel.MEMORY_ONLY)。 可以節省大量空間,但需要額外的CPU時間。 壓縮將使用spark.io.compression.codec。
spark.serializer org.apache.spark.serializer.JavaSerializer 用于序列化將通過網絡發送或需要以序列化形式緩存的對象的類。 Java序列化的默認設置適用于任何Serializable Java對象,但速度很慢,因此我們建議使用org.apache.spark.serializer.KryoSerializer并在需要速度時配置Kryo序列化。 可以是org.apache.spark.Serializer的任何子類。
spark.serializer.objectStreamReset 100 使用org.apache.spark.serializer.JavaSerializer進行序列化時,序列化程序會緩存對象以防止寫入冗余數據,但是會停止對這些對象進行垃圾回收。 通過調用’reset’,您可以從序列化程序中清除該信息,并允許收集舊對象。 要關閉此定期重置,請將其設置為-1。 默認情況下,它將每100個對象重置序列化程序。

Memory Management

Property Name Default Meaning
spark.memory.fraction 0.6 用于執行和存儲的(堆空間 - 300MB)的分數。 這個越低,溢出和緩存的數據驅逐就越頻繁發生。 此配置的目的是在稀疏,異常大的記錄的情況下為內部元數據,用戶數據結構和不精確的大小估計留出內存。 建議將此值保留為默認值。 有關更多詳細信息,包括有關在增加此值時正確調整JVM垃圾回收的重要信息,請參閱此說明。
spark.memory.storageFraction 0.5 存儲記憶的數量不受驅逐的影響,表示為由spark.memory.fraction預留的區域大小的一部分。 這個越高,執行的工作內存越少,任務可能會更頻繁地溢出到磁盤。 建議將此值保留為默認值。 有關更多詳細信息,請參閱此說明。
spark.memory.offHeap.enabled false 如果為true,Spark將嘗試使用堆外內存進行某些操作。 如果啟用了堆外內存使用,則spark.memory.offHeap.size必須為正數。
spark.memory.offHeap.size 0 可用于堆外分配的絕對內存量(以字節為單位)。 此設置對堆內存使用沒有影響,因此如果執行程序的總內存消耗必須符合某些硬限制,那么請確保相應地縮小JVM堆大小。 當spark.memory.offHeap.enabled = true時,必須將其設置為正值。
spark.memory.useLegacyMode false 是否啟用Spark 1.5及之前使用的舊式內存管理模式。 傳統模式將堆空間嚴格劃分為固定大小的區域,如果未調整應用程序,可能會導致過多的溢出。 除非啟用此命令,否則不會讀取以下不推薦使用的內存分數配置:spark.shuffle.memoryFraction spark.storage.memoryFraction spark.storage.unrollFraction
spark.shuffle.memoryFraction 0.2 (不建議使用)如果啟用了spark.memory.useLegacyMode,則只讀它。 在隨機播放期間用于聚合和cogroup的Java堆的分數。 在任何給定的時間,用于shuffle的所有內存映射的集合大小受此限制的限制,超過該限制,內容將開始溢出到磁盤。 如果經常出現溢出,請考慮以spark.storage.memoryFraction為代價來增加此值。
spark.storage.memoryFraction 0.6 (不建議使用)如果啟用了spark.memory.useLegacyMode,則只讀它。 用于Spark內存緩存的Java堆的分數。 這不應該大于JVM中的“舊”對象生成,默認情況下會給出0.6的堆,但如果配置自己的舊生成大小,則可以增加它。
spark.storage.unrollFraction 0.2 (不建議使用)如果啟用了spark.memory.useLegacyMode,則只讀它。 spark.storage.memoryFraction的一部分,用于在內存中展開塊。 當沒有足夠的可用存儲空間來完全展開新塊時,通過刪除現有塊來動態分配。
spark.storage.replication.proactive false 為RDD塊啟用主動塊復制。 如果存在任何可用的副本,則會因執行程序故障而丟失緩存的RDD塊副本。 這會嘗試將塊的復制級別設置為初始編號。
spark.cleaner.periodicGC.interval 30min 控制觸發垃圾回收的頻率。僅當弱引用被垃圾收集時,此上下文清除程序才會觸發清理。 在具有大型驅動程序JVM的長時間運行的應用程序中,驅動程序上的內存壓力很小,這可能偶爾發生或根本不發生。 根本不清理可能會導致執行程序在一段時間后耗盡磁盤空間。
spark.cleaner.referenceTracking true 啟用或禁用上下文清理。
spark.cleaner.referenceTracking.blocking true 控制清理線程是否應該阻止清除任務(除了shuffle,由spark.cleaner.referenceTracking.blocking.shuffle Spark屬性控制)。
spark.cleaner.referenceTracking.blocking.shuffle false 控制清理線程是否應阻止隨機清理任務。
spark.cleaner.referenceTracking.cleanCheckpoints false 控制是否在引用超出范圍時清除檢查點文件。

Execution Behavior

Property Name Default Meaning
spark.broadcast.blockSize 4m 除非另有說明,否則TorrentBroadcastFactory的塊的每個塊的大小,以KiB為單位。 太大的值會降低廣播期間的并行度(使其變慢); 但是,如果它太小,BlockManager可能會受到性能影響。
spark.executor.cores 1 in YARN mode, all the available cores on the worker in standalone and Mesos coarse-grained modes. 每個執行程序使用的核心數。 在standalone和Mesos粗粒度模式中,有關更多詳細信息,請參閱此說明。
spark.default.parallelism 對于像reduceByKey和join這樣的分布式shuffle操作,父RDD中的分區數量最多。 對于沒RDD并行化的操作,它取決于集群管理器:本地模式:本地計算機上的核心數Mesos細粒度模式:8其他:所有執行程序節點上的核心總數或2,以較大者為準 未由用戶設置時,由join,reduceByKey和parallelize等轉換返回的RDD中的默認分區數。
spark.executor.heartbeatInterval 10s 每個執行者的心跳與駕駛員之間的間隔。 Heartbeats讓驅動程序知道執行程序仍處于活動狀態,并使用正在進行的任務的度量標準對其進行更新。 spark.executor.heartbeatInterval應該遠遠小于spark.network.timeout
spark.files.fetchTimeout 60s 從驅動程序獲取通過SparkContext.addFile()添加的文件時使用的通信超時。
spark.files.useFetchCache true 如果設置為true(默認值),則文件獲取將使用由屬于同一應用程序的執行程序共享的本地緩存,這可以在同一主機上運行多個執行程序時提高任務啟動性能。 如果設置為false,則將禁用這些緩存優化,并且所有執行程序都將獲取自己的文件副本。 可以禁用此優化以使用駐留在NFS文件系統上的Spark本地目錄(有關更多詳細信息,請參閱SPARK-6313)。
spark.files.overwrite false 當目標文件存在且其內容與源的文件不匹配時,是否覆蓋通過SparkContext.addFile()添加的文件。
spark.files.maxPartitionBytes 134217728 (128 MB) 讀取文件時打包到單個分區的最大字節數。
spark.files.openCostInBytes 4194304 (4 MB) 可以同時掃描通過字節數測量的打開文件的估計成本。 將多個文件放入分區時使用。 過度估計會更好,那么具有小文件的分區將比具有更大文件的分區更快。
spark.hadoop.cloneConf false 如果設置為true,則為每個任務克隆新的Hadoop配置對象。 應啟用此選項以解決配置線程安全問題(有關詳細信息,請參閱SPARK-2546)。 默認情況下禁用此選項,以避免不受這些問題影響的作業出現意外性能回歸。
spark.hadoop.validateOutputSpecs true 如果設置為true,則驗證saveAsHadoopFile和其他變體中使用的輸出規范(例如,檢查輸出目錄是否已存在)。 可以禁用此選項以消除由于預先存在的輸出目錄而導致的異常。 我們建議用戶不要禁用此功能,除非嘗試實現與以前版本的Spark的兼容性。 只需使用Hadoop的FileSystem API手動刪除輸出目錄。 對于通過Spark Streaming的StreamingContext生成的作業,將忽略此設置,因為在檢查點恢復期間可能需要將數據重寫為預先存在的輸出目錄。
spark.storage.memoryMapThreshold 2m 塊中的大小(以字節為單位),當從磁盤讀取塊時,Spark內存會映射到該塊。 這可以防止Spark從內存映射非常小的塊。 通常,對于接近或低于操作系統頁面大小的塊,內存映射具有高開銷。
spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version 1 文件輸出提交者算法版本,有效算法版本號:1或2.版本2可能具有更好的性能,但是根據MAPREDUCE-4815,版本1可以在某些情況下更好地處理故障。

Networking

Property Name Default Meaning
spark.rpc.message.maxSize 128 “控制平面”通信中允許的最大消息大小(以MB為單位); 通常僅適用于執行程序和驅動程序之間發送的映射輸出大小信息。 如果您正在運行具有數千個map和reduce任務的作業并查看有關RPC消息大小的消息,請增加此值。
spark.blockManager.port (random) 所有塊管理器的端口都可以監聽。 它們存在于驅動程序和執行程序中。
spark.driver.blockManager.port (value of spark.blockManager.port) 如果不能使用與執行程序相同的配置,則塊管理器要偵聽的特定于驅動程序的端口。
spark.driver.bindAddress (value of spark.driver.host) 主機名或IP地址綁定偵聽套接字的位置。 此配置會覆蓋SPARK_LOCAL_IP環境變量(請參見下文)。它還允許將與本地地址不同的地址通告給執行者或外部系統。 例如,在運行具有橋接網絡的容器時,這很有用。 為了正常工作,需要從容器的主機轉發驅動程序使用的不同端口(RPC,塊管理器和UI)。
spark.driver.host (local hostname) 驅動程序的主機名或IP地址。 這用于與執行程序和獨立主服務器通信。
spark.driver.port (random) 用于偵聽的驅動程序的端口。 這用于與執行程序和獨立主服務器通信。
spark.network.timeout 120s 所有網絡交互的默認超時。 此配置將用于代替spark.core.connection.ack.wait.timeout,spark.storage.blockManagerSlaveTimeoutMs,spark.shuffle.io.connectionTimeout,spark.rpc.askTimeout或spark.rpc.lookupTimeout(如果未配置)。
spark.port.maxRetries 16 在放棄之前綁定到端口時的最大重試次數。 當端口被賦予特定值(非0)時优乐棋牌app下载,每次后續重試都會在重試之前將先前嘗試中使用的端口增加1。 這實際上允許它嘗試從指定的起始端口到端口+ maxRetries的一系列端口。
spark.rpc.numRetries 3 在RPC任務放棄之前重試的次數。 RPC任務將在此數字的大多數時間運行。
spark.rpc.retry.wait 3s RPC請求操作在重試之前等待的持續時間。
spark.rpc.askTimeout spark.network.timeout RPC請求操作在超時之前等待的持續時間。
spark.rpc.lookupTimeout 120s RPC遠程端點查找操作在超時之前等待的持續時間。

Scheduling

Property Name Default Meaning
spark.cores.max (not set) 在“粗粒度”共享模式下在獨立部署群集或Mesos群集上運行時,從群集(而非每臺計算機)請求應用程序的最大CPU核心數量。 如果未設置,則默認為Spark的獨立集群管理器上的spark.deploy.defaultCores,或Mesos上的無限(所有可用內核)。
spark.locality.wait 3s 很久以后,等待在放棄并在較少本地節點上啟動數據本地任務之前。 相同的等待將用于逐步執行多個位置級別(進程本地,節點本地,機架本地,然后是任何)。 也可以通過設置spark.locality.wait.node等來自定義每個級別的等待時間。如果您的任務很長并且看到不良位置,則應該增加此設置,但默認情況通常很有效。
spark.locality.wait.node spark.locality.wait 自定義位置等待節點位置。 例如,您可以將此值設置為0以跳過節點位置并立即搜索機架位置(如果您的群集有機架信息)。
spark.locality.wait.process spark.locality.wait 自定義位置等待進程位置。 這會影響嘗試訪問特定執行程序進程中的緩存數據的任務。
spark.locality.wait.rack spark.locality.wait 自定義本地等待機架位置。
spark.scheduler.maxRegisteredResourcesWaitingTime 30s 在計劃開始之前等待資源注冊的最長時間。
spark.scheduler.minRegisteredResourcesRatio 0.8為KUBERNETES模式; YARN模式為0.8; 0.0表示獨立模式和Mesos粗粒度模式 注冊資源(注冊資源/預期資源總量)的最小比率(資源是紗線模式和Kubernetes模式下的執行者,獨立模式下的CPU核心和Mesos粗粒度模式[‘spark.cores.max’值是總預期資源 Mesos粗粒度模式])在調度開始之前等待。 指定為0.0和1.0之間的雙精度。 無論是否達到最小資源比率,在調度開始之前等待的最長時間由config spark.scheduler.maxRegisteredResourcesWaitingTime控制。
spark.scheduler.mode FIFO 提交到同一SparkContext的作業之間的調度模式。 可以設置為FAIR以使用公平共享而不是一個接一個地排隊工作。 對多用戶服務很有用。
spark.scheduler.revive.interval 1s 調度程序恢復工作程序資源的間隔長度提供了運行任務。
spark.scheduler.listenerbus.eventqueue.capacity 10000 Spark偵聽器總線中事件隊列的容量必須大于0.如果刪除偵聽器事件,請考慮增加值(例如20000)。 增加此值可能會導致驅動程序使用更多內存。
spark.blacklist.enabled false 如果設置為“true”,則阻止Spark在由于任務失敗太多而被列入黑名單的執行程序上計劃任務。 黑名單算法可以通過其他“spark.blacklist”配置選項進一步控制。
spark.blacklist.timeout 1h (實驗)在將節點或執行程序無條件地從黑名單中刪除以嘗試運行新任務之前,將整個應用程序列入黑名單的時間長度。
spark.blacklist.task.maxTaskAttemptsPerExecutor 1 (實驗)對于給定任務,在執行者被列入黑名單之前,可以在一個執行程序上重試多少次。
spark.blacklist.task.maxTaskAttemptsPerNode 2 實驗)對于給定任務,在整個節點被列入黑名單之前,可以在一個節點上重試多少次。
spark.blacklist.stage.maxFailedTasksPerExecutor 2 (實驗)在執行者被列入該階段的黑名單之前,在一個階段內,一個執行者必須完成多少個不同的任務。
spark.blacklist.stage.maxFailedExecutorsPerNode 2 (實驗)在整個節點被標記為階段失敗之前,在給定階段將多少個不同的執行程序標記為黑名單。
spark.blacklist.application.maxFailedTasksPerExecutor 2 (實驗)在執行程序被列入整個應用程序的黑名單之前,在一個執行程序中,在成功的任務集中,有多少個不同的任務必須失敗。 在spark.blacklist.timeout指定的超時后,列入黑名單的執行程序將自動添加回可用資源池。 請注意,通過動態分配,執行程序可能會被標記為空閑并由集群管理器回收。
spark.blacklist.application.maxFailedExecutorsPerNode 2 (實驗)在將節點列入整個應用程序的黑名單之前,必須將多個不同的執行程序列入黑名單。 在spark.blacklist.timeout指定的超時后,列入黑名單的節點將自動添加回可用資源池。 但請注意,通過動態分配,節點上的執行程序可能會被標記為空閑并由集群管理器回收。
spark.blacklist.killBlacklistedExecutors false (實驗)如果設置為“true”,則允許Spark在被列入黑名單時自動終止并嘗試重新創建執行程序。 請注意,當整個節點添加到黑名單時,該節點上的所有執行程序都將被終止。
spark.blacklist.application.fetchFailure.enabled false (實驗)如果設置為“true”,Spark會在發生提取失敗時立即將執行程序列入黑名單。 如果啟用了外部隨機服務,則整個節點將被列入黑名單。
spark.speculation false 如果設置為“true”,則執行任務的推測執行。 這意味著如果一個或多個任務在一個階段中運行緩慢,它們將被重新啟動。
spark.speculation.interval 100ms Spark經常檢查要推測的任務。
spark.speculation.multiplier 1.5 任務的速度比投機的中位數慢多少倍。
spark.speculation.quantile 0.75 在為特定階段啟用推測之前必須完成的任務的分數。
spark.task.cpus 1 為每個任務分配的核心數。
spark.task.maxFailures 4 在放棄工作之前任何特定任務的失敗次數。 在不同任務中傳播的故障總數不會導致作業失敗; 特定任務必須通過這么多嘗試才能失敗。 應大于或等于1.允許的重試次數=此值 - 1。
spark.task.reaper.enabled false 允許監視已終止/中斷的任務。 設置為true時,執行程序將監視任何被殺死的任務,直到該任務實際完成執行。 有關如何控制此監視的確切行為的詳細信息,請參閱其他spark.task.reaper。*配置。 設置為false(默認值)時,任務查殺將使用缺少此類監視的舊代碼路徑。
spark.task.reaper.pollingInterval 10s 當spark.task.reaper.enabled = true時,此設置控制執行程序輪詢已終止任務狀態的頻率。 如果在輪詢時仍然運行被殺死的任務,那么將記錄一個警告,并且默認情況下將記錄該任務的線程轉儲(可以通過spark.task.reaper.threadDump設置禁用此線程轉儲,這是 記錄如下)。
spark.task.reaper.threadDump true 當spark.task.reaper.enabled = true時,此設置控制是否在定期輪詢已終止任務期間記錄任務線程轉儲。 將此屬性設置為false可禁用線程轉儲的收集。
spark.task.reaper.killTimeout -1 當spark.task.reaper.enabled = true時,此設置指定超時,如果已終止的任務未停止運行,執行程序JVM將自行終止。 默認值-1禁用此機制并阻止執行程序自毀。 此設置的目的是充當安全網,以防止無法執行的無法執行的任務使執行程序無法使用。
spark.stage.maxConsecutiveAttempts 4 在中止階段之前允許的連續階段嘗試次數。

動態分配

Property Name Default Meaning
spark.dynamicAllocation.enabled false 是否使用動態資源分配,該分配根據工作負載上下調整使用此應用程序注冊的執行程序的數量。 有關更多詳細信息,請參閱此處的說明。這需要設置spark.shuffle.service.enabled。 以下配置也是相關的:spark.dynamicAllocation.minExecutors,spark.dynamicAllocation.maxExecutors和spark.dynamicAllocation.initialExecutors
spark.dynamicAllocation.executorIdleTimeout 60s 如果啟用了動態分配并且執行程序空閑時間超過此持續時間,則執行程序將被刪除。 有關更多詳細信息,請參閱此說明。
spark.dynamicAllocation.cachedExecutorIdleTimeout infinity 如果啟用了動態分配并且具有高速緩存數據塊的執行程序已空閑超過此持續時間,則將刪除執行程序。 有關更多詳細信息,請參閱此說明。
spark.dynamicAllocation.initialExecutors spark.dynamicAllocation.minExecutors 啟用動態分配時要運行的初始執行程序數。如果設置了--num-executors(或spark.executor.instances)并且大于此值,它將被用作執行者的初始數量。
spark.dynamicAllocation.maxExecutors infinity 啟用動態分配時執行程序數的上限。
spark.dynamicAllocation.minExecutors 0 啟用動態分配時執行程序數量的下限。
spark.dynamicAllocation.schedulerBacklogTimeout 1s 如果啟用了動態分配并且已有掛起的任務積壓超過此持續時間,則將請求新的執行程序。 有關更多詳細信息,請參閱此說明。
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout schedulerBacklogTimeout 與spark.dynamicAllocation.schedulerBacklogTimeout相同,但僅用于后續執行程序請求。 有關更多詳細信息,請參閱此說明。

Security

Property Name Default Meaning
spark.acls.enable false 是否應該啟用Spark acls。 如果啟用,則會檢查用戶是否具有查看或修改作業的訪問權限。 請注意,這需要知道用戶,因此如果用戶遇到null,則不會進行任何檢查。 可以使用過濾器對UI進行身份驗證和設置用戶。
spark.admin.acls Empty 以逗號分隔的用戶/管理員列表,可以查看和修改對所有Spark作業的訪問權限。 如果您在共享群集上運行并且有一組管理員或開發人員在事情不起作用時幫助調試,則可以使用此方法。 在列表中加上“*”表示任何用戶都可以擁有admin權限。
spark.admin.acls.groups Empty 逗號分隔的組列表,具有查看和修改所有Spark作業的訪問權限。 如果您有一組幫助維護和調試底層基礎結構的管理員或開發人員,則可以使用此方法。 在列表中加上“*”表示任何組中的任何用戶都可以擁有admin的權限。 用戶組是從spark.user.groups.mapping指定的組映射提供程序的實例獲取的。 檢查條目spark.user.groups.mapping以獲取更多詳細信息。
spark.user.groups.mapping org.apache.spark.security.ShellBasedGroupsMappingProvider 用戶的組列表由特征org.apache.spark.security.GroupMappingServiceProvider定義的組映射服務確定,該服務可由此屬性配置。 提供了一個默認的基于unix shell的實現org.apache.spark.security.ShellBasedGroupsMappingProvider,可以指定該實現來解析用戶的組列表。 注意:此實現僅支持基于Unix / Linux的環境。 目前不支持Windows環境。 但是,可以通過實現特征org.apache.spark.security.GroupMappingServiceProvider來支持新的平臺/協議。
spark.authenticate false Spark是否驗證其內部連接。 如果沒有在YARN上運行,請參見spark.authenticate.secret。
spark.authenticate.secret None 設置用于Spark的密鑰以在組件之間進行身份驗證。 如果未在YARN上運行并且啟用了身份驗證,則需要設置此項。
spark.network.crypto.enabled false 使用commons-crypto庫為RPC和塊傳輸服務啟用加密。 需要啟用spark.authenticate。
spark.network.crypto.keyLength 128 要生成的加密密鑰的位長度。 有效值為128,192和256。
spark.network.crypto.keyFactoryAlgorithm PBKDF2WithHmacSHA1 生成加密密鑰時使用的密鑰工廠算法。 應該是正在使用的JRE中的javax.crypto.SecretKeyFactory類支持的算法之一。
spark.network.crypto.saslFallback true 如果使用Spark的內部機制驗證失敗,是否回退到SASL身份驗證。 當應用程序連接到不支持內部Spark身份驗證協議的舊shuffle服務時,這非常有用。 在服務器端,這可用于阻止較舊的客戶端對新的shuffle服務進行身份驗證。
spark.network.crypto.config.* None commons-crypto庫的配置值,例如要使用的密碼實現。 配置名稱應該是沒有“commons.crypto”前綴的commons-crypto配置的名稱。
spark.authenticate.enableSaslEncryption false 啟用身份驗證時啟用加密通信。 塊傳輸服務和RPC端點支持此功能。
spark.network.sasl.serverAlwaysEncrypt false 為支持SASL身份驗證的服務禁用未加密的連接。
spark.core.connection.ack.wait.timeout spark.network.timeout 在超時和放棄之前連接等待ack的時間有多長。 為避免因GC等長時間停頓而導致的不必要的超時,您可以設置更大的值。
spark.modify.acls Empty 逗號分隔的用戶列表,具有對Spark作業的修改權限。 默認情況下,只有啟動Spark作業的用戶才有權修改它(例如,將其刪除)。 在列表中加上“*”表示任何用戶都可以有權修改它。
spark.modify.acls.groups Empty 逗號分隔的組列表,具有對Spark作業的修改權限。 如果您有一組來自同一團隊的管理員或開發人員有權控制該作業,則可以使用此方法。 在列表中加上“*”表示任何組中的任何用戶都有權修改Spark作業。 用戶組是從spark.user.groups.mapping指定的組映射提供程序的實例獲取的。 檢查條目spark.user.groups.mapping以獲取更多詳細信息。
spark.ui.filters None 逗號分隔的過濾器類名列表,以應用于Spark Web UI。 過濾器應該是標準的javax servlet過濾器。 也可以通過設置以下java系統屬性來指定每個過濾器的參數:spark。<過濾器的類名> .params =’param1 = value1,param2 = value2’例如:-Dspark.ui.filters= com.test.filter1-Dspark.com.test.filter1.params= ‘的param1= FOO,參數2=測試’
spark.ui.view.acls Empty 逗號分隔的用戶列表,具有對Spark Web ui的查看權限。 默認情況下,只有啟動Spark作業的用戶才具有視圖訪問權限。 在列表中加上“*”表示任何用戶都可以擁有對此Spark作業的查看權限。
spark.ui.view.acls.groups Empty 逗號分隔的組列表,具有對Spark Web ui的查看訪問權限,以查看Spark作業詳細信息。 如果您有一組可以監視提交的Spark作業的管理員或開發人員或用戶,則可以使用此方法。 在列表中添加“*”表示任何組中的任何用戶都可以在Spark Web ui上查看Spark作業詳細信息。 用戶組是從spark.user.groups.mapping指定的組映射提供程序的實例獲取的。 檢查條目spark.user.groups.mapping以獲取更多詳細信息。

TLS / SSL

Property Name Default Meaning
spark.ssl.enabled false 是否在所有支持的協議上啟用SSL連接。配置spark.ssl.enabled時,需要spark.ssl.protocol。所有SSL設置(如spark.ssl.xxx,其中xxx是特定的配置屬性)表示所有支持的協議的全局配置。 為了覆蓋特定協議的全局配置,必須在特定于協議的命名空間中覆蓋這些屬性。使用spark.ssl.YYY.XXX設置覆蓋YYY表示的特定協議的全局配置。 YYY的示例值包括fs,ui,standalone和historyServer。 有關服務的分層SSL配置的詳細信息,請參閱SSL配置。
spark.ssl.[namespace].port None SSL服務將偵聽的端口。必須在命名空間配置中定義端口; 請參閱可用命名空間的SSL配置。未設置時,SSL端口將從同一服務的非SSL端口派生。 值“0”將使服務綁定到臨時端口。
spark.ssl.enabledAlgorithms Empty 以逗號分隔的密碼列表。 JVM必須支持指定的密碼。 可以在此頁面上找到的協議參考列表。 注意:如果未設置,它將使用JVM的默認密碼套件。
spark.ssl.keyPassword None 密鑰庫中私鑰的密碼。
spark.ssl.keyStore None 密鑰庫文件的路徑。 該路徑可以是啟動組件的目錄的絕對路徑或相對路徑。
spark.ssl.keyStorePassword None 密鑰庫的密碼。
spark.ssl.keyStoreType JKS 密鑰庫的類型。
spark.ssl.protocol None 協議名稱。 JVM必須支持該協議。 可以在此頁面上找到的協議參考列表。
spark.ssl.needClientAuth false 如果SSL需要客戶端驗證,則設置為true
spark.ssl.trustStore None 信任存儲文件的路徑。 該路徑可以是啟動組件的目錄的絕對路徑或相對路徑。
spark.ssl.trustStorePassword None 信任存儲區的密碼。
spark.ssl.trustStoreType JKS 信任存儲的類型。

Spark SQL
運行SET -v命令將顯示SQL配置的完整列表。

// spark is an existing SparkSession
spark.sql("SET -v").show(numRows = 200, truncate = false)

Spark Streaming

Property Name Default Meaning
spark.streaming.backpressure.enabled false 啟用或禁用Spark Streaming的內部背壓機制(自1.5起)。 這使Spark Streaming能夠根據當前的批處理調度延遲和處理時間來控制接收速率,以便系統只接收系統可以處理的速度。 在內部,這動態地設置接收器的最大接收速率。 如果設置了這個值,則上限受spark.streaming.receiver.maxRate和spark.streaming.kafka.maxRatePerPartition值的限制(見下文)。
spark.streaming.backpressure.initialRate not set 這是啟用背壓機制時每個接收器將接收第一批數據的初始最大接收速率。
spark.streaming.blockInterval 200ms Spark Streaming接收器接收的數據在存儲到Spark之前被分塊為數據塊的時間間隔。 建議最低 - 50毫秒。 有關更多詳細信息,請參閱Spark Streaming編程指南中的性能調整部分。
spark.streaming.receiver.maxRate not set 每個接收器將接收數據的最大速率(每秒記錄數)。 實際上,每個流每秒最多將消耗此數量的記錄。 將此配置設置為0或負數將不會對速率進行限制。 有關模式詳細信息,請參閱Spark Streaming編程指南中的部署指南。
spark.streaming.receiver.writeAheadLog.enable false 啟用接收器的預寫日志。 通過接收器接收的所有輸入數據將被保存到提前寫入日志,以便在驅動程序失敗后恢復。 有關更多詳細信息,請參閱Spark Streaming編程指南中的部署指南。
spark.streaming.unpersist true Spark Streaming生成并持久化的強制RDD將自動從Spark的內存中取消。 Spark Streaming接收的原始輸入數據也會自動清除。 將此設置為false將允許原始數據和持久RDD在流應用程序外部可訪問,因為它們不會自動清除。 但它的代價是Spark中更高的內存使用量。
spark.streaming.stopGracefullyOnShutdown false 如果為true,Spark會在JVM關閉時正常關閉StreamingContext,而不是立即關閉。
spark.streaming.kafka.maxRatePerPartition not set 使用新Kafka直接流API時從每個Kafka分區讀取數據的最大速率(每秒記錄數)。 有關更多詳細信息,請參閱Kafka集成指南。
spark.streaming.kafka.maxRetries 1 驅動程序為了在每個分區的leader上找到最新偏移量而進行的最大連續重試次數(默認值為1表示驅動程序最多會嘗試2次)。 僅適用于新的Kafka直接流API。
spark.streaming.ui.retainedBatches 1000 在垃圾收集之前,Spark Streaming UI和狀態API會記住多少批次。
spark.streaming.driver.writeAheadLog.closeFileAfterWrite false 是否在驅動程序上寫入提前寫入日志記錄后關閉文件。 如果要將S3(或任何不支持刷新的文件系統)用于驅動程序上的元數據WAL,請將此項設置為“true”。
spark.streaming.receiver.writeAheadLog.closeFileAfterWrite false 是否在接收器上寫入寫入日志記錄后關閉文件。 如果要將S3(或任何不支持刷新的文件系統)用于接收器上的數據WAL,請將此設置為“true”。

SparkR

Property Name Default Meaning
spark.r.numRBackendThreads 2 RBackend用于處理來自SparkR包的RPC調用的線程數。
spark.r.command Rscript 可執行以在驅動程序和工作程序的集群模式下執行R腳本。
spark.r.driver.command spark.r.command 在驅動程序的客戶端模式下執行R腳本的可執行文件。 在群集模式下忽略。
spark.r.shell.command R 在驅動程序的客戶端模式下執行sparkR shell的可執行文件。 在群集模式下忽略。 它與環境變量SPARKR_DRIVER_R相同,但優先于它。 spark.r.shell.command用于sparkR shell,而spark.r.driver.command用于運行R腳本。
spark.r.backendConnectionTimeout 6000 R進程在幾秒鐘內連接到RBackend時設置的連接超時。
spark.r.heartBeatInterval 100 從SparkR后端發送到R進程的心跳間隔,以防止連接超時。

GraphX

Property Name Default Meaning
spark.graphx.pregel.checkpointInterval -1 Pregel中圖形和消息的檢查點間隔。 它用于避免stackOverflowError,因為在經過大量迭代后,由于長譜系鏈。 默認情況下禁用檢查點。

Deploy

Property Name Default Meaning
spark.deploy.recoveryMode NONE 恢復模式設置,用于在失敗并重新啟動時使用群集模式恢復提交的Spark作業。 這僅適用于使用Standalone或Mesos運行時的群集模式。
spark.deploy.zookeeper.url None spark.deploy.recoveryMode設置為ZOOKEEPER時,此配置用于設置要連接的zookeeper URL。
spark.deploy.zookeeper.dir None spark.deploy.recoveryMode設置為ZOOKEEPER時,此配置用于將zookeeper目錄設置為存儲恢復狀態。

Cluster Managers
Spark中的每個集群管理器都有其他配置選項。 可以在每種模式的頁面上找到配置:
YARN
Mesos
Kubernetes
Standalone Mode

Environment Variables

可以通過環境變量配置某些Spark設置,環境變量從安裝Spark的目錄中的conf / spark-env.sh腳本(或Windows上的conf / spark-env.cmd)中讀取。 在Standalone和Mesos模式下,此文件可以提供機器特定信息,例如主機名。 它還在運行本地Spark應用程序或提交腳本時獲取。
請注意,安裝Spark時默認情況下不存在conf / spark-env.sh。 但是,您可以復制conf / spark-env.sh.template來創建它。 確保使副本可執行。
可以在spark-env.sh中設置以下變量:

Environment Variable Meaning
JAVA_HOME 安裝Java的位置(如果它不在您的默認PATH上)。
PYSPARK_PYTHON 在驅動程序和工作程序中用于PySpark的Python二進制可執行文件(如果可用,默認為python2.7,否則為python)。 如果設置了屬性spark.pyspark.python,則優先級
PYSPARK_DRIVER_PYTHON Python二進制可執行文件僅用于驅動程序中的PySpark(默認為PYSPARK_PYTHON)。 如果設置了屬性spark.pyspark.driver.python,則優先級
SPARKR_DRIVER_R 用于SparkR shell的R二進制可執行文件(默認為R)。 如果設置了屬性spark.r.shell.command優先級
SPARK_LOCAL_IP 要綁定的計算機的IP地址。
SPARK_PUBLIC_DNS 您的Spark程序的主機名將通告給其他計算機。

除上述內容外,還有用于設置Spark獨立群集腳本的選項,例如每臺計算機上使用的核心數和最大內存。
由于spark-env.sh是一個shell腳本,因此其中一些可以通過編程方式設置 - 例如,您可以通過查找特定網絡接口的IP來計算SPARK_LOCAL_IP。
注意:在群集模式下在YARN上運行Spark時,需要使用conf / spark-defaults.conf文件中的spark.yarn.appMasterEnv。[EnvironmentVariableName]屬性設置環境變量。 在spark-env.sh中設置的環境變量不會在群集模式下反映在YARN Application Master進程中。 有關更多信息,請參閱與YARN相關的Spark屬性。

Configuring Logging

Spark使用log4j進行日志記錄。 您可以通過在conf目錄中添加log4j.properties文件來配置它。 一種方法是復制位于那里的現有log4j.properties.template。

Overriding configuration directory

要指定默認“SPARK_HOME / conf”以外的其他配置目錄,可以設置SPARK_CONF_DIR。 Spark將使用此目錄中的配置文件(spark-defaults.conf,spark-env.sh,log4j.properties等)。

Inheriting Hadoop Cluster Configuration

如果您計劃使用Spark從HDFS讀取和寫入,則Spark的類路徑中應包含兩個Hadoop配置文件:

  • hdfs-site.xml,它為HDFS客戶端提供默認行為。
  • core-site.xml,用于設置默認文件系統名稱。

這些配置文件的位置因Hadoop版本而異,但常見位置在/ etc / hadoop / conf中。 有些工具可以即時創建配置,但提供了下載它們副本的機制。

要使這些文件對Spark可見,請將$ SPARK_HOME / conf / spark-env.sh中的HADOOP_CONF_DIR設置為包含配置文件的位置。

Custom(自定義) Hadoop/Hive Configuration

如果您的Spark應用程序正在與Hadoop,Hive或兩者進行交互,則Spark的類路徑中可能存在Hadoop / Hive配置文件。

多個正在運行的應用程序可能需要不同的Hadoop / Hive客戶端配置。 您可以在Spark的類路徑中為每個應用程序復制和修改hdfs-site.xml,core-site.xml,yarn-site.xml,hive-site.xml。 在YARN上運行的Spark群集中,這些配置文件在群集范圍內設置,并且無法由應用程序安全地更改。

更好的選擇是以spark.hadoop。*的形式使用spark hadoop屬性。 它們可以被認為與普通火花屬性相同,可以在$ SPARK_HOME / conf / spark-defaults.conf中設置

在某些情況下,您可能希望避免在SparkConf中對某些配置進行硬編碼。 例如,Spark允許您簡單地創建一個空conf并設置spark / spark hadoop屬性。

val conf = new SparkConf().set("spark.hadoop.abc.def","xyz")
val sc = new SparkContext(conf)

此外,您可以在運行時修改或添加配置:

./bin/spark-submit \ 
  --name "My app" \ 
  --master local[4] \  
  --conf spark.eventLog.enabled=false \ 
  --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \ 
  --conf spark.hadoop.abc.def=xyz \ 
  myApp.jar

請關注公眾號獲取更多資料



】【打印繁體】【】【】 【】【】【】 【關閉】 【返回頂部
上一篇spark與MogoDB不得不說的故事 下一篇Spark與深度學習框架——H2O、dee..