1.Spark 屬性
Spark應用程序的運行是通過外部參數來控制的,參數的設置正確與否,好與壞會直接影響應用程序的性能,也就影響我們整個集群的性能。參數控制有以下方式:
(1)直接設置在SparkConf,通過參數的形式傳遞給SparkContext,達到控制目的。(通過set()方法傳入key-value對)比如:
val conf = new SparkConf() .setMaster(”local[2]
“) #注意1 .setAppName(”test“) .set("spark.cores.max", "10") ######set()方法傳入屬性參數 val sc = new SparkContext(conf)
#注意1 本地開啟2個線程來工作,注意了,本地工作方式除了集合生成RDD、讀取本地文件和hdfs文件能開啟一個線程就可以工作外,其他情況都開啟至少兩條線程才能正常工作。這是由於除以上情況,Spark會開啟一個reciver來接受數據,若只有一條線程,reciver就占用唯一線程的資源,而數據處理等操作將沒有資源可執行。
(2)動態加載Spark屬性。為了應用程序名字和集群方式等屬性不硬編碼,靈活應用。可以這樣處理:val sc = new SparkContext(new SparkConf())。通過 spark-submit 時添加必要的參數。如:
./bin/spark-submit --name "My app" --master local[4] --conf spark.eventLog.enabled=false --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jar
方法是:通過 --conf 標志,並在后面以key-value對的形式傳入屬性參數。
(3)在conf/spark-defaults.conf 定義必要的屬性參數,Spark在啟動時,SparkContext會自動加載此配置文件的屬性。定義方式是:
spark.master spark://master:7077 spark.executor.memory 4g spark.eventLog.enabled true spark.serializer org.apache.spark.serializer.KryoSerializer #這里選用此序列化方法,是因為Java自帶序列化方法性能一般,在此優化優化。
一切外部傳給Spark應用程序的屬性參數,最終與SparkConf里定義的值結合。Spark加載屬性參數的優先順序是:
(1)直接在SparkConf設置的屬性參數
(2)通過 spark-submit 或 spark-shell 方式傳遞的屬性參數
(3)最后加載 spark-defaults.conf 配置文件的屬性參數
當然了,既然有優先順序之分,也就是說優先級高的會覆蓋優先級低的參數。
2.查看應用程序的屬性參數
http://<driver>:4040
此UI界面將會列出了Spark的屬性,方便我們查看應用程序的屬性參數,在性能調優時結合master UI非常有用。
3.最后獻上獨家“葵花寶典”,本人針對官網所有的屬性參數翻譯整理成表格,從此媽媽再也不用擔心我設置參數和調優了。下載地址 Spark屬性參數翻譯
原創來自:https://www.cnblogs.com/liangjf/p/8142858.html