Spark1.0.0 属性配置
- SparkConf方式
- SparkConf方式能夠直接將屬性值傳遞到SparkContext;
- SparkConf能夠?qū)δ承┩ㄓ脤傩灾苯优渲?#xff0c;如master使用setMaster,appname使用setAppName;
- 也能夠使用set()方法對屬性進行鍵-值對配置,如set("spark.executor.memory", "1g") 。
- 命令行參數(shù)方式
- 這樣的方式是在使用spark-submit或spark-shell提交應用程序的時候。用命令行參數(shù)提交;
- 這樣的方式能夠比較靈活的配置各個應用程序的執(zhí)行環(huán)境;
- 能夠通過spark-submit --help 或 spark-shell –help顯示出屬性的完整列表。
- 文件配置方式
- 該方式是將屬性配置項以鍵值對方式寫入文本文件里,一個配置項占一行;
- 該文件默覺得conf/spark-defaults.conf。spark-submit在提交應用程序的時候會檢查是否存在該文件,有的話就將相關(guān)的屬性配置加載;
- 該文件能夠在 spark-submit的命令參數(shù)--properties-file定義不同的位置。
- 優(yōu)先權(quán)
- SparkConf方式 > 命令行參數(shù)方式 >文件配置方式
- 查看Spark屬性配置
- 通過應用程序的webUI(地址http://<driver>:4040)能夠查看Spark屬性配置,從而檢查屬性配置是否正確。
- 僅僅是顯示通過上面三種方式顯式指定的屬性配置。對于其它屬性能夠假定使用默認配置;
- 對于大多數(shù)內(nèi)部控制屬性,系統(tǒng)已經(jīng)提供了合理的默認配置。
2:Spark1.0.0中通用屬性 A:應用程序?qū)傩?
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.app.name | ?無 | 應用程序名稱 |
| ?spark.master | ?無 | 要連接的群集管理器 |
| ?spark.executor.memory | ?512 m | 每一個executor使用的內(nèi)存總量 |
| ?spark.serializer | ?org.apache.spark.serializer. JavaSerializer | 在網(wǎng)絡(luò)數(shù)據(jù)傳送或緩存時使用的序化器,默認的序化器是Java序化器,盡管這樣的序化器對不論什么Java對象能夠使用,兼容性好,可是處理速度相當?shù)穆<僭O(shè)要追求處理速度的話,建議使用org.apache.spark.serializer.KryoSerializer序化器。當然也能夠隨意是定義為org.apache.spark.Serializer 子類的序化器。 |
| ?spark.kryo.registrator | ?無 | 假設(shè)要使用 Kryo序化器。須要創(chuàng)建一個繼承KryoRegistrator的類并設(shè)置系統(tǒng)屬性spark.kryo.registrator指向該類。 |
| ?spark.local.dir | ?/tmp | 用于暫存空間的文件夾。該文件夾用于保存map輸出文件或者轉(zhuǎn)儲RDD。 該文件夾位于快速的本地磁盤上,或者位于使用逗號分隔的多個不同磁盤上的文件夾。注意: 在Spark 1.0 及更高版本號這屬性將被 群集管理器配置的環(huán)境變量?SPARK_LOCAL_DIRS (Standalone、Mesos) 或 LOCAL_DIRS (YARN) 取代。 |
| ?spark.logConf | ?false | SparkContext 啟動時記錄有效 SparkConf信息。 |
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.executor.memory | ?512 m | 分配給每一個executor進程總內(nèi)存(使用類似512m、2g格式)? |
| ?spark.executor.extraJavaOptions | ?無 | 要傳遞給executor的額外 JVM 選項,注意不能使用它來設(shè)置Spark屬性或堆大小設(shè)置。 |
| ?spark.executor.extraClassPath | ?無 | 追加到executor類路徑中的附加類路徑,主要為了兼容舊版本號的Spark。通常不須要用戶設(shè)置。 |
| ?spark.executor.extraLibraryPath | ?無 | ?啟動executor JVM 時要用到的特殊庫路徑。 |
| ?spark.files.userClassPathFirst | ?false | executor在載入類的時候是否優(yōu)先使用用戶自己定義的JAR包,而不是Spark帶有的JAR包。此功能能夠用于解決Spark依賴包和用戶依賴包之間的沖突。 眼下,該屬性僅僅是一項試驗功能。 |
C:Shuffle 操作
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.shuffle.consolidateFiles | ?false | 假設(shè)設(shè)置為true,在shuffle時就合并中間文件,對于有大量Reduce任務(wù)的shuffle來說。合并文件能夠提高文件系統(tǒng)性能。假設(shè)使用的是ext4 或 xfs 文件系統(tǒng)。建議設(shè)置為true;對于ext3。因為文件系統(tǒng)的限制,設(shè)置為true反而會使內(nèi)核>8的機器減少性能。 |
| ?spark.shuffle.spill | ?true | 假設(shè)設(shè)置為true,在shuffle期間通過溢出數(shù)據(jù)到磁盤來減少了內(nèi)存使用總量。溢出閾值是由spark.shuffle.memoryFraction指定的。 |
| ?spark.shuffle.spill.compress | ?true | 是否壓縮在shuffle期間溢出的數(shù)據(jù),假設(shè)壓縮將使用spark.io.compression.codec。 |
| ? | ? | ? |
| ?spark.shuffle.compress | ?true | 是否壓縮map輸出文件,壓縮將使用spark.io.compression.codec。 |
| ?spark.shuffle.file.buffer.kb | ?100 | 每一個shuffle的文件輸出流內(nèi)存緩沖區(qū)的大小,以KB為單位。 這些緩沖區(qū)能夠降低磁盤尋道的次數(shù),也降低創(chuàng)建shuffle中間文件時的系統(tǒng)調(diào)用。 |
| ?spark.reducer.maxMbInFlight | ?48 | 每一個reduce任務(wù)同一時候獲取map輸出的最大大小 (以兆字節(jié)為單位)。因為每一個map輸出都須要一個緩沖區(qū)來接收它。這代表著每一個 reduce 任務(wù)有固定的內(nèi)存開銷。所以要設(shè)置小點,除非有非常大內(nèi)存。 |
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.ui.port | ?4040 | 應用程序webUI的port |
| ?spark.ui.retainedStages | ?1000 | 在GC之前webUI保留的stage數(shù)量 |
| ?spark.ui.killEnabled | ?true | 同意在webUI將stage和對應的job殺死 |
| ?spark.eventLog.enabled | ?false | 是否記錄Spark事件,用于應用程序在完畢后重構(gòu)webUI。 |
| ?spark.eventLog.compress | ?false | 是否壓縮記錄Spark事件,前提spark.eventLog.enabled為true。 |
| ?spark.eventLog.dir | ?file:///tmp/spark-events | 假設(shè)spark.eventLog.enabled為 true,該屬性為記錄spark事件的根文件夾。在此根文件夾中,Spark為每一個應用程序創(chuàng)建分文件夾。并將應用程序的事件記錄到在此文件夾中。 用戶能夠?qū)⒋藢傩栽O(shè)置為HDFS文件夾,以便history server讀取歷史記錄文件。 |
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.broadcast.compress | ?true | 是否在發(fā)送之前壓縮廣播變量。 |
| ?spark.rdd.compress | ?false | 是否壓縮序化的RDD分區(qū) ,能夠節(jié)省大量空間。但會消耗一些額外的CPU時間。 |
| ?spark.io.compression.codec | ?org.apache.spark.io. LZFCompressionCodec | 用于壓縮內(nèi)部數(shù)據(jù)如 RDD 分區(qū)和shuffle輸出的編碼解碼器。Spark提供兩個編解碼器: org.apache.spark.io.LZFCompressionCodec和org.apache.spark.io.SnappyCompressionCodec。當中,Snappy提供更高速的壓縮和解壓縮,而LZF提供了更好的壓縮比。 |
| ?spark.io.compression.snappy .block.size | ?32768 | 使用Snappy編碼解碼器時,編碼解碼器使用的塊大小 (以字節(jié)為單位)?。 |
| ?spark.closure.serializer | ?org.apache.spark.serializer. JavaSerializer | 用于閉包的序化器,眼下僅僅有支持Java序化器。 |
| ?spark.serializer. objectStreamReset | ?10000 | 使用 org.apache.spark.serializer.JavaSerializer序化時。序化器緩存對象以防止寫入冗余數(shù)據(jù),這時停止這些對象的垃圾收集。通過調(diào)用重置序化器,刷新該信息就能夠收集舊對象。若要關(guān)閉這重定期重置功能將其設(shè)置為< = 0?。默認情況下每10000個對象將重置序化器。 |
| ?spark.kryo.referenceTracking | ?true | 當使用Kryo序化數(shù)據(jù)時。是否跟蹤對同一對象的引用。假設(shè)你的對象圖有回路或者同一對象有多個副本。有必要設(shè)置為true。其它情況下能夠禁用以提高性能。 |
| ?spark.kryoserializer.buffer.mb | ?2 | 在Kryo 里同意的最大對象大小(Kryo會創(chuàng)建一個緩沖區(qū),至少和序化的最大單個對象一樣大) 。 假設(shè)Kryo 出現(xiàn)緩沖區(qū)限制超出異常報錯,添加這個值。注意。每一個worker的每一個core僅僅有一個緩沖區(qū)。 |
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.default.parallelism | 本地模式: 本地機器內(nèi)核數(shù) Mesos精細模式: 8 其它: 全部executor的core總數(shù) 或者2,以較大者為準 | 假設(shè)用戶沒設(shè)置,系統(tǒng)使用集群中執(zhí)行shuffle操作的默認任務(wù)數(shù)(groupByKey、 reduceByKey等)。 |
| ?spark.broadcast.factory | org.apache.spark.broadcast. HttpBroadcastFactory | 廣播的實現(xiàn)類 |
| ?spark.broadcast.blockSize | ?4096 | TorrentBroadcastFactory塊大小(以kb為單位)。太大值在廣播時減少并行性 (使速度變慢)。太小值, BlockManager性能可能會受到?jīng)_擊。 |
| ?spark.files.overwrite | ?false | 通過 SparkContext.addFile() 加入的文件在目標中已經(jīng)存在而且內(nèi)容不匹配時,是否覆蓋目標文件。 |
| ?spark.files.fetchTimeout | ?false | 在獲取由driver通過SparkContext.addFile()?加入的文件時,是否使用通信時間超時。 |
| ?spark.storage.memoryFraction | ?0.6 | Java堆用于cache的比例 |
| ?spark.tachyonStore.baseDir | ?System.getProperty("java.io.tmpdir") | 用于存儲RDD的techyon文件夾,tachyon文件系統(tǒng)的URL由spark.tachyonStore.url設(shè)置。 也能夠是逗號分隔的多個techyon文件夾。 |
| ?spark.storage. memoryMapThreshold | ?8192 | 以字節(jié)為單位的塊大小,用于磁盤讀取一個塊大小進行內(nèi)存映射。這能夠防止Spark在內(nèi)存映射時使用非常小塊,普通情況下,對塊進行內(nèi)存映射的開銷接近或低于操作系統(tǒng)的頁大小。 |
| ?spark.tachyonStore.url | ?tachyon://localhost:19998 | 基于techyon文件的URL。 |
| ?spark.cleaner.ttl | ?無限 | spark記錄不論什么元數(shù)據(jù)(stages生成、task生成等)的持續(xù)時間。定期清理能夠確保將超期的元數(shù)據(jù)遺忘。這在執(zhí)行長時間任務(wù)是非常實用的,如執(zhí)行24/7的sparkstreaming任務(wù)。注意RDD持久化在內(nèi)存中的超期數(shù)據(jù)也會被清理。 |
G:網(wǎng)絡(luò)通信
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.driver.host | ?本地主機名 | 執(zhí)行driver的主機名或 IP 地址。 |
| ?spark.driver.port | ?隨機 | driver偵聽的port。 |
| ?spark.akka.frameSize | ?10 | 以MB為單位的driver和executor之間通信信息的大小,設(shè)置值越大。driver能夠接受更大的計算結(jié)果。 |
| ?spark.akka.threads | ?4 | 用于通信的actor線程數(shù),在大型集群中擁有很多其它CPU內(nèi)核的driver能夠添加actor線程數(shù)。 |
| ?spark.akka.timeout | ?100 | 以秒為單位的Spark節(jié)點之間通信超時時間。 |
| ?spark.akka.heartbeat.pauses | ?600 | 以下3個參數(shù)是用于設(shè)置akka自帶的故障探測器,設(shè)置非常大值的話。能夠停用故障探測器。假設(shè)想啟用故障探測器。以秒為單位設(shè)置這3個參數(shù)。 一般是在特殊須要的情況下開啟故障探測器。一個敏感的故障探測器有助于惡意的executor的定位,而對于因為GC暫?;蚓W(wǎng)絡(luò)滯后引起的情況下,不須要開啟故障探測器;另外故障探測器的開啟會導致因為心跳信息的頻繁交換而引起的網(wǎng)絡(luò)泛濫。 |
| ?spark.akka.failure-detector.threshold | ?300.0 | 相應AKKA的akka.remote.transport-failure-detector.threshold |
| ?spark.akka.heartbeat.interval? | ?1000 | 心跳間隔時間 |
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.task.cpus | ?1 | 為每一個任務(wù)分配的內(nèi)核數(shù)。 |
| ?spark.task.maxFailures | ?4 | job放棄task前該task的失敗次數(shù),該值>=1 |
| ?spark.scheduler.mode | ?FIFO | SparkContext對job進行調(diào)度所採用的模式。 對于多用戶可採用FAIR模式。 |
| ?spark.cores.max | ?未設(shè)置 | 當應用程序執(zhí)行在Standalone集群或者粗粒度共享模式Mesos集群時,應用程序向集群請求的最大CPU內(nèi)核總數(shù)(不是指每臺機器,而是整個集群)。 假設(shè)不設(shè)置,對于Standalone集群將使用spark.deploy.defaultCores中數(shù)值,而Mesos將使用集群中可用的內(nèi)核。 |
| ?spark.mesos.coarse | ?false | 假設(shè)設(shè)置為true。在Mesos集群中執(zhí)行時使用粗粒度共享模式。 |
| ?spark.speculation | ?false | 下面幾個參數(shù)是關(guān)于Spark猜測運行機制的相關(guān)參數(shù)。此參數(shù)設(shè)定是否使用猜測運行機制,假設(shè)設(shè)置為true則spark使用猜測運行機制,對于Stage中拖后腿的Task在其它節(jié)點中又一次啟動,并將最先完畢的Task的計算結(jié)果最為終于結(jié)果。 |
| ?spark.speculation.interval? | ?100 | Spark多長時間進行檢查task執(zhí)行狀態(tài)用以猜測。以毫秒為單位。 |
| ?spark.speculation.quantile | ?0.75 | 猜測啟動前。Stage必需要完畢總Task的百分比。 |
| ?spark.speculation.multiplier | ?1.5 | 比已完畢Task的執(zhí)行速度中位數(shù)慢多少倍才啟用猜測 |
| ?spark.locality.wait | ?3000 | 下面幾個參數(shù)是關(guān)于Spark數(shù)據(jù)本地性的相關(guān)參數(shù)。 本參數(shù)是以毫秒為單位啟動本地數(shù)據(jù)task的等待時間,假設(shè)超出就啟動下一本地優(yōu)先級別的task。 該設(shè)置相同能夠應用到各優(yōu)先級別的本地性之間(本地進程 -> 本地節(jié)點 -> 本地機架 -> 隨意節(jié)點 ),當然,也能夠通過spark.locality.wait.node等參數(shù)設(shè)置不同優(yōu)先級別的本地性。 |
| ?spark.locality.wait.process | ?spark.locality.wait? | 本地進程級別的本地等待時間 |
| ?spark.locality.wait.node | ?spark.locality.wait | 本地節(jié)點級別的本地等待時間 |
| ?spark.locality.wait.rack | ?spark.locality.wait | 本地機架級別的本地等待時間 |
| ?spark.scheduler.revive.interval? | ?1000 | 復活又一次獲取資源的Task的最長時間間隔(毫秒),發(fā)生在Task由于本地資源不足而將資源分配給其它Task執(zhí)行后進入等待時間,假設(shè)這個等待時間內(nèi)又一次獲取足夠的資源就繼續(xù)計算。 |
I:安全
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.authenticate | ?false | Spark是否啟用內(nèi)部身份驗證。 |
| ?spark.authenticate.secret | ?無 | 設(shè)置Spark用于組件之間進行身份驗證的密鑰。假設(shè)不是YARN上執(zhí)行而且spark.authenticate為true時,須要設(shè)置密鑰。 |
| ?spark.core.connection. auth.wait.timeout | ?30 | Spark用于組件時間進行身份認證的超時時間。 |
| ?spark.ui.filters | ?無 | Spark web UI 要使用的以逗號分隔的篩選器名稱列表。篩選器要符合javax servlet Filter標準,每一個篩選器的參數(shù)能夠通過設(shè)置java系統(tǒng)屬性來指定: 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.ui.acls.enable | ?false | Spark webUI存取權(quán)限是否啟用。 假設(shè)啟用。在用戶瀏覽web界面的時候會檢查用戶是否有訪問權(quán)限。 |
| ?spark.ui.view.acls | ?空 | 以逗號分隔Spark webUI訪問用戶的列表。默認情況下僅僅有啟動Spark job的用戶才有訪問權(quán)限。 |
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.streaming.blockInterval? | ?200 | 在時間間隔內(nèi)(毫秒)Spark Streaming接收器將接收數(shù)據(jù)合并成數(shù)據(jù)塊并存儲在Spark。 |
| ?spark.streaming.unpersist | ?true | 假設(shè)設(shè)置為true,強迫將SparkStreaming持久化的RDD數(shù)據(jù)從Spark內(nèi)存中清理,相同的,SparkStreaming接收的原始輸入數(shù)據(jù)也會自己主動被清理;假設(shè)設(shè)置為false,則同意原始輸入數(shù)據(jù)和持久化的RDD數(shù)據(jù)可被外部的Streaming應用程序訪問,由于這些數(shù)據(jù)不會自己主動清理。 |
- SPARK_MASTER_OPTS ?配置master使用的屬性
- SPARK_WORKER_OPTS ?配置worker使用的屬性
- SPARK_DAEMON_JAVA_OPTS ?配置master和work都使用的屬性
export SPARK_MASTER_OPTS="-Dx1=y1 -Dx2=y2"
# - 當中x代表屬性,y代表屬性值
當中SPARK_MASTER_OPTS所支持的屬性有:| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.deploy.spreadOut? | ?true | Standalone集群管理器是否自由選擇節(jié)點還是固定到盡可能少的節(jié)點,前者會有更好的數(shù)據(jù)本地性。后者對于計算密集型工作負載更有效 |
| ?spark.deploy.defaultCores? | ?無限 | 假設(shè)沒有設(shè)置spark.cores.max,該參數(shù)設(shè)置Standalone集群分配給應用程序的最大內(nèi)核數(shù),假設(shè)不設(shè)置,應用程序獲取全部的有效內(nèi)核。 注意在一個共享的集群中。設(shè)置一個低值防止攫取了全部的內(nèi)核,影響他人的使用。 |
| ?spark.worker.timeout | ?60 | master由于沒有收到心跳信息而覺得worker丟失的時間(秒) |
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.worker.cleanup.enabled? | ?false | 是否定期清理worker的應用程序工作文件夾。僅僅適用于Standalone模式,不適用于YARN模式。清理的時候?qū)o視應用程序是否在執(zhí)行。 |
| ?spark.worker.cleanup.interval | ?1800? | 清理worker本地過期的應用程序工作文件夾的時間間隔(秒) |
| ?spark.worker.cleanup.appDataTtl? | ?7*24*3600? | worker保留應用程序工作文件夾的有效時間。 該時間由磁盤空間、應用程序日志、應用程序的jar包以及應用程序的提交頻率來設(shè)定。 |
| ?屬性名稱 | ?含義 |
| ?spark.deploy.recoveryMode | 以下3個參數(shù)是用于配置zookeeper模式的master HA。
|
| ?spark.deploy.zookeeper.url | zookeeper集群URL |
| ?spark.deploy.zookeeper.dir | zooKeeper保存恢復狀態(tài)的文件夾。缺省為/spark |
| ?spark.deploy.recoveryMode | 設(shè)成FILESYSTEM啟用master單節(jié)點恢復模式,缺省值為NONE |
| ?spark.deploy.recoveryDirectory | Spark保存恢復狀態(tài)的文件夾 |
B:YARN特有屬性 YARN特有屬性的配置,應該是支持SparkConf方式和conf/spark-defaults.conf文件配置方式,。
| ?屬性名稱 | ?默認 | ?含義 |
| ?spark.yarn.applicationMaster.waitTries | ?10 | RM等待Spark AppMaster啟動次數(shù),也就是SparkContext初始化次數(shù)。超過這個數(shù)值,啟動失敗。 |
| ?spark.yarn.submit.file.replication | ?3 | 應用程序上載到HDFS的文件的復制因子 |
| ?spark.yarn.preserve.staging.files | ?false | 設(shè)置為true,在job結(jié)束后,將stage相關(guān)的文件保留而不是刪除。 |
| ?spark.yarn.scheduler.heartbeat.interval-ms | ?5000 | Spark AppMaster發(fā)送心跳信息給YARN RM的時間間隔 |
| ?spark.yarn.max.executor.failures | ?2倍于executor數(shù) | 導致應用程序宣告失敗的最大executor失敗數(shù) |
| ?spark.yarn.historyServer.address | ?無 | Spark history server的地址(不要加http://)。這個地址會在Spark應用程序完畢后提交給YARN RM,然后RM將信息從RM UI寫到history server UI上。 |
總結(jié)
以上是生活随笔為你收集整理的Spark1.0.0 属性配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 错误:unrecognized comm
- 下一篇: CentOS 7之Systemd详解之服