Spark三種屬性配置方式詳解
隨著Spark項(xiàng)目的逐漸成熟, 越來(lái)越多的可配置參數(shù)被添加到Spark中來(lái)。在Spark中提供了三個(gè)地方用于配置:
1、Spark properties:這個(gè)可以控制應(yīng)用程序的絕大部分屬性。并且可以通過(guò) SparkConf對(duì)象或者Java 系統(tǒng)屬性進(jìn)行設(shè)置;
2、環(huán)境變量(Environment variables):這個(gè)可以分別對(duì)每臺(tái)機(jī)器進(jìn)行相應(yīng)的設(shè)置,比如IP。這個(gè)可以在每臺(tái)機(jī)器的$SPARK_HOME/ conf/spark-env.sh腳本中進(jìn)行設(shè)置;
3、日志:所有的日志相關(guān)的屬性可以在log4j.properties文件中進(jìn)行設(shè)置。
下面對(duì)這三種屬性設(shè)定進(jìn)行詳細(xì)的說(shuō)明。
一、Spark properties
Spark properties可以控制應(yīng)用程序的絕大部分屬性,并且可以分別在每個(gè)應(yīng)用上進(jìn)行設(shè)置。這些屬性可以直接在SparkConf對(duì)象上設(shè)定,該對(duì)象可以傳遞給SparkContext。SparkConf對(duì)象允許你去設(shè)定一些通用的屬性(比如master URL、應(yīng)用的名稱等),這些屬性可以傳遞給set()方法的任意key-value對(duì)。如下:
val conf = new SparkConf() .setMaster("local") .setAppName("CountingSheep") .set("spark.executor.memory", "1g") val sc = new SparkContext(conf)
動(dòng)態(tài)加載Spark屬性
在一些場(chǎng)景中,你可能想避免在代碼中將SparkConf對(duì)象的屬性進(jìn)行設(shè)死;比如,你可能想在不同的master上面或者不同內(nèi)存容量運(yùn)行你的應(yīng)用程序。這就需要你運(yùn)行程序的時(shí)候進(jìn)行設(shè)置,Spark允許你創(chuàng)建一個(gè)空的conf對(duì)象,如下:
val sc = new SparkContext(new SparkConf())
然后你可以在運(yùn)行的時(shí)候通過(guò)命令行進(jìn)行一些屬性的配置:
./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工具支持兩種方式來(lái)動(dòng)態(tài)加載配置屬性。第一種是命令行方式,比如--master;spark-submit工具可以通過(guò)--conf標(biāo)記接收任何的Spark屬性。運(yùn)行 ./bin/spark-submit --help將會(huì)顯示全部的選項(xiàng)。
./bin/spark-submit工具也會(huì)從 conf/spark-defaults.conf配置文件中讀取配置選項(xiàng)。 在conf/spark-defaults.conf配置文件中,每行是key-value對(duì),中間可以是用空格進(jìn)行分割,也可以直接用等號(hào)進(jìn)行分割。如下:
spark.master spark://iteblog.com:7077 spark.executor.memory 512m spark.eventLog.enabled true spark.serializer org.apache.spark.serializer.KryoSerializ
每個(gè)值將作為一個(gè)flags傳遞到應(yīng)用中并個(gè)SparkConf對(duì)象中相應(yīng)的屬性進(jìn)行合并。通過(guò)SparkConf 對(duì)象配置的屬性優(yōu)先級(jí)最高;其次是對(duì)spark-submit 或 spark-shell通過(guò)flags配置;最后是spark-defaults.conf文件中的配置。
哪里可以查看配置好的Spark屬性
在應(yīng)用程序?qū)?yīng)的WEB UI(http://<driver>:4040)上的Environment標(biāo)簽下面將會(huì)顯示出該應(yīng)用程序的所有Spark配置選項(xiàng)。在你想確定你的配置是否正確的情況下是非常有用的。需要注意的是,只有顯示通過(guò)spark-defaults.conf 或SparkConf 進(jìn)行配置的屬性才會(huì)在那個(gè)頁(yè)面顯示。其他所有沒(méi)有顯示的屬性,你可以認(rèn)為這些屬性的值為默認(rèn)的。
二、環(huán)境變量
有很大一部分的Spark設(shè)定可以通過(guò)環(huán)境變量來(lái)進(jìn)行設(shè)定。這些環(huán)境變量設(shè)定在conf/spark-env.sh 腳本文件中(如果你是windows系統(tǒng),那么這個(gè)文件名稱是conf/spark-env.cmd)。在 Standalone 和 Mesos模式下,這個(gè)文件可以設(shè)定一些和機(jī)器相關(guān)的信息(比如hostname)。
需要注意,在剛剛安裝的Spark中conf/spark-env.sh文件是不存在的。但是你可以通過(guò)復(fù)制conf/spark-env.sh.template文件來(lái)創(chuàng)建,你的確保這個(gè)復(fù)制之后的文件是可運(yùn)行的。
下面的屬性是可以在conf/spark-env.sh文件中配置
JAVA_HOME Java的安裝目錄 PYSPARK_PYTHON Python binary executable to use for PySpark. SPARK_LOCAL_IP IP address of the machine to bind to. SPARK_PUBLIC_DNS Hostname your Spark program will advertise to other machines.
對(duì)于 standalone 模式的集群除了上面的屬性可以配置外,還有很多的屬性可以配置,具體我就不說(shuō)了,自己看文檔去。
三、日志配置
Spark用log4j來(lái)記錄日志。你可以通過(guò)配置log4j.properties來(lái)設(shè)定不同日志的級(jí)別、存放位置等。這個(gè)文件默認(rèn)也是不存在的,你可以通過(guò)復(fù)制log4j.properties.template文件來(lái)得到。
總結(jié)
以上就是本文關(guān)于Spark三種屬性配置方式詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Spark實(shí)現(xiàn)K-Means算法代碼示例、淺談七種常見(jiàn)的Hadoop和Spark項(xiàng)目案例、Spark的廣播變量和累加器使用方法代碼示例等,有什么問(wèn)題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的。
相關(guān)文章
Kubernetes有狀態(tài)應(yīng)用管理StatefulSet使用詳解
這篇文章主要為大家介紹了Kubernetes有狀態(tài)應(yīng)用管理StatefulSet使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11RFO SIG之openEuler AWS AMI 制作詳解
這篇文章主要為大家介紹了RFO SIG之openEuler AWS AMI 制作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Kubernetes存儲(chǔ)系統(tǒng)數(shù)據(jù)持久化管理詳解
這篇文章主要為大家介紹了Kubernetes存儲(chǔ)系統(tǒng)數(shù)據(jù)持久化管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說(shuō)明
這篇文章主要為大家介紹了詳解kubelet?創(chuàng)建pod流程代碼圖解及日志說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09