關於Spark 的一些調優選項(待完善)

各位看到的大俠們,,,,若是有什麼問題,不要拍磚,後期進行完善。謝謝協助完善。 java

幾個比較重要的配置屬性: web

   1.手動啓動集羣
數據庫


參數 含義
-i IP,--ip IP 要監聽的IP地址或者 DNS 機器名
-p PORT,--port PORT 要監聽的端口 (默認: master 7077 ;worker隨機)
--webui-port PORT web UI端口 (默認: master 8080, worker 8081)
-c CORES,--cores CORES

做業可用的CPU內核數量(默認: 全部可用);只在worker上 apache

-m MEM,--memory MEM 做業可以使用的內存容量,默認格式1000M或者 2G (默認:  全部RAM去掉給操做系統用的1 GB); 只在worker上。
-d DIR,--work-dir DIR

伸縮空間和日誌輸入的目錄路徑 服務器

(默認: SPARK_HOME/work); 只在worker上 網絡

    2.集羣啓動腳本 app


環境變量 含義
SPARK_MASTER_IP 綁定一個外部IP給master.
SPARK_MASTER_PORT 從另一個端口啓動master(默認: 7077)
SPARK_MASTER_WEBUI_PORT Master的web UI端口 (默認: 8080)
SPARK_WORKER_PORT 啓動Spark worker 的專用端口(默認:隨機)
SPARK_WORKER_DIR 伸縮空間和日誌輸入的目錄路徑(默認: SPARK_HOME/work);
SPARK_WORKER_CORES 做業可用的CPU內核數量(默認: 全部可用的);
SPARK_WORKER_MEMORY 做業可以使用的內存容量,默認格式1000M或者 2G (默認:  全部RAM去掉給操做系統用的1 GB);注意:每一個做業本身的內存空間由SPARK_MEM決定。
SPARK_WORKER_WEBUI_PORT worker 的web UI 啓動端口(默認: 8081)
SPARK_WORKER_INSTANCES 沒太機器上運行worker數量 (默認: 1). 當你有一個很是強大的計算機的時候和須要多個Spark worker進程的時候你能夠修改這個默認值大於1 . 若是你設置了這個值。要確保SPARK_WORKER_CORE 明確限制每個r worker的核心數, 不然每一個worker 將嘗試使用全部的核心
SPARK_DAEMON_MEMORY 分配給Spark master和 worker 守護進程的內存空間 (默認: 512m)
SPARK_DAEMON_JAVA_OPTS Spark master 和 worker守護進程的JVM 選項(默認: none)


//按期清理內存資源,這個值不能過小,若是後面的計算須要用到的數據被清除,會帶來其餘問題。同時,也是爲了防止內存溢出.主要出如今streaming模塊中。
spark.cleaner.ttl= ide


spark.home= 測試



//不進行序列化
@transient


//由Spark自行管理持久化RDD,Spark自行判斷哪些RDD是不常持有的,而後去序列化他們,能夠減GC的次數,並且下降Spark對內存的使用,
spark.streaming.unpersist=true ui






//若是該參數沒有配置,則默認實例化org.apache.spark.serializer.JavaSerializer對象。Spark Task 序列化配置。
spark.closure.serializer= org.apache.spark.serializer.JavaSerializer



//In Spark 1.0 and later spark.local.dir will be overridden by the value set by the cluster manager (via SPARK_LOCAL_DIRS in mesos/standalone and LOCAL_DIRS in YARN.  Spark 用於寫中間數據的目錄,其中包括:RDD Cache,Shufflte,Split,能夠配置多個目錄,中間用逗號分隔。
spark.local.dir=


//默認爲""
spark.kryo.classesToRegister




//默認爲:KryoSerializer
//org.apache.spark.serializer.JavaSerializer
spark.serializer=


// Distribution-defined classpath to add to processes
SPARK_DIST_CLASSPATH=


//This is deprecated in Spark 1.4+
// Please use spark {spark.reducer.maxMbInFlight} instead.
// 這個參數用於限制一個ReducerTask向其餘的Executor請求Shuffle數據時所佔用的最大內存數,尤爲是若是網卡是千兆和千兆如下的網卡時。
spark.reducer.maxSizeInFlight=


//默認值爲:host值。
SPARK_PUBLIC_DNS=


//SPARK_JAVA_OPTS was detected。
//This is deprecated in Spark 1.0+.
//Please instead use:
// - ./spark-submit with conf/spark-defaults.conf to set defaults for an application
// - ./spark-submit with --driver-java-options to set -X options for a driver
// - spark.executor.extraJavaOptions to set -X options for executors
// - SPARK_DAEMON_JAVA_OPTS to set java options for standalone daemons (master or worker)
SPARK_JAVA_OPTS=


//SPARK_CLASSPATH was detected。
//This is deprecated in Spark 1.0+.
//Please instead use:
// - ./spark-submit with --driver-class-path to augment the driver classpath
// - spark.executor.extraClassPath to augment the executor classpath
SPARK_CLASSPATH=











// Whether to compress RDD partitions that are stored serialized
spark.rdd.compress=false


// Validate memory fractions
spark.storage.memoryFraction
spark.shuffle.memoryFraction
spark.shuffle.safetyFraction
spark.storage.unrollFraction
spark.storage.safetyFraction


//shuffle過程當中,內存中數據的閥值
spark.shuffle.memoryFraction=

做爲一個保險係數下降實際Shuffle過程所須要的內存值

//做爲一個保險係數,下降實際shuffle過程當中須要的內存值

spark.shuffle.safetyFraction=


//默認值爲:null
spark.metrics.conf


//單位爲秒
spark.storage.cachedPeersTtl=60s


//subDirsPerTachyonDir
spark.externalBlockStore.subDirectories=64


//
spark.streaming.stopGracefullyOnShutdown=false



//////////////////////////////////////////////////////////////////////////////////////////////
// Broadcast 廣播
//////////////////////////////////////////////////////////////////////////////////////////////

//Spark 廣播實現類配置,默認爲TorrentBroadcastFactory,還有一個選項爲HttpBroadcastFactory。broadcast不會內存溢出,但會影響運行效率。
spark.broadcast.factory=org.apache.spark.broadcast.TorrentBroadcastFactory

//默認值爲4M .
//數據庫大小.blockifyObject 依據這個值來劃分數據塊大小
spark.broadcast.blockSize=4m



//  是否要壓縮序列化的RDD分區(好比, StorageLevel.MEMORY_ONLY_SER )。在消耗一點額外的CPU時間的代價下,能夠極大的提升減小空間的使用。
spark.broadcast.compress=true




//////////////////////////////////////////////////////////////////////////////////////////////
// Driver
//////////////////////////////////////////////////////////////////////////////////////////////


//driver主機地址端口
spark.driver.port


//driver主機地址
spark.driver.host


//Whether to consider jars provided by the user to have precedence over the Spark jars when loading user classes.
spark.driver.userClassPathFirst=


//
spark.driver.extraJavaOptions=


//
spark.driver.extraClassPath


//
spark.driver.extraLibraryPath




//從Spark1.2開始,該配置被 extraLibraryPath代替。
spark.driver.libraryPath=


//////////////////////////////////////////////////////////////////////////////////////////////
// Shuffle
//////////////////////////////////////////////////////////////////////////////////////////////
//默認爲sort方式。
//shuffle方式對照的類:
// hash -> org.apache.spark.shuffle.hash.HashShuffleManager
// sort -> org.apache.spark.shuffle.sort.SortShuffleManager
// tungsten-sort -> org.apache.spark.shuffle.unsafe.UnsafeShuffleManager
spark.shuffle.manager=sort


//默認值爲:netty
//shuffle的時候數據庫的傳輸方式配置
//如今內部支持兩種,NIO 和 Netty.
spark.shuffle.blockTransferService=netty


//是否壓縮存儲shuffle的輸出數據
spark.shuffle.compress=true

// 是否啓用shuffle輸出臨時文件溢出到磁盤。若是爲false,會有內存溢出的風險
// Whether to compress shuffle output temporarily spilled to disk
spark.shuffle.spill.compress=true


//
spark.shuffle.service.enabled=false


//該配置上爲了解決,shuffle過程當中,文件過多的問題。具體是否須要啓用,請根據測試後,再使用。
spark.shuffle.consolidateFiles=false


//
spark.shuffle.service.port=7337


//
spark.shuffle.sync=true


//This is deprecated in Spark 1.4+
// Please use spark {spark.shuffle.file.buffer.kb} instead.
//
spark.shuffle.file.buffer=



//////////////////////////////////////////////////////////////////////////////////////////////
// Scheduler
//////////////////////////////////////////////////////////////////////////////////////////////
//
spark.scheduler.mode=


// Submit tasks after maxRegisteredWaitingTime milliseconds
// if minRegisteredRatio has not yet been reached
spark.scheduler.maxRegisteredResourcesWaitingTime=30


// Submit tasks only after (registered resources / total expected resources)
// is equal to at least this value, that is double between 0 and 1.
spark.scheduler.minRegisteredResourcesRatio=0


// Periodically revive offers to allow delay scheduling to work,單位爲妙,默認爲1s.
spark.scheduler.revive.interval=1s



//////////////////////////////////////////////////////////////////////////////////////////////
// Executor
//////////////////////////////////////////////////////////////////////////////////////////////
//spark.executor.extraJavaOptions is not allowed to set Spark options。Set them directly on a SparkConf or in a properties file when using ./bin/spark-submit.
spark.executor.extraJavaOptions


//
spark.executor.extraClassPath


//spark.executor.extraJavaOptions is not allowed to alter memory settings。Use spark.executor.memory instead.
spark.executor.memory


//Whether to consider jars provided by the user to have precedence over the Spark jars when loading user classes.
spark.executor.userClassPathFirst=


//This is deprecated in Spark 1.3+
//Please use spark {spark.files.userClassPathFirst} instead.
spark.executor.userClassPathFirst


//This is deprecated in Spark 1.4+
// Please use spark {spark.executor.logs.rolling.size.maxBytes} instead.
//
spark.executor.logs.rolling.maxSize


//
spark.executor.port=0



//////////////////////////////////////////////////////////////////////////////////////////////
// History
//////////////////////////////////////////////////////////////////////////////////////////////
//This is deprecated in Spark 1.3+
//
// spark.history.fs.update.interval.seconds 1.4
// spark.history.fs.updateInterval 1.3
// spark.history.updateInterval 1.3
//此歷史服務器顯示的信息更新時間段。每個更新檢查在持久存儲中的事件日誌中所作的任何更改。
spark.history.fs.update.interval=10s




//This is deprecated in Spark 1.4+
// Please use spark {spark.history.fs.cleaner.interval.seconds} instead.
// 多少次對文件進行清理,纔會刪除文件。 僅刪除 文件都比spark.history.fs.cleaner.maxage大的Age.
spark.history.fs.cleaner.interval=1d




//This is deprecated in Spark 1.4+
// Please use spark {spark.history.fs.cleaner.maxAge.seconds} instead.
//當歷史清潔任務運行時,做業歷史文件會被刪除。
spark.history.fs.cleaner.maxAge=



//指定歷史服務器是否應該按期清理事件日誌。
spark.history.fs.cleaner.enabled=false


//歷史服務器的網絡端口
spark.history.ui.port
=18080

//包含應用程序事件日誌將載入歷史服務器的目錄,默認爲:file:/tmp/spark-events
spark.history.fs.logDirectory=file:/tmp/spark-events




//////////////////////////////////////////////////////////////////////////////////////////////
// Master
//////////////////////////////////////////////////////////////////////////////////////////////
//Master地址,默認爲localhost
SPARK_MASTER_HOST


//Master交互端口。默認爲:7077
SPARK_MASTER_PORT=7077


//Master Web UI 端口號。默認端口號爲:8080
SPARK_MASTER_WEBUI_PORT=8080






//////////////////////////////////////////////////////////////////////////////////////////////
// deploy
//////////////////////////////////////////////////////////////////////////////////////////////
//默認值爲:true; 它的用途是在standalone 模式下,節點的自由選擇,這樣能夠更好的進行數據本地性操做。若是配置爲false, 對於計算機中心的工做比較有效。
spark.deploy.spreadOut=true


//默認使用的core 數量爲機器全部的core.core數量必須大於1.
spark.deploy.defaultCores 或 spark.cores.max


//恢復模式默認爲:NONE
//Spark 1.4版本中提供了3種方式:
// ZOOKEEPER:org.apache.spark.deploy.master.ZooKeeperRecoveryModeFactory
// FILESYSTEM:org.apache.spark.deploy.master.FileSystemRecoveryModeFactory
// CUSTOMER:經過指定該值{spark.deploy.recoveryMode.factory}來反射實例化對象。
// 默認爲None方式
spark.deploy.recoveryMode=None


 //默認值爲:200
// 最多的應用程序來顯示。舊的應用程序將從用戶界面中刪除,以保持這個限制。默認顯示200個。
spark.deploy.retainedApplications=200



//默認值爲:200;Master節點中,保存最多的Driver記錄
spark.deploy.retainedDrivers=200


//////////////////////////////////////////////////////////////////////////////////////////////
// io
//////////////////////////////////////////////////////////////////////////////////////////////
//This is deprecated in Spark 1.4+
// Please use spark {spark.io.compression.snappy.block.size} instead.
//
spark.io.compression.snappy.blockSize


//This is deprecated in Spark 1.4+
// Please use spark {spark.io.compression.lz4.block.size} instead.
//
spark.io.compression.lz4.blockSize


//////////////////////////////////////////////////////////////////////////////////////////////
// rpc
//////////////////////////////////////////////////////////////////////////////////////////////
//This is deprecated in Spark 1.4+
// Please use spark {spark.akka.num.retries} instead.
//
spark.rpc.numRetries



//This is deprecated in Spark 1.4+
// Please use spark {spark.akka.askTimeout} instead.
//
spark.rpc.askTimeout


//This is deprecated in Spark 1.4+
// Please use spark {spark.akka.lookupTimeout} instead.
//
spark.rpc.lookupTimeout




//////////////////////////////////////////////////////////////////////////////////////////////
// kryoserializer
//////////////////////////////////////////////////////////////////////////////////////////////
//This is deprecated in Spark 1.4+
// Please use spark {spark.kryoserializer.buffer.mb} instead.
//
spark.kryoserializer.buffer



//This is deprecated in Spark 1.4+
// Please use spark {spark.kryoserializer.buffer.max.mb} instead.
//
spark.kryoserializer.buffer.max


//1.4
//Please use spark.kryoserializer.buffer instead. The default value for 
//spark.kryoserializer.buffer.mb was previously specified as '0.064'. Fractional values 
//are no longer accepted. To specify the equivalent now, one may use '64k'.
spark.kryoserializer.buffer.mb=



//////////////////////////////////////////////////////////////////////////////////////////////
// Worker
//////////////////////////////////////////////////////////////////////////////////////////////
//發送心跳,單位爲:秒
//Send a heartbeat every (heartbeat timeout) / 4 milliseconds
spark.worker.timeout


//默認值:true
spark.worker.cleanup.enabled


//How often worker will clean up old app folders.
//默認值:60 * 30
spark.worker.cleanup.interval


//TTL for app folders/data;  after TTL expires it will be cleaned up.
//默認時間間隔爲:7 * 24 * 3600
spark.worker.cleanup.appDataTtl


//指定Worker端口,默認爲:0
SPARK_WORKER_PORT=


//Worker節點運行使用的core數量.默認值爲本機全部可用的core數量。
SPARK_WORKER_CORES=


//Worker內存大小設置,在指定的時候,須要帶上單位(eg. 200M,1G)。
//默認值,首先是經過java.vendor來判斷了一個是不是IBM,而後轉換爲 M.正常獲取的值爲總可用內存大小 - 1024.不然爲1024M。
//若是內存大小小於1GB或者沒法得到該Worker主機內存大小,默認爲512M。
SPARK_WORKER_MEMORY=512


//Worker節點的WebUI 端口號。默認端口號爲:8081
SPARK_WORKER_WEBUI_PORT=8081


//Worker交互超時時間,默認爲60 × 1000 s
spark.worker.timeout=60


//默認值爲:15
spark.dead.worker.persistence=15






//////////////////////////////////////////////////////////////////////////////////////////////
// Yarn
//////////////////////////////////////////////////////////////////////////////////////////////
//默認值爲:true
spark.yarn.submit.waitAppCompletion=true


//
spark.yarn.maxAppAttempts=


//默認值爲true
SPARK_YARN_MODE=true


// Location of any user-defined Spark jars
spark.yarn.jar=


// Internal config to propagate the location of the user's jar to the driver/executors
spark.yarn.user.jar=


// Internal config to propagate the locations of any extra jars to add to the classpath of the executors
spark.yarn.secondary.jars=


//This is deprecated in Spark 1.4+
// Please use spark {spark.yarn.am.waitTime} instead.
//
spark.yarn.applicationMaster.waitTries


//link presented in the distributed cache to the destination
spark.yarn.keytab


//
spark.yarn.user.classpath.first=false


//Cleanup application staging directory.
spark.yarn.preserve.staging.files=false




//默認爲24×60分鐘。單位爲分鐘
spark.yarn.token.renewal.interval=24 * 60


//
spark.yarn.credentials.file=


//1.3
//Please use spark.{driver,executor}.userClassPathFirst instead.
spark.yarn.user.classpath.first=



//////////////////////////////////////////////////////////////////////////////////////////////
// Streaming
/////////////////////////////////////////////////////////////////////////////////////////////
/

//默認值爲true,表示使用ReliableKafkaReceiver 來接受消息,其中會使用WAL機制,來保證數據的可靠,也保證數據不丟失

spark.streaming.receiver.writeAheadLog.enable=true

相關文章
相關標籤/搜索