Spark配置參數(shù)詳解

Spark配置參數(shù)詳解

以下是整理的Spark中的一些配置參數(shù)坦康,官方文檔請參考Spark Configuration蜡秽。

Spark提供三個位置用來配置系統(tǒng):

Spark屬性:控制大部分的應(yīng)用程序參數(shù)致燥,可以用SparkConf對象或者Java系統(tǒng)屬性設(shè)置

環(huán)境變量:可以通過每個節(jié)點的conf/spark-env.sh腳本設(shè)置帖烘。例如IP地址、端口等信息

日志配置:可以通過log4j.properties配置

Spark屬性

Spark屬性控制大部分的應(yīng)用程序設(shè)置匆赃,并且為每個應(yīng)用程序分別配置它舶斧。這些屬性可以直接在SparkConf上配置尿赚,然后傳遞給SparkContext添忘。SparkConf允許你配置一些通用的屬性(如master URL采呐、應(yīng)用程序名稱等等)以及通過set()方法設(shè)置的任意鍵值對。例如搁骑,我們可以用如下方式創(chuàng)建一個擁有兩個線程的應(yīng)用程序懈万。


[plain]view plaincopy


val?conf?=?new?SparkConf()??

?????????????.setMaster("local[2]")??

?????????????.setAppName("CountingSheep")??

?????????????.set("spark.executor.memory",?"1g")??

val?sc?=?new?SparkContext(conf)??


動態(tài)加載Spark屬性

在一些情況下,你可能想在SparkConf中避免硬編碼確定的配置靶病。例如,你想用不同的master或者不同的內(nèi)存數(shù)運行相同的應(yīng)用程序口予。Spark允許你簡單地創(chuàng)建一個空conf娄周。


[plain]view plaincopy


val?sc?=?new?SparkContext(new?SparkConf())??


然后你在運行時設(shè)置變量:


[plain]view plaincopy


./bin/spark-submit?--name?"My?app"?--master?local[4]?--conf?spark.shuffle.spill=false??

??--conf?"spark.executor.extraJavaOptions=-XX:+PrintGCDetails?-XX:+PrintGCTimeStamps"?myApp.jar??


Spark shell和spark-submit工具支持兩種方式動態(tài)加載配置。第一種方式是命令行選項沪停,例如--master煤辨,如上面shell顯示的那樣。spark-submit可以接受任何Spark屬性木张,用--conf參數(shù)表示众辨。但是那些參與Spark應(yīng)用程序啟動的屬性要用特定的參數(shù)表示。運行./bin/spark-submit --help將會顯示選項的整個列表舷礼。

bin/spark-submit也會從conf/spark-defaults.conf中讀取配置選項鹃彻,這個配置文件中,每一行都包含一對以空格或者等號分開的鍵和值妻献。例如:


[plain]view plaincopy


spark.master????????????spark://5.6.7.8:7077??

spark.executor.memory???512m??

spark.eventLog.enabled??true??

spark.serializer????????org.apache.spark.serializer.KryoSerializer??


任何標簽指定的值或者在配置文件中的值將會傳遞給應(yīng)用程序蛛株,并且通過SparkConf合并這些值团赁。在SparkConf上設(shè)置的屬性具有最高的優(yōu)先級,其次是傳遞給spark-submit或者spark-shell的屬性值谨履,最后是spark-defaults.conf文件中的屬性值欢摄。

優(yōu)先級順序:


[plain]view plaincopy


SparkConf?>?CLI?>?spark-defaults.conf??


查看Spark屬性

在http://<driver>:4040上的應(yīng)用程序Web UI在Environment標簽中列出了所有的Spark屬性。這對你確保設(shè)置的屬性的正確性是很有用的笋粟。

注意:只有通過spark-defaults.conf, SparkConf以及命令行直接指定的值才會顯示怀挠。對于其它的配置屬性,你可以認為程序用到了默認的值害捕。

可用的屬性

控制內(nèi)部設(shè)置的大部分屬性都有合理的默認值绿淋,一些最通用的選項設(shè)置如下:


應(yīng)用程序?qū)傩?/p>

屬性名稱默認值含義

spark.app.name(none)你的應(yīng)用程序的名字。這將在UI和日志數(shù)據(jù)中出現(xiàn)

spark.driver.cores1driver程序運行需要的cpu內(nèi)核數(shù)

spark.driver.maxResultSize1g每個Spark action(如collect)所有分區(qū)的序列化結(jié)果的總大小限制吨艇。設(shè)置的值應(yīng)該不小于1m躬它,0代表沒有限制。如果總大小超過這個限制东涡,程序?qū)K止冯吓。大的限制值可能導致driver出現(xiàn)內(nèi)存溢出錯誤(依賴于spark.driver.memory和JVM中對象的內(nèi)存消耗)。

spark.driver.memory512mdriver進程使用的內(nèi)存數(shù)

spark.executor.memory512m每個executor進程使用的內(nèi)存數(shù)疮跑。和JVM內(nèi)存串擁有相同的格式(如512m,2g)

spark.extraListeners(none)注冊監(jiān)聽器组贺,需要實現(xiàn)SparkListener

spark.local.dir/tmpSpark中暫存空間的使用目錄。在Spark1.0以及更高的版本中祖娘,這個屬性被SPARK_LOCAL_DIRS(Standalone, Mesos)和LOCAL_DIRS(YARN)環(huán)境變量覆蓋失尖。

spark.logConffalse當SparkContext啟動時,將有效的SparkConf記錄為INFO渐苏。

spark.master(none)集群管理器連接的地方


運行環(huán)境

屬性名稱默認值含義

spark.driver.extraClassPath(none)附加到driver的classpath的額外的classpath實體掀潮。

spark.driver.extraJavaOptions(none)傳遞給driver的JVM選項字符串。例如GC設(shè)置或者其它日志設(shè)置琼富。注意仪吧,在這個選項中設(shè)置Spark屬性或者堆大小是不合法的。Spark屬性需要用--driver-class-path設(shè)置鞠眉。

spark.driver.extraLibraryPath(none)指定啟動driver的JVM時用到的庫路徑

spark.driver.userClassPathFirstfalse(實驗性)當在driver中加載類時薯鼠,是否用戶添加的jar比Spark自己的jar優(yōu)先級高。這個屬性可以降低Spark依賴和用戶依賴的沖突械蹋。它現(xiàn)在還是一個實驗性的特征出皇。

spark.executor.extraClassPath(none)附加到executors的classpath的額外的classpath實體。這個設(shè)置存在的主要目的是Spark與舊版本的向后兼容問題哗戈。用戶一般不用設(shè)置這個選項

spark.executor.extraJavaOptions(none)傳遞給executors的JVM選項字符串郊艘。例如GC設(shè)置或者其它日志設(shè)置。注意,在這個選項中設(shè)置Spark屬性或者堆大小是不合法的暇仲。Spark屬性需要用SparkConf對象或者spark-submit腳本用到的spark-defaults.conf文件設(shè)置步做。堆內(nèi)存可以通過spark.executor.memory設(shè)置

spark.executor.extraLibraryPath(none)指定啟動executor的JVM時用到的庫路徑

spark.executor.logs.rolling.maxRetainedFiles(none)設(shè)置被系統(tǒng)保留的最近滾動日志文件的數(shù)量。更老的日志文件將被刪除奈附。默認沒有開啟全度。

spark.executor.logs.rolling.size.maxBytes(none)executor日志的最大滾動大小。默認情況下沒有開啟斥滤。值設(shè)置為字節(jié)

spark.executor.logs.rolling.strategy(none)設(shè)置executor日志的滾動(rolling)策略将鸵。默認情況下沒有開啟∮悠模可以配置為time和size顶掉。對于time,用spark.executor.logs.rolling.time.interval設(shè)置滾動間隔挑胸;對于size痒筒,用spark.executor.logs.rolling.size.maxBytes設(shè)置最大的滾動大小

spark.executor.logs.rolling.time.intervaldailyexecutor日志滾動的時間間隔。默認情況下沒有開啟茬贵。合法的值是daily,?hourly,?minutely以及任意的秒簿透。

spark.files.userClassPathFirstfalse(實驗性)當在Executors中加載類時,是否用戶添加的jar比Spark自己的jar優(yōu)先級高解藻。這個屬性可以降低Spark依賴和用戶依賴的沖突老充。它現(xiàn)在還是一個實驗性的特征。

spark.python.worker.memory512m在聚合期間螟左,每個python worker進程使用的內(nèi)存數(shù)啡浊。在聚合期間,如果內(nèi)存超過了這個限制胶背,它將會將數(shù)據(jù)塞進磁盤中

spark.python.profilefalse在Python worker中開啟profiling巷嚣。通過sc.show_profiles()展示分析結(jié)果∏鳎或者在driver退出前展示分析結(jié)果廷粒。可以通過sc.dump_profiles(path)將結(jié)果dump到磁盤中砸抛。如果一些分析結(jié)果已經(jīng)手動展示,那么在driver退出前树枫,它們再不會自動展示

spark.python.profile.dump(none)driver退出前保存分析結(jié)果的dump文件的目錄直焙。每個RDD都會分別dump一個文件∩扒幔可以通過ptats.Stats()加載這些文件奔誓。如果指定了這個屬性,分析結(jié)果不會自動展示

spark.python.worker.reusetrue是否重用python worker。如果是厨喂,它將使用固定數(shù)量的Python workers和措,而不需要為每個任務(wù)fork()一個Python進程。如果有一個非常大的廣播蜕煌,這個設(shè)置將非常有用派阱。因為,廣播不需要為每個任務(wù)從JVM到Python worker傳遞一次

spark.executorEnv.[EnvironmentVariableName](none)通過EnvironmentVariableName添加指定的環(huán)境變量到executor進程斜纪。用戶可以指定多個EnvironmentVariableName贫母,設(shè)置多個環(huán)境變量

spark.mesos.executor.homedriver side SPARK_HOME設(shè)置安裝在Mesos的executor上的Spark的目錄。默認情況下盒刚,executors將使用driver的Spark本地(home)目錄腺劣,這個目錄對它們不可見。注意涡上,如果沒有通過?spark.executor.uri指定Spark的二進制包吓懈,這個設(shè)置才起作用

spark.mesos.executor.memoryOverheadexecutor memory * 0.07, 最小384m這個值是spark.executor.memory的補充歼冰。它用來計算mesos任務(wù)的總內(nèi)存甘穿。另外,有一個7%的硬編碼設(shè)置。最后的值將選擇spark.mesos.executor.memoryOverhead或者spark.executor.memory的7%二者之間的大者


Shuffle行為

屬性名稱默認值含義

spark.reducer.maxMbInFlight48從遞歸任務(wù)中同時獲取的map輸出數(shù)據(jù)的最大大小(mb)。因為每一個輸出都需要我們創(chuàng)建一個緩存用來接收寝蹈,這個設(shè)置代表每個任務(wù)固定的內(nèi)存上限,所以除非你有更大的內(nèi)存,將其設(shè)置小一點

spark.shuffle.blockTransferServicenetty實現(xiàn)用來在executor直接傳遞shuffle和緩存塊。有兩種可用的實現(xiàn):netty和nio峭判。基于netty的塊傳遞在具有相同的效率情況下更簡單

spark.shuffle.compresstrue是否壓縮map操作的輸出文件。一般情況下,這是一個好的選擇。

spark.shuffle.consolidateFilesfalse如果設(shè)置為”true”指厌,在shuffle期間,合并的中間文件將會被創(chuàng)建。創(chuàng)建更少的文件可以提供文件系統(tǒng)的shuffle的效 率。這些shuffle都伴隨著大量遞歸任務(wù)畅买。當用ext4和dfs文件系統(tǒng)時,推薦設(shè)置為”true”。在ext3中,因為文件系統(tǒng)的限制乏盐,這個選項可 能機器(大于8核)降低效率

spark.shuffle.file.buffer.kb32每個shuffle文件輸出流內(nèi)存內(nèi)緩存的大小,單位是kb。這個緩存減少了創(chuàng)建只中間shuffle文件中磁盤搜索和系統(tǒng)訪問的數(shù)量

spark.shuffle.io.maxRetries3Netty only黔酥,自動重試次數(shù)

spark.shuffle.io.numConnectionsPerPeer1Netty only

spark.shuffle.io.preferDirectBufstrueNetty only

spark.shuffle.io.retryWait5Netty only

spark.shuffle.managersort它的實現(xiàn)用于shuffle數(shù)據(jù)翘瓮。有兩種可用的實現(xiàn):sort和hash卿城∶阋基于sort的shuffle有更高的內(nèi)存使用率

spark.shuffle.memoryFraction0.2如果spark.shuffle.spill為 true枢纠,shuffle中聚合和合并組操作使用的java堆內(nèi)存占總內(nèi)存的比重脓斩。在任何時候燎猛,shuffles使用的所有內(nèi)存內(nèi)maps的集合大小都受 這個限制的約束昭卓。超過這個限制室奏,spilling數(shù)據(jù)將會保存到磁盤上。如果spilling太過頻繁,考慮增大這個值

spark.shuffle.sort.bypassMergeThreshold200(Advanced) In the sort-based shuffle manager, avoid merge-sorting data if there is no map-side aggregation and there are at most this many reduce partitions

spark.shuffle.spilltrue如果設(shè)置為”true”晚顷,通過將多出的數(shù)據(jù)寫入磁盤來限制內(nèi)存數(shù)栓袖。通過spark.shuffle.memoryFraction來指定spilling的閾值

spark.shuffle.spill.compresstrue在shuffle時,是否將spilling的數(shù)據(jù)壓縮。壓縮算法通過spark.io.compression.codec指定癞谒。


Spark UI

屬性名稱默認值含義

spark.eventLog.compressfalse是否壓縮事件日志。需要spark.eventLog.enabled為true

spark.eventLog.dirfile:///tmp/spark-eventsSpark事件日志記錄的基本目錄。在這個基本目錄下翎卓,Spark為每個應(yīng)用程序創(chuàng)建一個子目錄逗扒。各個應(yīng)用程序記錄日志到直到的目錄蛮拔。用戶可能想設(shè)置這為統(tǒng)一的地點肛跌,像HDFS一樣稳捆,所以歷史文件可以通過歷史服務(wù)器讀取

spark.eventLog.enabledfalse是否記錄Spark的事件日志。這在應(yīng)用程序完成后眶熬,重新構(gòu)造web UI是有用的

spark.ui.killEnabledtrue運行在web UI中殺死stage和相應(yīng)的job

spark.ui.port4040你的應(yīng)用程序dashboard的端口。顯示內(nèi)存和工作量數(shù)據(jù)

spark.ui.retainedJobs1000在垃圾回收之前,Spark UI和狀態(tài)API記住的job數(shù)

spark.ui.retainedStages1000在垃圾回收之前朝捆,Spark UI和狀態(tài)API記住的stage數(shù)


壓縮和序列化

屬性名稱默認值含義

spark.broadcast.compresstrue在發(fā)送廣播變量之前是否壓縮它

spark.closure.serializerorg.apache.

spark.serializer.

JavaSerializer

閉包用到的序列化類蝴乔。目前只支持java序列化器

spark.io.compression.codecsnappy壓縮諸如RDD分區(qū)挖腰、廣播變量、shuffle輸出等內(nèi)部數(shù)據(jù)的編碼解碼器练湿。默認情況下猴仑,Spark提供了三種選擇:lz4肥哎、lzf和snappy宁脊,你也可以用完整的類名來制定断国。

spark.io.compression.lz4.block.size32768LZ4壓縮中用到的塊大小。降低這個塊的大小也會降低shuffle內(nèi)存使用率

spark.io.compression.snappy.block.size32768Snappy壓縮中用到的塊大小榆苞。降低這個塊的大小也會降低shuffle內(nèi)存使用率

spark.kryo.classesToRegister(none)如果你用Kryo序列化稳衬,給定的用逗號分隔的自定義類名列表表示要注冊的類

spark.kryo.referenceTrackingtrue當用Kryo序列化時,跟蹤是否引用同一對象坐漏。如果你的對象圖有環(huán)薄疚,這是必須的設(shè)置。如果他們包含相同對象的多個副本赊琳,這個設(shè)置對效率是有用的街夭。如果你知道不在這兩個場景,那么可以禁用它以提高效率

spark.kryo.registrationRequiredfalse是否需要注冊為Kyro可用躏筏。如果設(shè)置為true板丽,然后如果一個沒有注冊的類序列化,Kyro會拋出異常趁尼。如果設(shè)置為false埃碱,Kryo將會同時寫每個對象和其非注冊類名。寫類名可能造成顯著地性能瓶頸酥泞。

spark.kryo.registrator(none)如果你用Kryo序列化砚殿,設(shè)置這個類去注冊你的自定義類。如果你需要用自定義的方式注冊你的類芝囤,那么這個屬性是有用的似炎。否則spark.kryo.classesToRegister會更簡單。它應(yīng)該設(shè)置一個繼承自KryoRegistrator的類

spark.kryoserializer.buffer.max.mb64Kryo序列化緩存允許的最大值悯姊。這個值必須大于你嘗試序列化的對象

spark.kryoserializer.buffer.mb0.064Kyro序列化緩存的大小羡藐。這樣worker上的每個核都有一個緩存。如果有需要悯许,緩存會漲到spark.kryoserializer.buffer.max.mb設(shè)置的值那么大传睹。

spark.rdd.compresstrue是否壓縮序列化的RDD分區(qū)。在花費一些額外的CPU時間的同時節(jié)省大量的空間

spark.serializerorg.apache.

spark.serializer.

JavaSerializer

序列化對象使用的類岸晦。默認的Java序列化類可以序列化任何可序列化的java對象但是它很慢欧啤。所有我們建議用org.apache.spark.serializer.KryoSerializer

spark.serializer.objectStreamReset100當用org.apache.spark.serializer.JavaSerializer序列化時,序列化器通過緩存對象防止寫多余的數(shù)據(jù)启上,然而這會造成這些對象的垃圾回收停止邢隧。通過請求’reset’,你從序列化器中flush這些信息并允許收集老的數(shù)據(jù)冈在。為了關(guān)閉這個周期性的reset倒慧,你可以將值設(shè)為-1。默認情況下,每一百個對象reset一次


運行時行為

屬性名稱默認值含義

spark.broadcast.blockSize4096TorrentBroadcastFactory傳輸?shù)膲K大小纫谅,太大值會降低并發(fā)炫贤,太小的值會出現(xiàn)性能瓶頸

spark.broadcast.factoryorg.apache.spark.

broadcast.TorrentBroadcastFactory

broadcast實現(xiàn)類

spark.cleaner.ttl(infinite)spark記錄任何元數(shù)據(jù)(stages生成、task生成等)的持續(xù)時間付秕。定期清理可以確保將超期的元數(shù)據(jù)丟棄兰珍,這在運行長時間任務(wù)是很有用的,如運行7*24的sparkstreaming任務(wù)询吴。RDD持久化在內(nèi)存中的超期數(shù)據(jù)也會被清理

spark.default.parallelism本地模式:機器核數(shù)掠河;Mesos:8;其他:max(executor的core猛计,2)如果用戶不設(shè)置唠摹,系統(tǒng)使用集群中運行shuffle操作的默認任務(wù)數(shù)(groupByKey、 reduceByKey等)

spark.executor.heartbeatInterval10000executor 向 the driver 匯報心跳的時間間隔奉瘤,單位毫秒

spark.files.fetchTimeout60driver 程序獲取通過SparkContext.addFile()添加的文件時的超時時間勾拉,單位秒

spark.files.useFetchCachetrue獲取文件時是否使用本地緩存

spark.files.overwritefalse調(diào)用SparkContext.addFile()時候是否覆蓋文件

spark.hadoop.cloneConffalse每個task是否克隆一份hadoop的配置文件

spark.hadoop.validateOutputSpecstrue是否校驗輸出

spark.storage.memoryFraction0.6Spark內(nèi)存緩存的堆大小占用總內(nèi)存比例,該值不能大于老年代內(nèi)存大小盗温,默認值為0.6藕赞,但是,如果你手動設(shè)置老年代大小肌访,你可以增加該值

spark.storage.memoryMapThreshold2097152內(nèi)存塊大小

spark.storage.unrollFraction0.2Fraction of spark.storage.memoryFraction to use for unrolling blocks in memory.

spark.tachyonStore.baseDirSystem.getProperty(“java.io.tmpdir”)Tachyon File System臨時目錄

spark.tachyonStore.urltachyon://localhost:19998Tachyon File System URL



網(wǎng)絡(luò)

屬性名稱默認值含義

spark.driver.host(local hostname)driver監(jiān)聽的主機名或者IP地址找默。這用于和executors以及獨立的master通信

spark.driver.port(random)driver監(jiān)聽的接口艇劫。這用于和executors以及獨立的master通信

spark.fileserver.port(random)driver的文件服務(wù)器監(jiān)聽的端口

spark.broadcast.port(random)driver的HTTP廣播服務(wù)器監(jiān)聽的端口

spark.replClassServer.port(random)driver的HTTP類服務(wù)器監(jiān)聽的端口

spark.blockManager.port(random)塊管理器監(jiān)聽的端口吼驶。這些同時存在于driver和executors

spark.executor.port(random)executor監(jiān)聽的端口。用于與driver通信

spark.port.maxRetries16當綁定到一個端口店煞,在放棄前重試的最大次數(shù)

spark.akka.frameSize10在”control plane”通信中允許的最大消息大小蟹演。如果你的任務(wù)需要發(fā)送大的結(jié)果到driver中,調(diào)大這個值

spark.akka.threads4通信的actor線程數(shù)顷蟀。當driver有很多CPU核時酒请,調(diào)大它是有用的

spark.akka.timeout100Spark節(jié)點之間的通信超時。單位是秒

spark.akka.heartbeat.pauses6000This is set to a larger value to disable failure detector that comes inbuilt akka. It can be enabled again, if you plan to use this feature (Not recommended). Acceptable heart beat pause in seconds for akka. This can be used to control sensitivity to gc pauses. Tune this in combination of?spark.akka.heartbeat.interval?and?spark.akka.failure-detector.threshold?if you need to.

spark.akka.failure-detector.threshold300.0This is set to a larger value to disable failure detector that comes inbuilt akka. It can be enabled again, if you plan to use this feature (Not recommended). This maps to akka’s?akka.remote.transport-failure-detector.threshold. Tune this in combination of?spark.akka.heartbeat.pauses?and?spark.akka.heartbeat.interval?if you need to.

spark.akka.heartbeat.interval1000This is set to a larger value to disable failure detector that comes inbuilt akka. It can be enabled again, if you plan to use this feature (Not recommended). A larger interval value in seconds reduces network overhead and a smaller value ( ~ 1 s) might be more informative for akka’s failure detector. Tune this in combination of?spark.akka.heartbeat.pauses?and?spark.akka.failure-detector.threshold?if you need to. Only positive use case for using failure detector can be, a sensistive failure detector can help evict rogue executors really quick. However this is usually not the case as gc pauses and network lags are expected in a real Spark cluster. Apart from that enabling this leads to a lot of exchanges of heart beats between nodes leading to flooding the network with those.


調(diào)度相關(guān)屬性

屬性名稱默認值含義

spark.task.cpus1為每個任務(wù)分配的內(nèi)核數(shù)

spark.task.maxFailures4Task的最大重試次數(shù)

spark.scheduler.modeFIFOSpark的任務(wù)調(diào)度模式鸣个,還有一種Fair模式

spark.cores.max?當應(yīng)用程序運行在Standalone集群或者粗粒度共享模式Mesos集群時羞反,應(yīng)用程序向集群請求的最大CPU內(nèi)核總數(shù)(不是指每 臺機器,而是整個集群)囤萤。如果不設(shè)置昼窗,對于Standalone集群將使用spark.deploy.defaultCores中數(shù)值,而Mesos將使 用集群中可用的內(nèi)核

spark.mesos.coarseFalse如果設(shè)置為true涛舍,在Mesos集群中運行時使用粗粒度共享模式

spark.speculationFalse以下幾個參數(shù)是關(guān)于Spark推測執(zhí)行機制的相關(guān)參數(shù)澄惊。此參數(shù)設(shè)定是否使用推測執(zhí)行機制,如果設(shè)置為true則spark使用推測執(zhí)行機制,對于Stage中拖后腿的Task在其他節(jié)點中重新啟動掸驱,并將最先完成的Task的計算結(jié)果最為最終結(jié)果

spark.speculation.interval100Spark多長時間進行檢查task運行狀態(tài)用以推測肛搬,以毫秒為單位

spark.speculation.quantile?推測啟動前,Stage必須要完成總Task的百分比

spark.speculation.multiplier1.5比已完成Task的運行速度中位數(shù)慢多少倍才啟用推測

spark.locality.wait3000以下幾個參數(shù)是關(guān)于Spark數(shù)據(jù)本地性的毕贼。本參數(shù)是以毫秒為單位啟動本地數(shù)據(jù)task的等待時間温赔,如果超出就啟動下一本地優(yōu)先級別 的task。該設(shè)置同樣可以應(yīng)用到各優(yōu)先級別的本地性之間(本地進程 -> 本地節(jié)點 -> 本地機架 -> 任意節(jié)點 )帅刀,當然让腹,也可以通過spark.locality.wait.node等參數(shù)設(shè)置不同優(yōu)先級別的本地性

spark.locality.wait.processspark.locality.wait本地進程級別的本地等待時間

spark.locality.wait.nodespark.locality.wait本地節(jié)點級別的本地等待時間

spark.locality.wait.rackspark.locality.wait本地機架級別的本地等待時間

spark.scheduler.revive.interval1000復活重新獲取資源的Task的最長時間間隔(毫秒),發(fā)生在Task因為本地資源不足而將資源分配給其他Task運行后進入等待時間扣溺,如果這個等待時間內(nèi)重新獲取足夠的資源就繼續(xù)計算


Dynamic Allocation

屬性名稱默認值含義????????

spark.dynamicAllocation.enabledfalse是否開啟動態(tài)資源搜集

spark.dynamicAllocation.executorIdleTimeout600?

spark.dynamicAllocation.initialExecutorsspark.dynamicAllocation.minExecutors?

spark.dynamicAllocation.maxExecutorsInteger.MAX_VALUE?

spark.dynamicAllocation.minExecutors0?

spark.dynamicAllocation.schedulerBacklogTimeout5?

spark.dynamicAllocation.sustainedSchedulerBacklogTimeoutschedulerBacklogTimeout?


安全

屬性名稱默認值含義

spark.authenticatefalse是否Spark驗證其內(nèi)部連接骇窍。如果不是運行在YARN上,請看spark.authenticate.secret

spark.authenticate.secretNone設(shè)置Spark兩個組件之間的密匙驗證锥余。如果不是運行在YARN上腹纳,但是需要驗證,這個選項必須設(shè)置

spark.core.connection.auth.wait.timeout30連接時等待驗證的實際驱犹。單位為秒

spark.core.connection.ack.wait.timeout60連接等待回答的時間嘲恍。單位為秒。為了避免不希望的超時雄驹,你可以設(shè)置更大的值

spark.ui.filtersNone應(yīng)用到Spark web UI的用于過濾類名的逗號分隔的列表佃牛。過濾器必須是標準的javax servlet Filter。通過設(shè)置java系統(tǒng)屬性也可以指定每個過濾器的參數(shù)医舆。spark..params='param1=value1,param2=value2'俘侠。例如-Dspark.ui.filters=com.test.filter1、-Dspark.com.test.filter1.params='param1=foo,param2=testing'

spark.acls.enablefalse是否開啟Spark acls蔬将。如果開啟了爷速,它檢查用戶是否有權(quán)限去查看或修改job。UI利用使用過濾器驗證和設(shè)置用戶

spark.ui.view.aclsempty逗號分隔的用戶列表霞怀,列表中的用戶有查看Spark web UI的權(quán)限惫东。默認情況下,只有啟動Spark job的用戶有查看權(quán)限

spark.modify.aclsempty逗號分隔的用戶列表毙石,列表中的用戶有修改Spark job的權(quán)限廉沮。默認情況下,只有啟動Spark job的用戶有修改權(quán)限

spark.admin.aclsempty逗號分隔的用戶或者管理員列表徐矩,列表中的用戶或管理員有查看和修改所有Spark job的權(quán)限滞时。如果你運行在一個共享集群,有一組管理員或開發(fā)者幫助debug丧蘸,這個選項有用


加密

屬性名稱默認值含義

spark.ssl.enabledfalse是否開啟ssl

spark.ssl.enabledAlgorithmsEmptyJVM支持的加密算法列表漂洋,逗號分隔

spark.ssl.keyPasswordNone?

spark.ssl.keyStoreNone?

spark.ssl.keyStorePasswordNone?

spark.ssl.protocolNone?

spark.ssl.trustStoreNone?

spark.ssl.trustStorePasswordNone?


Spark Streaming

屬性名稱默認值含義

spark.streaming.blockInterval200在這個時間間隔(ms)內(nèi)遥皂,通過Spark Streaming receivers接收的數(shù)據(jù)在保存到Spark之前,chunk為數(shù)據(jù)塊刽漂。推薦的最小值為50ms

spark.streaming.receiver.maxRateinfinite每秒鐘每個receiver將接收的數(shù)據(jù)的最大記錄數(shù)演训。有效的情況下,每個流將消耗至少這個數(shù)目的記錄贝咙。設(shè)置這個配置為0或者-1將會不作限制

spark.streaming.receiver.writeAheadLogs.enablefalseEnable write ahead logs for receivers. All the input data received through receivers will be saved to write ahead logs that will allow it to be recovered after driver failures

spark.streaming.unpersisttrue強制通過Spark Streaming生成并持久化的RDD自動從Spark內(nèi)存中非持久化样悟。通過Spark Streaming接收的原始輸入數(shù)據(jù)也將清除。設(shè)置這個屬性為false允許流應(yīng)用程序訪問原始數(shù)據(jù)和持久化RDD庭猩,因為它們沒有被自動清除窟她。但是它會 造成更高的內(nèi)存花費


集群管理?

Spark On YARN

屬性名稱默認值含義

spark.yarn.am.memory512mclient 模式時,am的內(nèi)存大邪震糖;cluster模式時,使用spark.driver.memory變量

spark.driver.cores1claster模式時趴腋,driver使用的cpu核數(shù)吊说,這時候driver運行在am中,其實也就是am和核數(shù)优炬;client模式時颁井,使用spark.yarn.am.cores變量

spark.yarn.am.cores1client 模式時,am的cpu核數(shù)

spark.yarn.am.waitTime100000啟動時等待時間

spark.yarn.submit.file.replication3應(yīng)用程序上傳到HDFS的文件的副本數(shù)

spark.yarn.preserve.staging.filesFalse若為true蠢护,在job結(jié)束后雅宾,將stage相關(guān)的文件保留而不是刪除

spark.yarn.scheduler.heartbeat.interval-ms5000Spark AppMaster發(fā)送心跳信息給YARN RM的時間間隔

spark.yarn.max.executor.failures2倍于executor數(shù)礁哄,最小值3導致應(yīng)用程序宣告失敗的最大executor失敗次數(shù)

spark.yarn.applicationMaster.waitTries10RM等待Spark AppMaster啟動重試次數(shù)讽坏,也就是SparkContext初始化次數(shù)赊颠。超過這個數(shù)值惧所,啟動失敗

spark.yarn.historyServer.address?Spark history server的地址(不要加?http://)。這個地址會在Spark應(yīng)用程序完成后提交給YARN RM赶促,然后RM將信息從RM UI寫到history server UI上。

spark.yarn.dist.archives(none)?

spark.yarn.dist.files(none)?

spark.executor.instances2executor實例個數(shù)

spark.yarn.executor.memoryOverheadexecutorMemory * 0.07, with minimum of 384executor的堆內(nèi)存大小設(shè)置

spark.yarn.driver.memoryOverheaddriverMemory * 0.07, with minimum of 384driver的堆內(nèi)存大小設(shè)置

spark.yarn.am.memoryOverheadAM memory * 0.07, with minimum of 384am的堆內(nèi)存大小設(shè)置蘸劈,在client模式時設(shè)置

spark.yarn.queuedefault使用yarn的隊列

spark.yarn.jar(none)?

spark.yarn.access.namenodes(none)?

spark.yarn.appMasterEnv.[EnvironmentVariableName](none)設(shè)置am的環(huán)境變量

spark.yarn.containerLauncherMaxThreads25am啟動executor的最大線程數(shù)

spark.yarn.am.extraJavaOptions(none)?

spark.yarn.maxAppAttemptsyarn.resourcemanager.am.max-attempts in YARNam重試次數(shù)

Spark on Mesos

使用較少,參考Running Spark on Mesos尊沸。

Spark Standalone Mode

參考Spark Standalone Mode威沫。

Spark History Server

當你運行Spark Standalone Mode或者Spark on Mesos模式時,你可以通過Spark History Server來查看job運行情況洼专。

Spark History Server的環(huán)境變量:

屬性名稱含義

SPARK_DAEMON_MEMORYMemory to allocate to the history server (default: 512m).

SPARK_DAEMON_JAVA_OPTSJVM options for the history server (default: none).

SPARK_PUBLIC_DNS?

SPARK_HISTORY_OPTS配置 spark.history.* 屬性

Spark History Server的屬性:

屬性名稱默認含義

spark.history.providerorg.apache.spark.deploy.history.FsHistoryProvide應(yīng)用歷史后端實現(xiàn)的類名棒掠。 目前只有一個實現(xiàn), 由Spark提供, 它查看存儲在文件系統(tǒng)里面的應(yīng)用日志

spark.history.fs.logDirectoryfile:/tmp/spark-events?

spark.history.updateInterval10以秒為單位,多長時間Spark history server顯示的信息進行更新屁商。每次更新都會檢查持久層事件日志的任何變化烟很。

spark.history.retainedApplications50在Spark history server上顯示的最大應(yīng)用程序數(shù)量,如果超過這個值,舊的應(yīng)用程序信息將被刪除雾袱。

spark.history.ui.port18080官方版本中恤筛,Spark history server的默認訪問端口

spark.history.kerberos.enabledfalse是否使用kerberos方式登錄訪問history server,對于持久層位于安全集群的HDFS上是有用的芹橡。如果設(shè)置為true毒坛,就要配置下面的兩個屬性。

spark.history.kerberos.principal空用于Spark history server的kerberos主體名稱

spark.history.kerberos.keytab空用于Spark history server的kerberos keytab文件位置

spark.history.ui.acls.enablefalse授權(quán)用戶查看應(yīng)用程序信息的時候是否檢查acl林说。如果啟用煎殷,只有應(yīng)用程序所有者和spark.ui.view.acls指定的用戶可以查看應(yīng)用程序信息;如果禁用,不做任何檢查腿箩。


環(huán)境變量

通過環(huán)境變量配置確定的Spark設(shè)置豪直。環(huán)境變量從Spark安裝目錄下的conf/spark-env.sh腳本讀取(或者windows的conf/spark-env.cmd)珠移。在獨立的或者Mesos模式下顶伞,這個文件可以給機器確定的信息,如主機名剑梳。當運行本地應(yīng)用程序或者提交腳本時唆貌,它也起作用。

注意垢乙,當Spark安裝時锨咙,conf/spark-env.sh默認是不存在的。你可以復制conf/spark-env.sh.template創(chuàng)建它追逮。

可以在spark-env.sh中設(shè)置如下變量:

環(huán)境變量含義

JAVA_HOMEJava安裝的路徑

PYSPARK_PYTHONPySpark用到的Python二進制執(zhí)行文件路徑

SPARK_LOCAL_IP機器綁定的IP地址

SPARK_PUBLIC_DNS你Spark應(yīng)用程序通知給其他機器的主機名

除了以上這些酪刀,Sparkstandalone cluster scripts也可以設(shè)置一些選項。例如每臺機器使用的核數(shù)以及最大內(nèi)存钮孵。

因為spark-env.sh是shell腳本骂倘,其中的一些可以以編程方式設(shè)置。例如巴席,你可以通過特定的網(wǎng)絡(luò)接口計算SPARK_LOCAL_IP历涝。


配置日志

Spark用log4jlogging。你可以通過在conf目錄下添加log4j.properties文件來配置漾唉。一種方法是復制log4j.properties.template文件荧库。


轉(zhuǎn)自:https://www.cnblogs.com/native-hadoop/p/11642835.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赵刑,隨后出現(xiàn)的幾起案子分衫,更是在濱河造成了極大的恐慌,老刑警劉巖般此,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚪战,死亡現(xiàn)場離奇詭異牵现,居然都是意外死亡,警方通過查閱死者的電腦和手機邀桑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門施籍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人概漱,你說我怎么就攤上這事丑慎。” “怎么了瓤摧?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵竿裂,是天一觀的道長。 經(jīng)常有香客問我照弥,道長腻异,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任这揣,我火速辦了婚禮悔常,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘给赞。我一直安慰自己机打,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布片迅。 她就那樣靜靜地躺著残邀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柑蛇。 梳的紋絲不亂的頭發(fā)上芥挣,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音耻台,去河邊找鬼空免。 笑死,一個胖子當著我的面吹牛盆耽,可吹牛的內(nèi)容都是我干的蹋砚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼征字,長吁一口氣:“原來是場噩夢啊……” “哼都弹!你這毒婦竟也來了娇豫?” 一聲冷哼從身側(cè)響起匙姜,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冯痢,沒想到半個月后氮昧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體框杜,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年袖肥,在試婚紗的時候發(fā)現(xiàn)自己被綠了咪辱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡椎组,死狀恐怖油狂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寸癌,我是刑警寧澤专筷,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蒸苇,受9級特大地震影響磷蛹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溪烤,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一味咳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧檬嘀,春花似錦槽驶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贸铜。三九已至堡纬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒿秦,已是汗流浹背烤镐。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棍鳖,地道東北人炮叶。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像渡处,于是被迫代替她去往敵國和親镜悉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容