Spark參數詳解 (Spark1.6)
參考文檔:Spark官網
在Spark的web UI在“Environment”選項卡中列出Spark屬性。這是一個很有用的地方,可以檢查以確保屬性設置正確。注意,只有通過spark-defaults.conf, SparkConf, 或者 command line配置過的屬性纔會出現 。對於所有其他配置屬性,控制內部設置的大多數屬性具有合理的默認值,在沒有額外配置的額情況下,可以假定使用默認值。
應用級別的參數
參數名稱 | 默認值 | 釋義 | 註釋 |
---|---|---|---|
spark.app.name | none | 應用程序的名稱。這將出現在UI和日誌數據中 | |
spark.driver.cores | 1 | 用於驅動進程的內核數,僅在集羣模式下使用 | |
spark.driver.maxResultSize | 1g | 每個Spark動作(例如collect)的所有分區序列化結果的總大小限制。應該是至少1M,或者是0。如果作業的總大小超過此限制,則將中止作業。 | 有一個高的限制可能會在驅動程序(取決於spark.driver.memory 和 JVM中對象的內存開銷)中導致內存不足錯誤。內存和JVM中對象的內存開銷)。設置適當的限制可以保護驅動程序免受內存不足的錯誤。 |
spark.driver.memory | 1g | 用於驅動進程的內存數量,即初始化SparkContext的地方。(例如1 g, 2 g)。 | 注意:在客戶端模式下,這個配置不能在應用程序中通過SparkConf直接設置,因爲驅動程序JVM已經在此時啓動了。相反,請通過——驅動程序內存命令行選項或在默認屬性文件中設置它。 |
spark.executor.memory | 1g | 每個執行程序executor要使用的內存量(例如2g、8g)。 | |
spark.extraListeners | none | 實現SparkListener的類的逗號分隔列表;在初始化SparkContext時,這些類的實例將被創建並註冊到Spark的偵聽器總線。 | 這個沒看懂~ |
spark.local.dir | /tmp | 用於在Spark中“scratch”空間的目錄,包括存儲在磁盤上的映射輸出文件和rdd。這應該在您系統中的一個快速本地磁盤上。它也可以是不同磁盤上多個目錄的逗號分隔列表。 | 注意:在Spark 1.0及以後版本中,這將由SPARK_LOCAL_DIRS(Standalone, Mesos)或LOCAL_DIRS (YARN) 環境變量覆蓋。 |
spark.logConf | false | 在啓動SparkContext時,將有效的SparkConf記錄爲信息。 | |
spark.master | none | 要連接的集羣管理器。 |
除此之外,以下屬性也可用,在某些情況下可能有用:
運行時環境相關參數
參數名稱 | 默認值 | 釋義 | 註釋 |
---|---|---|---|
spark.driver.extraClassPath | none | 在驅動程序的類路徑之前添加額外的類路徑條目。 | 注意:在客戶端模式下,這個配置不能在應用程序中通過SparkConf直接設置,因爲驅動程序JVM已經在此時啓動了。通過 --driver-class-path或在默認屬性文件中配置。這參數麼得用過~ |
spark.driver.extraJavaOptions | none | 一串額外的JVM選項傳遞給驅動程序。例如,GC設置或其他日誌記錄。 | 在客戶端模式下,這個配置不能在應用程序中通過SparkConf直接設置,因爲驅動程序JVM已經在此時啓動了,可以通過 --driver-java-options或配置文件裏面配置,這參數麼得用過~ |
spark.driver.extraLibraryPath | none | 設置啓動驅動程序JVM時要使用的特殊庫路徑。 | 在客戶端模式下,這個配置不能在應用程序中通過SparkConf直接設置,因爲驅動程序JVM已經在此時啓動了。可以通過 --driver-library-path 或配置文件裏面配置,這參數麼得用過~ |
spark.driver.userClassPathFirst | false | (實驗)在驅動程序中加載類時,是否將用戶添加的jar優先於Spark自己的jar。 | 此特性可用於緩解Spark的依賴項與用戶依賴項之間的衝突。這是目前的一個實驗特性。這隻在集羣模式下使用。這參數麼得用過~,基本打包spark相關的包都已經去掉了,預防針衝突,好像新的版本可以用了,下次確認下。 |
spark.executor.extraClassPath | none | 附加的類路徑條目,以作爲執行器類路徑的前綴。 | 這主要是爲了向後兼容舊版的Spark而存在的。用戶通常不需要設置這個選項。這參數麼得用過~ |
spark.executor.extraJavaOptions | none | 要傳遞給執行器的額外JVM選項字符串。例如,GC設置或其他日誌記錄。 | 這參數麼得用過~ |
spark.executor.extraLibraryPath | none | 設置啓動執行器JVM時要使用的特殊庫路徑。 | 這參數麼得用過~ |
spark.executor.logs.rolling.maxRetainedFiles | none | 設置系統將保留的最新滾動日誌文件的數量。舊的日誌文件將被刪除。默認情況下禁用。 | 這參數麼得用過~ |
spark.executor.logs.rolling.maxSize | none | 設置執行程序日誌將被滾動的文件的最大大小。默認情況下禁用滾動。 | 這參數麼得用過~ |
spark.executor.logs.rolling.strategy | none | 設置執行器日誌的滾動策略。默認情況下,它是禁用的。它可以設置爲“時間”(基於時間的滾動)或“大小”(基於大小的滾動) | 對於“time”,使用spark.executor.log . roll.time .interval來設置滾動間隔。對於“size”,請使用spark.executor.log .rolling.size。設置滾動的最大文件大小。 |
spark.executor.logs.rolling.time.interval | daily | 設置執行器日誌將被滾動的時間間隔。默認情況下禁用滾動 | 有效值爲每日、小時、分鐘或以秒爲單位的任何間隔( daily, hourly, minutely or any interval in seconds) |
spark.executor.userClassPathFirst | false | 功能與spark.driver.userClassPathFirst相似,但是作用於executor | 這參數麼得用過~ |
spark.executorEnv.[EnvironmentVariableName] | none | 將EnvironmentVariableName 指定的環境變量添加到執行程序進程中。 | 用戶可以指定多個環境變量來設置多個環境變量。 |
Shuffle操作相關參數
參數名稱 | 默認值 | 釋義 | 註釋 |
---|---|---|---|
spark.reducer.maxSizeInFlight | 48m | 從每個reduce任務同時獲取的映射輸出的最大大小。 | 因爲每個輸出都需要我們創建一個緩衝區來接收它,所以每個reduce任務的內存開銷都是固定的,所以除非您有大量的內存,否則請保持較小。 |
spark.shuffle.compress | true | 是否壓縮映射輸出文件。一般來說是個好主意。 | 壓縮將使用spark.io.compression.codec。 |
spark.shuffle.file.buffer | 32k | 每個shuffle文件輸出流的內存緩衝區大小。 | 這些緩衝區減少了在創建shuffle文件時磁盤查找和系統調用的數量。 |
spark.shuffle.io.maxRetries | 3 | (Netty only)如果設置爲非零值,則會自動重試由於io相關異常而失敗的獲取。 | 這種重試邏輯有助於在面對長時間GC暫停或短暫的網絡連接問題時穩定大型shuffle操作。 |
spark.shuffle.io.numConnectionsPerPeer | 1 | 主機之間的連接被重用數量 | 對於擁有許多硬盤和少量主機的集羣,這可能導致併發性不足,無法使所有磁盤飽和,因此用戶可能會考慮增加這個值。,以減少大型集羣的連接累積。 |
spark.shuffle.io.preferDirectBufs | true | (僅適用於Netty)堆外緩衝區用於減少shuffle和cache 塊傳輸期間的垃圾收集。 | 對於堆外內存受到嚴格限制的環境,用戶可能希望關閉這個選項,以強制Netty的所有分配都處於堆上。 |
spark.shuffle.io.retryWait | 5s | (Netty only)兩次讀取之間等待的時間。 | 默認情況下,重試導致的最大延遲爲15秒,計算方法爲maxRetries * retryWait。 |
spark.shuffle.manager | sort | 用於shuffle數據的實現。有兩種實現可用:sort 和 hash. | 基於排序的shuffle內存效率更高,從1.2開始就是默認選項。 |
spark.shuffle.service.enabled | false | 啓用外部shuffle服務。該服務保存了由executors 編寫的shuffle文件,以便可以安全地刪除executors 。 | spark.dynamicAllocation.enabled 必須設爲"true",必須設置外部shuffle服務才能啓用它。詳情查看動態分配配置和設置文檔 |
spark.shuffle.service.port | 7337 | 運行外部shuffle服務的端口。 | |
spark.shuffle.sort.bypassMergeThreshold | 200 | (高級)在基於排序的shuffle manager中,如果沒有映射端聚合且最多有次參數這麼多的reduce分區,避免合併排序數據。 | |
spark.shuffle.spill.compress | true | 是否要壓縮在shuffle過程中溢出的數據。壓縮將使用spark.io.compression.codec。 | 默認即可~ |
Spark UI相關參數
參數名稱 | 默認值 | 釋義 | 註釋 |
---|---|---|---|
spark.eventLog.compress | false | 是否壓縮已記錄的事件 | spark.eventLog.enabled 爲"true" |
spark.eventLog.dir | file:///tmp/spark-events | spark.eventLog.enabled 爲"true",記錄Spark事件的基本目錄 | 在這個基本目錄中,Spark爲每個應用程序創建一個子目錄,並在這個目錄中記錄特定於應用程序的事件。用戶可能希望將其設置爲一個統一的位置,比如一個HDFS目錄,以便歷史服務器可以讀取歷史文件。 |
spark.eventLog.enabled | false | 是否記錄Spark事件 | 對於應用程序完成後重構Web UI非常有用。 |
spark.ui.killEnabled | true | 允許從web ui中刪除階段和相應的作業。 | |
spark.ui.port | 4040 | 應用程序頁面的端口,頁面顯示內存和工作負載數據。 | |
spark.ui.retainedJobs | 1000 | 在垃圾收集之前,Spark UI和status APIs記住了多少作業。 | |
spark.ui.retainedStages | 1000 | 在垃圾收集之前,Spark UI和status APIs記住了多少個階段。 | |
spark.worker.ui.retainedExecutors | 1000 | 在垃圾收集之前,Spark UI和status APIs記住了多少已完成的執行器。 | |
spark.worker.ui.retainedDrivers | 1000 | 在垃圾收集之前,Spark UI和status APIs記住了多少已完成的驅動程序。 | |
spark.sql.ui.retainedExecutions | 1000 | 在垃圾收集之前,Spark UI和status APIs記錄執行了多少次。 | |
spark.streaming.ui.retainedBatches | 1000 | 在垃圾收集之前,Spark UI和status APIs要記住多少個已完成的批處理。 |
壓縮和序列化相關參數
參數名稱 | 默認值 | 釋義 | 註釋 |
---|---|---|---|
spark.broadcast.compress | true | 是否在發送廣播變量之前壓縮它們。 | 一般來說是個好主意。 |
spark.closure.serializer | org.apache.spark.serializer.JavaSerializer | 用於閉包的序列化器類。 | 目前只支持Java序列化器。 |
spark.io.compression.codec | snappy | 用於壓縮的編解碼器 lz4、lzf、 snappy.。 | 可指定編解碼器,例如。org.apache.spark.io.LZ4CompressionCodec, org.apache.spark.io.LZFCompressionCodec, and org.apache.spark.io.SnappyCompressionCodec. |
spark.io.compression.lz4.blockSize | 32k | 在使用LZ4壓縮編解碼器的情況下,用於LZ4壓縮的塊大小。 | 當使用LZ4時,降低這個塊的大小也會降低洗牌內存的使用。 |
spark.io.compression.snappy.blockSize | 32k | 在使用Snappy壓縮編解碼器的情況下,用於Snappy壓縮的塊大小。 | 當使用Snappy時,降低這個塊的大小也會降低洗牌內存的使用。 |
spark.kryo.classesToRegister | none | 如果使用Kryo序列化,請提供一個以逗號分隔的自定義類名列表,以便向Kryo註冊。 | 有關更多細節,請參閱調優指南。 |
spark.kryo.referenceTracking | true (false when using Spark SQL Thrift Server) | 是否在使用Kryo序列化數據時跟蹤對同一對象的引用. | 如果對象圖具有循環,這是必要的,如果對象圖包含同一對象的多個副本,這對於提高效率非常有用。如果您知道情況並非如此,可以禁用它來提高性能。 |
spark.kryo.registrationRequired | spark.kryo.registrationRequired | 是否需要向Kryo註冊。 | 如果設置爲“true”,如果未註冊的類被序列化,Kryo將拋出異常。如果設置爲false(默認值),Kryo將與每個對象一起寫入未註冊的類名。編寫類名會導致顯著的性能開銷,因此啓用此選項可以嚴格確保用戶在註冊時沒有遺漏類。 |
spark.kryo.registrator | none | 如果使用Kryo序列化,請用Kryo設置這個類,以便註冊自定義類。 | 如果需要以自定義方式註冊類,例如指定自定義字段序列化器,則此屬性非常有用。否則的話,spark。kryo。classestoregister更簡單。它應該被設置爲擴展KryoRegistrator的類。有關更多細節,請參閱調優指南。 |
spark.kryoserializer.buffer.max | 64m | Kryo序列化緩衝區的允許最大值。它必須大於您試圖序列化的任何對象。 | 如果您在Kryo中得到一個"buffer limit exceeded" 異常,請增加這個值。 |
spark.kryoserializer.buffer | 64k | Kryo的序列化緩衝區的初始大小。 | 請注意,每個worker上的每個核心都有一個緩衝區。如果需要,這個緩衝區將增長爲spark.kryoserializer.buffer.max。 |
spark.rdd.compress | false | 是否壓縮序列化的RDD分區(例如StorageLevel.MEMORY_ONLY_SER)。 | 可以節省大量空間的代價是一些額外的CPU時間。 |
spark.serializer | org.apache.spark.serializer.JavaSerializer | 序列化將通過網絡發送或需要以序列化形式緩存的對象的類 | Java序列化的默認值適用於任何可序列化的Java對象,但是速度非常慢。 |
使用Spark SQL Thrift Server時org.apache.spark.serializer.KryoSerializer | 所以我們建議使用org.apache.spark.serializer。在需要速度時配置Kryo序列化器。可以是org.apache.spark.Serializer的任何子類。 | ||
spark.serializer.objectStreamReset | 100 | 序列化時使用org.apache.spark.serializer.JavaSerializer,序列化器緩存對象以防止寫入冗餘數據,但是這會停止這些對象的垃圾收集。 | 通過調用'reset',您可以從序列化器中刷新該信息,並允許收集舊對象。要關閉這個週期復位設置爲-1。默認情況下,它將每100個對象重置序列化器。 |
本文是我在對spark調優過程中,發現有很多參數沒用過甚至沒見過,本着學習的心態整理了一份參數說明,此爲第一部分,後續的會盡快更新!!!
轉載請註明出處~~~