1. 程式人生 > >Spark三種屬性配置方式詳細說明

Spark三種屬性配置方式詳細說明

隨著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對。如下:

1 val conf = new SparkConf()
2 .setMaster("local")
3 .setAppName("CountingSheep")
4
.set("spark.executor.memory""1g")
5 val sc = new SparkContext(conf)

動態載入Spark屬性

  在一些場景中,你可能想避免在程式碼中將SparkConf物件的屬性進行設死;比如,你可能想在不同的master上面或者不同記憶體容量執行你的應用程式。這就需要你執行程式的時候進行設定,Spark允許你建立一個空的conf物件,如下:

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

  然後你可以在執行的時候通過命令列進行一些屬性的配置:

1 ./bin/spark-submit --name "My app"
2 --master local[4]
3 --conf spark.shuffle.spill=false
4 --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails
5 -XX:+PrintGCTimeStamps"
6 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對,中間可以是用空格進行分割,也可以直接用等號進行分割。如下:

1 spark.master            spark://iteblog.com:7077
2 spark.executor.memory   512m
3 spark.eventLog.enabled  true
4 spark.serializer        org.apache.spark.serializer.KryoSerializer

  每個值將作為一個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中各個引數的含義。歡迎大家關注。
  關於應用程式相關的屬性設定解釋:《Spark配置屬性詳解(1)》