zoukankan      html  css  js  c++  java
  • Spark性能调优之资源分配

    Spark性能调优之资源分配

    1. 分配哪些资源?

    spark任务可以分配的资源主要包括 executor、cpu per executor、memory per executor、driver memory

    2. 在哪里分配这些资源?

    在我们在生产环境中,在提交spark作业时,用的spark-submit shell脚本,里面调整对应的参数

    3. 调节到多大,算是最大呢?

    第一种,Spark Standalone。公司集群上搭建了一套Spark集群,你应该可以知道每台机器还能够给你使用的大概有多少内存,多少cpu core;设置的时候需要根据这个实际的情况去调节每个spark作业的资源分配。比如说你的每台机器能够给你使用4G内存,2个cpu core;一共20台机器,那么就可以配置20个executor,平均每个executor 4G内存,2个cpu core。

    第二种,Yarn。资源队列。应该去查看你的spark作业要提交到的资源队列大概有多少资源?

    一个原则,你能使用的资源有多大,就尽量去调节到最大的大小(executor的数量,几十个到上百个不等;executor内存;executor cpu core)

    4. 为什么调节了资源以后,性能可以提升?

    (1)增加每个executor的cpu core。

    增加每个executor的 cpu core 可以增加了并行能力。原本20个executor,每个才2个cpu core,能够并行执行的task数量为40个。现在每个executor的cpu core 增加到了5个,能够并行执行的task数量为100个。执行的速度,提升了2.5倍。

    (2)增加executor。

    如果executor数量比较少,那么能够并行执行的task数量就比较少,Application的并行执行的能力就很弱。比如有3个executor,每个executor有2个cpu core,那么同时能够并行执行的task就是6个。6个执行完以后,再换下一批6个task。增加了executor数量以后能够并行执行的task数量也就变多了。比如原先是6个,现在可能可以并行执行10个,甚至20个,100个。那么并行能力就比之前提升了数倍,数十倍。

    相应的,性能(执行的速度),也能提升数倍~数十倍。

    (3)增加每个executor的内存量。

    增加了内存量以后,对性能的提升,有两点:

    a. 如果需要对RDD进行cache,更多的内存就可以缓存更多的数据,将更少的数据写入磁盘,甚至不写入磁盘。减少了磁盘IO。

    b. 对于shuffle操作,reduce端,会需要内存来存放拉取的数据并进行聚合。如果内存不够,也会写入磁盘。如果给executor分配更多内存以后,就有更少的数据需要写入磁盘甚至不需要写入磁盘。减少了磁盘IO,提升了性能。

    c. 对于task的执行,可能会创建很多对象。如果内存比较小,可能会频繁导致JVM堆内存满了,然后频繁GC,垃圾回收,minor GC和full GC。(速度很慢)。内存加大以后,带来更少的GC,垃圾回收,避免了速度变慢,速度变快了。

    原文: https://mp.weixin.qq.com/s/PnHR31k57QEwHVblLBKOGw

  • 相关阅读:
    EMIF接口的寻址问题
    C6000系类的内联函数
    C6000代码层面优化(一)
    RHCE学习笔记
    找出并关闭Ruby On Rails进程.
    Rails4添加bootstrap支持
    如何删除gnome3面板上的图标?
    出现 ruby cannot load such file -- zlib 问题的解决方法
    Debian安装软件时提示插入光盘
    Debian7桌面屏蔽图标和右键菜单的解决方法。
  • 原文地址:https://www.cnblogs.com/weijiqian/p/14208214.html
Copyright © 2011-2022 走看看