1、環境變量html
spark安裝目錄下的conf/spark-env.sh腳本決定了如何初始化worker nodes的JVM,甚至決定了你在本地如何運行spark-shell。在Git庫中這個腳本默認是不存在的,可是你能夠本身建立它並經過複製con/spark-env.sh.template中的內容來配置,最後要確保你建立的文件可執行。java
在spark-env.sh中你至少有兩個變量要設置:node
2、系統屬性
經過設置系統屬性來配置Spark,你必須經過如下兩種方式中的任意一個來達到目的:if [ -z "$SPARK_JAVA_OPTS" ] ; then SPARK_JAVA_OPTS="-verbose:gc" fi
System.setProperty("spark.cores.max", "5") val sc = new SparkContext(...)
屬性名稱 | 默認值 | 含義 |
---|---|---|
spark.executor.memory | 512m | 每一個處理器可使用的內存大小,跟JVM的內存表示的字符串格式是同樣的(好比: '512m','2g') |
spark.serializer | spark.JavaSerializer | 一個類名,用於序列化網絡傳輸或者以序列化形式緩存起來的各類對象。默認狀況下Java的序列化機制能夠序列化任何實現了Serializable接口的對象,可是速度是很慢的,所以當你在乎運行速度的時候咱們建議你使用spark.KryoSerializer 而且配置 Kryo serialization。能夠是任何 spark.Serializer的子類。 |
spark.kryo.registrator | (none) | 若是你使用的是Kryo序列化,就要爲Kryo設置這個類去註冊你自定義的類。這個類須要繼承spark.KryoRegistrator。 能夠參考 調優指南 獲取更多的信息。 |
spark.local.dir | /tmp | 設置Spark的暫存目錄,包括映射輸出文件盒須要存儲在磁盤上的RDDs。這個磁盤目錄在你的系統上面訪問速度越快越好。能夠用逗號隔開來設置多個目錄。 |
spark.cores.max | (infinite) | 當運行在一個獨立部署集羣上或者是一個粗粒度共享模式的Mesos集羣上的時候,最多能夠請求多少個CPU核心。默認是全部的都能用。 |
屬性名 | 默認值 | 含義 |
---|---|---|
spark.mesos.coarse | false | 若是設置爲了"true",將以粗粒度共享模式運行在Mesos集羣上, 這時候Spark會在每臺機器上面得到一個長期運行的Mesos任務,而不是對每一個Spark任務都要產生一個Mesos任務。對於不少短查詢,這個可能會有些許的延遲,可是會大大提升Spark工做時的資源利用率。 |
spark.default.parallelism | 8 | 在用戶沒有指定時,用於分佈式隨機操做(groupByKey,reduceByKey等等)的默認的任務數。 |
spark.storage.memoryFraction | 0.66 | Spark用於緩存的內存大小所佔用的Java堆的比率。這個不該該大於JVM中老年代所分配的內存大小,默認狀況下老年代大小是堆大小的2/3,可是你能夠經過配置你的老年代的大小,而後再去增長這個比率。 |
spark.ui.port | (random) | 你的應用程序控制面板端口號,控制面板中能夠顯示每一個RDD的內存使用狀況。 |
spark.shuffle.compress | true | 是否壓縮映射輸出文件,一般設置爲true是個不錯的選擇。 |
spark.broadcast.compress | true | 廣播變量在發送以前是否先要被壓縮,一般設置爲true是個不錯的選擇。 |
spark.rdd.compress | false | 是否要壓縮序列化的RDD分區(好比,StorageLevel.MEMORY_ONLY_SER)。在消耗一點額外的CPU時間的代價下,能夠極大的提升減小空間的使用。 |
spark.reducer.maxMbInFlight | 48 | 同時獲取每個分解任務的時候,映射輸出文件的最大的尺寸(以兆爲單位)。因爲對每一個輸出都須要咱們去建立一個緩衝區去接受它,這個屬性值表明了對每一個分解任務所使用的內存的一個上限值,所以除非你機器內存很大,最好仍是配置一下這個值。 |
spark.closure.serializer | spark.JavaSerializer | 用於閉包的序列化類。一般Java是能夠勝任的,除非在你的驅動程序中分佈式函數(好比map函數)引用了大量的對象。 |
spark.kryoserializer.buffer.mb | 32 | Kryo中運行的對象的最大尺寸(Kryo庫須要建立一個不小於最大的單個序列化對象的緩存區)。若是在Kryo中出現"buffer limit exceeded"異常,你就須要去增長這個值了。注意,對每一個worker而言,一個核心就會有一個緩衝。 |
spark.broadcast.factory | spark.broadcast.HttpBroadcastFactory | 使用哪個廣播實現 |
spark.locality.wait | 3000 | 在發佈一個本地數據任務時候,放棄併發布到一個非本地數據的地方前,須要等待的時間。若是你的不少任務都是長時間運行的任務,而且看到了不少的髒數據的話,你就該增長這個值了。可是通常狀況下缺省值就能夠很好的工做了。 |
spark.worker.timeout | 60 | 若是超過這個時間,獨立部署master尚未收到worker的心跳回復,那麼就認爲這個worker已經丟失了。 |
spark.akka.frameSize | 10 | 在控制面板通訊(序列化任務和任務結果)的時候消息尺寸的最大值,單位是MB。若是你須要給驅動器發回大尺寸的結果(好比使用在一個大的數據集上面使用collect()方法),那麼你就該增長這個值了。 |
spark.akka.threads | 4 | 用於通訊的actor線程數量。若是驅動器有不少CPU核心,那麼在大集羣上能夠增大這個值。 |
spark.akka.timeout | 20 | Spark節點之間通訊的超時時間,以秒爲單位 |
spark.driver.host | (local hostname) | 驅動器監聽主機名或者IP地址. |
spark.driver.port | (random) | 驅動器監聽端口號 |
spark.cleaner.ttl | (disable) | Spark記憶任何元數據(stages生成,任務生成等等)的時間(秒)。週期性清除保證在這個時間以前的元數據會被遺忘。當長時間幾小時,幾天的運行Spark的時候設置這個是頗有用的。注意:任何內存中的RDD只要過了這個時間就會被清除掉。 |
spark.streaming.blockInterval | 200 | 從網絡中批量接受對象時的持續時間。 |
spark.task.maxFailures | 4 | task失敗重試次數 |