經常有人在微信群里問浪尖,到底應該如何配置yarn集群的資源,如何配置spark executor數目,內存及cpu。今天浪尖在這里大致聊聊這幾個問題。
資源調優
Spark和YARN管理的兩個主要資源是CPU和內存。磁盤和網絡I / O也會影響Spark性能,但Spark和YARN都不會主動管理它們。
應用程序中的每個Spark executor都具有相同的固定數量的核心和相同的固定堆大小。使用--executor-cores命令行參數或通過設置spark.executor.cores屬性指定核心數。同樣,使用--executor-memory參數或spark.executor.memory屬性配置堆大小。 cores屬性控制執行程序可以運行的並發任務數。例如,為每個執行程序設置--executor-cores 5,同時運行最多五個任務。 memory屬性控制Spark可以緩存的數據量,以及用於分組,聚合和join的shuffle數據結構的內存的最大大小。
還要考慮Spark請求的資源如何適應YARN可用的資源。相關的YARN屬性是:
申請五個executor核心意思就是向YARN請求五個核心。 YARN請求的內存更復雜,原因有兩個:
下圖(不按默認值縮放)顯示Spark和YARN中內存屬性的層次結構:
調整Spark executor的內存大小時,請記住以下幾點:
資源調優示例
假設一個集群有六台機器運行nodemanager,每個主機配備16個內核和64 GB內存。
NodeManager容量yarn.nodemanager.resource.memory-mb和yarn.nodemanager.resource.cpu-vcores應分別設置為63 * 1024=64512(兆字節)和15。避免將100%的資源分配給YARN容器,因為主機需要一些資源來運行操作系統和Hadoop守護程序。在這種情況下,中老年品牌為這些系統進程留下一個GB和一個核心,對於有hbase共存的需要預留更多的內存和cpu。
可以考慮使用--num-executors 6 --executor-cores 15 --executor-memory 63G。但是,這種方法不行的:
相反,使用--num-executors 17 --executor-cores 5 --executor-memory 19G:
其實,資源配置調優全靠經驗和自己對集群,分布式,數據量,業務及自己代碼的理解,然后多加測試,這樣形成自己的經驗認知。
希望對大家有幫助。
更多大數據經驗,技巧,案例,可以加入浪尖知識星球。
[完]
推薦閱讀:
戳破 | hive on spark 調優點
關於Spark Streaming感知kafka動態分區的問題
文章來源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/81844218