Spark在实际项目中分配更多资源

Spark在实际项目中分配更多资源

  • Spark在实际项目中分配更多资源

    • 性能调优概述

      • 分配更多资源
      • 性能调优问题
      • 解决思路
    • 为什么调节了资源以后,性能可以提升?

性能调优概述

分配更多资源

  • 性能调优的根本,就是增加和分配更多的资源,性能和速度上的提升,是显而易见的
  • 基本上,在一定范围之内,增加资源与性能的提升,是成正比的
  • 写完了一个复杂的spark作业之后,进行性能调优的时候,首先第一步,就是要来调节最优的资源配置
  • 在这个基础之上,如果说你的spark作业,能够分配的资源达到了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限,那么才是考虑去做后面的这些性能调优的点

性能调优问题

  1. 分配哪些资源?
  2. 在哪里分配这些资源?
  3. 为什么多分配了这些资源以后,性能会得到提升?

解决思路

  1. 分配哪些资源?

    • executor、cpu per executor、memory per executor、driver memory
  2. 在哪里分配这些资源?
    • 在我们在生产环境中,提交spark作业时,用的spark-submit shell脚本,里面调整对应的参数
/usr/local/spark/bin/spark-submit --class cn.spark.sparktest.core.WordCountCluster --num-executors 3 \  // 配置executor的数量
--driver-memory 100m \  // 配置driver的内存(影响不大)
--executor-memory 100m \  //配置每个executor的内存大小
--executor-cores 3 \  //配置每个executor的cpu core数量
/usr/local/SparkTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar \
  1. 调节到多大,算是最大呢?
  • 第一种,Spark Standalone,公司集群上,搭建了一套Spark集群,你心里应该清楚每台机器还能够给你使用的,大概有多少内存,多少cpu core;那么,设置的时候,就根据这个实际的情况,去调节每个spark作业的资源分配。比如说你的每台机器能够给你使用4G内存,2个cpu core;20台机器;executor,20;4G内存,2个cpu core,平均每个executor。
  • 第二种,Yarn。资源队列。资源调度。应该去查看,你的spark作业,要提交到的资源队列,大概有多少资源?500G内存,100个cpu core;executor,50;10G内存,2个cpu core,平均每个executor。
  • 一个原则,你能使用的资源有多大,就尽量去调节到最大的大小(executor的数量,几十个到上百个不等;executor内存;executor cpu core)

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

SparkContext,DAGScheduler,TaskScheduler,会将我们的算子,切割成大量的task,提交到Application的executor上面去执行。

  • 增加executor:

    • 如果executor数量比较少,那么,能够并行执行的task数量就比较少,就意味着,我们的Application的并行执行的能力就很弱。
    • 比如有3个executor,每个executor有2个cpu core,那么同时能够并行执行的task,就是6个。6个执行完以后,再换下一批6个task。
    • 增加了executor数量以后,那么,就意味着,能够并行执行的task数量,也就变多了。比如原先是6个,现在可能可以并行执行10个,甚至20个,100个。那么并行能力就比之前提升了数倍,数十倍。
    • 相应的,性能(执行的速度),也能提升数倍~数十倍。
  • 增加每个executor的内存量。增加了内存量以后,对性能的提升,有三点:
    1. 如果需要对RDD进行cache,那么更多的内存,就可以缓存更多的数据,将更少的数据写入磁盘,甚至不写入磁盘。减少了磁盘IO。
    2. 对于shuffle操作,reduce端,会需要内存来存放拉取的数据并进行聚合。如果内存不够,也会写入磁盘。如果给executor分配更多内存以后,就有更少的数据,需要写入磁盘,甚至不需要写入磁盘。减少了磁盘IO,提升了性能。
    3. 对于task的执行,可能会创建很多对象。如果内存比较小,可能会频繁导致JVM堆内存满了,然后频繁GC,垃圾回收,minor GC和full GC。(速度很慢)。内存加大以后,带来更少的GC,垃圾回收,避免了速度变慢,速度变快了。
  • 增加每个executor的cpu core,也是增加了执行的并行能力。
    • 原本20个executor,每个才2个cpu core。能够并行执行的task数量,就是40个task。
    • 现在每个executor的cpu core,增加到了5个。能够并行执行的task数量,就是100个task。
    • 执行的速度,提升了2.5倍。

原文地址:https://www.cnblogs.com/screen/p/9320492.html

时间: 2024-10-10 04:13:54

Spark在实际项目中分配更多资源的相关文章

WPF 添加 Resources Dictionary 资源 一般类库项目中无法添加资源文件(ResourceDictionary)

原文:WPF 添加 Resources Dictionary 资源 一般类库项目中无法添加资源文件(ResourceDictionary) 在文件夹或者项目右键-> Add(添加),会弹出可以快捷添加的资源,但是你会发现没有 ResourceDictionary资源可以选择. 解决此问题方法: 第一步:工程->右键->Unload Project 第二步:刚刚Unload的这个工程->右键->Edit XXXX : 第三步:PropertyGroup中添加    <Pr

在VC项目中使用自定义资源

这是我看到的比较实用性的技巧,分享给大家 一.前言 在VC环境中除了我们所常用的Dialog.Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多. 1.默认的皮肤压缩包或语言包.一些支持换肤的软件特别是一些媒体播放器常常有自定义的皮肤文件(你可以尝试将Media Player或千千静听等软件的Skins目录下的文件的扩展名改为.zip,然后使用WinZip打开看一下),但为了防止Skin文件丢失导致

在LIUNX服务器上找出web项目中占用cpu资源最多的线程的排查方法

在这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结:linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: 第一步:登陆到web服务所在的liunx服务器,利用top命令获取java的cpu使用率 第二步: 如上图所示,java的进程id为'3260',接下来用top命令单独对这个进程中的所有线程作监视:top -p 3260 -H 第三步: 如上图所示,linux下,所有的

项目中的那些资源应该静态化

刚才在调试一段代码, 需要频繁的进行数据库的读写, 调试过程中发现每次都需要从配置文件中读出链接字符串, 而其实这个链接字符串不需要每次都初始化, 只需初始化一次即可 . 因此将其设置为静态, 再调试发现不需要再次初始化了,只需在程序运行开始运行时将静态资源初始化一次即可 .一般来说,一些常使用的而不需要要改变的资源以及一些工具性的资源应该将其静态化,这样不需要再在没有调用时从新生成新的临时对象 .

ssm项目中 数据库和资源的备份

备份 备份很重要 数据库的备份 mysqldump -u用户名 -p密码 所需要备份的数据库 > ~/backup/sql/o2o`date +%Y%m%d%H%M%S`.sql 资源的备份 tar -zcvf /root/backup/image/image`date +%Y%m%d%H%M%S`.tar.gz /root/image/upload 使用Linux中的crontab实现自动备份 编写 backup.sh #!/bin/sh # 数据库资源备份 mysqldump -uroot

MAC平台下批量删除Android项目中的废弃资源

本来这里的方法很多,在mac上做到还是没有win下方便, 1,借助一个jar包(AndroidUnusedResources1.6.2.jar): 把该jar包放到工程目录下,如下图所示: 然后在控制台执行:cd 你所在的工程路径 例如:cd /Users/hl/Documents/workspace/YourProject 然后再执行 java -jar AndroidUnusedResources1.6.2.jar > del.txt 此句的意思是直接将废弃资源的路径找到并生成一个文件,可能

如何在使用eclipse的情况下,清理android项目中的冗余class文件和资源文件以及冗余图片

在我们迭代项目的过程中,经常会启用某些功能,或者修改某些界面的问题,那么问题来了,这样很容易出现大量的冗余.java文件,冗余资源文件,一些冗余的界面文件等.那么问题既然出现了,那么如何去解决呢,这就是今天着重要去解决的问题? first: eclipse有个检查冗余java文件的插件,名叫UCDetector: 下载地址为:http://sourceforge.net/projects/ucdetector/files/latest/download?source=files 官网地址:htt

快速清除Andorid项目中无用资源

在做项目的时候,随着项目不断迭代,项目包越来越大,同时项目中无用的资源文件或数据越来越多,不仅导致发出的APP包很大,多达20M,还影响程序的性能及产品体验.我们通常做的方法就是自动手工找出或是用一些jar包工具(如androidunusedresources.jar)来找出项目中无用资源,然后手工删除,工作量可想而知,做过这个活的都知道其中的苦. 今天看到了一篇自动删除Android项目中的无用资源的文章:http://nashlegend.blog.51cto.com/5635342/165

Spark日志分析项目Demo(9)--常规性能调优

一 分配更多资源 分配更多资源:性能调优的王道,就是增加和分配更多的资源,性能和速度上的提升,是显而易见的:基本上,在一定范围之内,增加资源与性能的提升,是成正比的:写完了一个复杂的spark作业之后,进行性能调优的时候,首先第一步,我觉得,就是要来调节最优的资源配置:在这个基础之上,如果说你的spark作业,能够分配的资源达到了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限:那么才是考虑去做后面的这些性能调优的点. 问题: 1.分配哪些资源? 2.在哪里分配这些资源? 3.为什么