Spark配置參數的三種方式


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM