一次Spark應用程序參數優化案例


並行度

對於*ByKey等需要shuffle而生成的RDD,其Partition數量依如下順序確定:1. 方法的第二個參數 > 2. spark.default.parallelism參數 > 3. 所有依賴的RDD中,Partition最多的RDD的Partition的數量。

對於其他的RDD則其依賴於父RDD的分區個數。對於讀取Hadoop文件的RDD,其默認的分區個數是HDFS塊個數。同時textFile函數也接受參數,指定分區個數,但不能小於HDFS塊個數——不使用HDFS塊個數。

優化內存

當內存不足時,Spark應用程序運行時,會出現超時而導致任務失敗。原因是內存不足,引起GC。而GC又引起通訊超時。其中的一種解決辦法如下:

1、減小用於cache的內存比例

將spark.storage.memoryFraction參數改為(默認為0.6)。

2、增加並行度

加大spark.default.parallelism參數。

以總數據大小為3.6G、只有兩個NodeManager節點(三個中扣掉一個要跑Driver,每節點1vCPU,480M可用內存)為例。3.6G=(3600M/並行度100)*2 CPU核=72M內存。則每節點內存為:72M/2=36M內存。

480M > 36M內存,所以足夠(這還沒有算上臨時對象等其他內存)。

常見配置

spark-defaults.conf:
    spark.default.parallelism           100
    spark.storage.memoryFraction        0.2
    spark.executor.memory               480m
    spark.yarn.am.memory                400m
    #for yarn-clent mode
    spark.yarn.am.cores                 1
    #for yarn-cluter mode
    #spark.driver.cores                 1
spark-env.sh:
    JAVA_OPTS=" -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"


免責聲明!

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



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