Spark參數詳解 一(Spark1.6)

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.memoryJVM中對象的內存開銷)中導致內存不足錯誤。內存和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調優過程中,發現有很多參數沒用過甚至沒見過,本着學習的心態整理了一份參數說明,此爲第一部分,後續的會盡快更新!!!
轉載請註明出處~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章