Spark 性能調優提高任務效率


  1. 資源調優

①    搭建Spark集群的時候要給Spark集群足夠的資源(core,memory)

在spark安裝包的conf下spark-env.sh

        SPARK_WORKER_CORES     --worker節點的可用核數

               SPARK_WORKER_MEMORY

        SPARK_WORKER_INSTANCE

 

在提交Application的時候給Application分配更多的資源。

提交命令選項:(在提交Application的時候使用選項)

        --executor-cores

               --executor-memory

               --total-executor-cores

       

配置信息:(在Application的代碼中設置,在Spark-default.conf中設置)

       spark.executor.cores

               spark.executor.memory

        spark.max.cores

 

  1. 並行度調優

原則:一個core一般分配2~3個task,每一個task一般處理1G數據(task的復雜度類似wc)

①     提高並行度的方式:

1) .如果讀取的數據在HDFS上,降低block塊的大小

2) .sc.textFile(path,numPartitions)

3) sc.parallelize(list,numPartitions) 一般用於測試

4) coalesce、repartition可以提高RDD的分區數。

5) 配置信息:

spark.default.parallelism  not set (默認executor core的總個數)

spark.sql.shuffle.partitions 200

6) 自定義分區器

 

 

  1. 代碼調優

①     避免創建重復的RDD

val rdd1 = sc.textFile(“xxx”)

val rdd2 = sc.textFile(“xxx”)

在執行效率上沒有區別,但是代碼亂。

②     在其他的job中對於重復使用的RDD要使用持久化算子

cache:

       MEMORY_ONLY

persist:

       MEMORY_ONLY

       MEMORY_ONLY_SER

       MEMORY_AND_DISK_SER

一般不要選擇帶有_2的持久化級別。

checkpoint:

①    如果一個RDD的計算時間比較長或者計算起來比較復雜,一般將這個RDD的計算結果保存到HDFS上,這樣數據會更加安全。

②    如果一個RDD的依賴關系非常長,也會使用checkpoint,會切斷依賴關系,提高容錯的效率。

③    盡量使用廣播變量

使用廣播變量可以大大的降低集群中變量的副本數。

不使用廣播變量:變量的副本數和task數一致。

使用廣播變量:變量的副本數與Executor數一致。

廣播變量最大可以是多大?

ExecutorMemory*60%*90%*80%


免責聲明!

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



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