隨著Spark項目的逐漸成熟, 越來越多的可配置參數被添加到Spark中來。在Spark中提供了三個地方用于配置:
1、Spark properties:這個可以控制應用程序的絕大部分屬性。并且可以通過 SparkConf對象或者Java 系統屬性進行設置;
2、環境變量(Environment variables):這個可以分別對每臺機器進行相應的設置,比如IP。這個可以在每臺機器的$SPARK_HOME/ conf/spark-env.sh腳本中進行設置;
3、日志:所有的日志相關的屬性可以在log4j.properties文件中進行設置。
下面對這三種屬性設定進行詳細的說明。
一、Spark properties
Spark properties可以控制應用程序的絕大部分屬性,并且可以分別在每個應用上進行設置。這些屬性可以直接在SparkConf對象上設定,該對象可以傳遞給SparkContext。SparkConf對象允許你去設定一些通用的屬性(比如master URL、應用的名稱等),這些屬性可以傳遞給set()方法的任意key-value對。如下:
valconf =new SparkConf() .setMaster("local") .setAppName("CountingSheep") .set("spark.executor.memory", "1g")valsc =new SparkContext(conf)
動態加載Spark屬性
在一些場景中,你可能想避免在代碼中將SparkConf對象的屬性進行設死;比如,你可能想在不同的master上面或者不同內存容量運行你的應用程序。這就需要你運行程序的時候進行設置,Spark允許你創建一個空的conf對象,如下:
valsc =new SparkContext(newSparkConf())
然后你可以在運行的時候通過命令行進行一些屬性的配置:
./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工具支持兩種方式來動態加載配置屬性。第一種是命令行方式,比如--master;spark-submit工具可以通過--conf標記接收任何的Spark屬性。運行 ./bin/spark-submit --help將會顯示全部的選項。
./bin/spark-submit工具也會從 conf/spark-defaults.conf配置文件中讀取配置選項。 在conf/spark-defaults.conf配置文件中,每行是key-value對,中間可以是用空格進行分割,也可以直接用等號進行分割。如下:
spark.master spark://iteblog.com:7077spark.executor.memory 512mspark.eventLog.enabled truespark.serializer org.apache.spark.serializer.KryoSerializ
每個值將作為一個flags傳遞到應用中并個SparkConf對象中相應的屬性進行合并。通過SparkConf 對象配置的屬性優先級最高;其次是對spark-submit 或 spark-shell通過flags配置;最后是spark-defaults.conf文件中的配置。
哪里可以查看配置好的Spark屬性
在應用程序對應的WEB UI(http://<driver>:4040)上的Environment標簽下面將會顯示出該應用程序的所有Spark配置選項。在你想確定你的配置是否正確的情況下是非常有用的。需要注意的是,只有顯示通過spark-defaults.conf 或SparkConf 進行配置的屬性才會在那個頁面顯示。其他所有沒有顯示的屬性,你可以認為這些屬性的值為默認的。
二、環境變量
有很大一部分的Spark設定可以通過環境變量來進行設定。這些環境變量設定在conf/spark-env.sh 腳本文件中(如果你是windows系統,那么這個文件名稱是conf/spark-env.cmd)。在 Standalone 和 Mesos模式下,這個文件可以設定一些和機器相關的信息(比如hostname)。
需要注意,在剛剛安裝的Spark中conf/spark-env.sh文件是不存在的。但是你可以通過復制conf/spark-env.sh.template文件來創建,你的確保這個復制之后的文件是可運行的。
下面的屬性是可以在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.
對于 standalone 模式的集群除了上面的屬性可以配置外,還有很多的屬性可以配置,具體我就不說了,自己看文檔去。
三、日志配置
Spark用log4j來記錄日志。你可以通過配置log4j.properties來設定不同日志的級別、存放位置等。這個文件默認也是不存在的,你可以通過復制log4j.properties.template文件來得到。
總結
以上就是本文關于Spark三種屬性配置方式詳解的全部內容,希望對大家有所幫助。有什么問題可以隨時留言,小編會及時回復大家的。
新聞熱點
疑難解答
圖片精選