【譯】Spark官方文檔——Spark Configuration(Spark配置)

注重版權,尊重他人勞動
 
Spark主要提供三種位置配置系統
  • 環境變量:用來啓動Spark workers,能夠設置在你的驅動程序或者conf/spark-env.sh 腳本中;
  • java系統性能:能夠控制內部的配置參數,兩種設置方法:
    • 編程的方式(程序中在建立SparkContext以前,使用System.setProperty(「xx」,「xxx」)語句設置相應系統屬性值);
    • 在conf/spark-env.sh中配置環境變量SPARK_JAVA_OPTS。
  • 日誌配置:經過log4j.properties實習

 

1、環境變量html

spark安裝目錄下的conf/spark-env.sh腳本決定了如何初始化worker nodes的JVM,甚至決定了你在本地如何運行spark-shell。在Git庫中這個腳本默認是不存在的,可是你能夠本身建立它並經過複製con/spark-env.sh.template中的內容來配置,最後要確保你建立的文件可執行。java

在spark-env.sh中你至少有兩個變量要設置:node

  • SCALA_HOME,指向你的scala安裝路徑;或者是SCALA_LIBRARY_PATH指向scala library JARS所在的目錄(若是你是經過DEB或者RPM安裝的scala,他們是沒有SCALA_HOME的,可是他們的libraries是分離的,默認在/usr/share/java中查找scala-library.jar)
  • MESOS_NATIVE_LIBRARY,若是你要在Mesos上運行集羣的話
 
另外,還有其餘四個變量來控制執行。應該將他們設置在啓動驅動程序的環境中來取代設置在spark-env.sh,由於這樣這些設置能夠自動傳遞給workers。將他們設置在每一個做業中而不是spark-env.sh中,這樣確保了每一個做業有他們本身的配置。
  • SPARK_JAVA_ORTS,添加JVM選項。你能夠經過-D來獲取任何系統屬性;
  • SPARK_CLASS_PATH,添加元素到Spark的classpth中;
  • SPARK_LIBARAT_OATH,添加本地libraries的查找目錄;
  • SPARK_MEM,設置每一個節點所能使用的內存總量。他們應該和JVM‘s -Xmx選項的格式保持一致(e.g.300m或1g)。注意:這個選項將很快被棄用支持系統屬性spark.executor.memory,因此咱們推薦將它使用在新代碼中。
注意:若是你將他們設置在spark-env.sh中,他們將覆蓋用戶程序設定的值,這是不可取的。若是你喜歡,你能夠選擇在spark-env.sh設置他們僅當用戶程序沒有作任何設置時,例如:


2、系統屬性
經過設置系統屬性來配置Spark,你必須經過如下兩種方式中的任意一個來達到目的:if [ -z "$SPARK_JAVA_OPTS" ] ; then SPARK_JAVA_OPTS="-verbose:gc" fi
  • 在JVM中經過-D標誌(例如:java -Dspark.cores.max=5 MyProgram)
  • 在你的程序中建立SparkContext以前調用System.setProperty,以下:
     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失敗重試次數
 
 
3、配置日誌
Spark使用log4j來記錄。你能夠在conf目錄中添加log4j.properties文件來配置。一種方法是複製本地已存在的log4j.properties.template
相關文章
相關標籤/搜索