Spark 性能相关参数配置详解-任务调度篇,spark任务调度


作者:刘旭晖 Raymond 转载请注明出处

Email:colorant at 163.com

BLOG:http://blog.csdn.net/colorant/


随着Spark的逐渐成熟完善越来越多的可配置参数被添加到Spark中来本文试图通过阐述这其中部分参数的工作原理和配置思路和大家一起探讨一下如何根据实际场合对Spark进行配置优化。


由于篇幅较长,所以在这里分篇组织,如果要看最新完整的网页版内容,可以戳这里:http://spark-config.readthedocs.org/,主要是便于更新内容


schedule调度相关

 

调度相关的参数设置,大多数内容都很直白,其实无须过多的额外解释,不过基于这些参数的常用性(大概会是你针对自己的集群第一步就会配置的参数),这里多少就其内部机制做一些解释。

 

spark.cores.max

 

一个集群最重要的参数之一,当然就是CPU计算资源的数量。spark.cores.max 这个参数决定了在StandaloneMesos模式下,一个Spark应用程序所能申请的CPU Core的数量。如果你没有并发跑多个Spark应用程序的需求,那么可以不需要设置这个参数,默认会使用spark.deploy.defaultCores的值(而spark.deploy.defaultCores的值默认为Int.Max,也就是不限制的意思)从而应用程序可以使用所有当前可以获得的CPU资源。

 

针对这个参数需要注意的是,这个参数对Yarn模式不起作用,YARN模式下,资源由Yarn统一调度管理,一个应用启动时所申请的CPU资源的数量由另外两个直接配置Executor的数量和每个Executorcore数量的参数决定。(历史原因造成,不同运行模式下的一些启动参数个人认为还有待进一步整合)

 

此外,在Standalone模式等后台分配CPU资源时,目前的实现中,在spark.cores.max允许的范围内,基本上是优先从每个Worker中申请所能得到的最大数量的CPU core给每个Executor,因此如果人工限制了所申请的Max Core的数量小于StandaloneMesos模式所管理的CPU数量,可能发生应用只运行在集群中部分节点上的情况(因为部分节点所能提供的最大CPU资源数量已经满足应用的要求),而不是平均分布在集群中。通常这不会是太大的问题,但是如果涉及数据本地性的场合,有可能就会带来一定的必须进行远程数据读取的情况发生。理论上,这个问题可以通过两种途径解决:一是StandaloneMesos的资源管理模块自动根据节点资源情况,均匀分配和启动Executor,二是和Yarn模式一样,允许用户指定和限制每个ExecutorCore的数量。 社区中有一个PR试图走第二种途径来解决类似的问题,不过截至我写下这篇文档为止(2014.8),还没有被Merge

 

spark.task.cpus

 

这个参数在字面上的意思就是分配给每个任务的CPU的数量,默认为1。实际上,这个参数并不能真的控制每个任务实际运行时所使用的CPU的数量,比如你可以通过在任务内部创建额外的工作线程来使用更多的CPU(至少目前为止,将来任务的执行环境是否能通过LXC等技术来控制还不好说)。它所发挥的作用,只是在作业调度时,每分配出一个任务时,对已使用的CPU资源进行计数。也就是说只是理论上用来统计资源的使用情况,便于安排调度。因此,如果你期望通过修改这个参数来加快任务的运行,那还是赶紧换个思路吧。这个参数的意义,个人觉得还是在你真的在任务内部自己通过任何手段,占用了更多的CPU资源时,让调度行为更加准确的一个辅助手段。

 

 

spark.scheduler.mode

 

这个参数决定了单个Spark应用内部调度的时候使用FIFO模式还是Fair模式。是的,你没有看错,这个参数只管理一个Spark应用内部的多个没有依赖关系的Job作业的调度策略。

 

如果你需要的是多个Spark应用之间的调度策略,那么在Standalone模式下,这取决于每个应用所申请和获得的CPU资源的数量(暂时没有获得资源的应用就Pending在那里了),基本上就是FIFO形式的,谁先申请和获得资源,谁就占用资源直到完成。而在Yarn模式下,则多个Spark应用间的调度策略由Yarn自己的策略配置文件所决定。

 

那么这个内部的调度逻辑有什么用呢?如果你的Spark应用是通过服务的形式,为多个用户提交作业的话,那么可以通过配置Fair模式相关参数来调整不同用户作业的调度和资源分配优先级。

 

 

spark.locality.wait

 

spark.locality.wait和spark.locality.wait.process,spark.locality.wait.node, spark.locality.wait.rack这几个参数影响了任务分配时的本地性策略的相关细节。

 

Spark中任务的处理需要考虑所涉及的数据的本地性的场合,基本就两种,一是数据的来源是HadoopRDD; 二是RDD的数据来源来自于RDD Cache(即由CacheManagerBlockManager中读取,或者Streaming数据源RDD)。其它情况下,如果不涉及shuffle操作的RDD,不构成划分StageTask的基准,不存在判断Locality本地性的问题,而如果是ShuffleRDD,其本地性始终为No Prefer,因此其实也无所谓Locality

 

在理想的情况下,任务当然是分配在可以从本地读取数据的节点上时(同一个JVM内部或同一台物理机器内部)的运行时性能最佳。但是每个任务的执行速度无法准确估计,所以很难在事先获得全局最优的执行策略,当Spark应用得到一个计算资源的时候,如果没有可以满足最佳本地性需求的任务可以运行时,是退而求其次,运行一个本地性条件稍差一点的任务呢,还是继续等待下一个可用的计算资源已期望它能更好的匹配任务的本地性呢?

 

这几个参数一起决定了Spark任务调度在得到分配任务时,选择暂时不分配任务,而是等待获得满足进程内部/节点内部/机架内部这样的不同层次的本地性资源的最长等待时间。默认都是3000毫秒。

 

基本上,如果你的任务数量较大和单个任务运行时间比较长的情况下,单个任务是否在数据本地运行,代价区别可能比较显著,如果数据本地性不理想,那么调大这些参数对于性能优化可能会有一定的好处。反之如果等待的代价超过带来的收益,那就不要考虑了。

 

特别值得注意的是:在处理应用刚启动后提交的第一批任务时,由于当作业调度模块开始工作时,处理任务的Executors可能还没有完全注册完毕,因此一部分的任务会被放置到No Prefer的队列中,这部分任务的优先级仅次于数据本地性满足Process级别的任务,从而被优先分配到非本地节点执行,如果的确没有Executors在对应的节点上运行,或者的确是No Prefer的任务(如shuffleRDD),这样做确实是比较优化的选择,但是这里的实际情况只是这部分Executors还没来得及注册上而已。这种情况下,即使加大本节中这几个参数的数值也没有帮助。针对这个情况,有一些已经完成的和正在进行中的PR通过例如动态调整No Prefer队列,监控节点注册比例等等方式试图来给出更加智能的解决方案。不过,你也可以根据自身集群的启动情况,通过在创建SparkContext之后,主动Sleep几秒的方式来简单的解决这个问题。

 

 

spark.speculation

 

spark.speculation以及spark.speculation.interval,spark.speculation.quantile, spark.speculation.multiplier等参数调整Speculation行为的具体细节,Speculation是在任务调度的时候,如果没有适合当前本地性要求的任务可供运行,将跑得慢的任务在空闲计算资源上再度调度的行为,这些参数调整这些行为的频率和判断指标,默认是不使用Speculation的。

 

通常来说很难正确的判断是否需要Speculation,能真正发挥Speculation用处的场合,往往是某些节点由于运行环境原因,比如CPU资源由于某种原因被占用,磁盘损坏导致IO缓慢造成任务执行速度异常的情况,当然前提是你的分区任务不存在仅能被执行一次,或者不能同时执行多个拷贝等情况。Speculation任务参照的指标通常是其它任务的执行时间,而实际的任务可能由于分区数据尺寸不均匀,本来就会有时间差异,加上一定的调度和IO的随机性,所以如果一致性指标定得过严,Speculation可能并不能真的发现问题,反而增加了不必要的任务开销,定得过宽,大概又基本相当于没用。

 

个人觉得,如果你的集群规模比较大,运行环境复杂,的确可能经常发生执行异常,加上数据分区尺寸差异不大,为了程序运行时间的稳定性,那么可以考虑仔细调整这些参数。否则还是考虑如何排除造成任务执行速度异常的因数比较靠铺一些。

 

当然,我没有实际在很大规模的集群上运行过Spark,所以如果看法有些偏颇,还请有实际经验的XD指正。



问SPARK的价格与参数,有知道的可以不可以详细给个参数与性可以的报价?

  系列:雪佛兰SPARK
  最近更新: 2005.12.02

  )

  雪佛兰SPARK 0.8AT
  [参数] [评论] ¥6.28
  [历史价格] [北京] ¥6.28
  [上海] ¥6.28
  [广州] ¥6.28
  [深圳] ¥6.28
  点击数121173

  雪佛兰SPARK 0.8MT
  [参数] [评论] ¥4.58
  [历史价格] [北京] ¥4.58
  [上海] ¥4.58
  [广州] ¥4.58
  [深圳] ¥4.58
  点击数234635

  雪佛兰SPARK 1.0
  [参数] [评论] ¥5.88
  [历史价格] [北京] ¥5.88
  [上海] ¥5.88
  [广州] ¥5.88
  [深圳] ¥5.88
  点击数158248

  车型:雪佛兰SPARK 1.0
  最近更新: 2005.12.02

  报价 基本参数 配置 其他

  车身重量:
  875 kg
  轴距: 2340 mm
  轮距(前/后): 1315/1280 mm
  长: 3495 mm
  宽: 1495 mm
  高: 1523 mm

  地区最新报价 ( 厂商/市场 )万元
  北京 5.88 / 5.88
  上海 5.88 / 5.88
  广州 5.88 / 5.88
  深圳 5.88 / 5.88

  [ 历史价格 ]

  功能: 竞争车型 虚拟购车 排行榜 图片库
  推荐: 真实油耗 购车经历 用车心得 二 手 车 汽车用品报价

  优点: 造型时尚,质量可靠,精巧实用,操控方便 缺点: 配件进口,车价高,保养费用高
  项目 编辑评分 网友评分 项目 编辑评分 网友评分
  外观 5.0 4.1 内饰 3.0 4.02
  操控 3.5 4.07 安全 3.5 3.99
  油耗 4.0 3.98

  说明:满分为5分,分数越高表示评价越好

  汽车参考配置

  维修配件报价

  车型相关文章

  基本资料
  品牌: 上汽通用五菱
  系列: 雪佛兰SPARK
  型号: 雪佛兰SPARK 1.0
  车型: 微型 两厢轿车
  生产厂商: 上海通用五菱
  生产年份: 2004
  引擎参数
  标准引擎: B10S1
  标准变速箱: 4速自动变速
  排量cc: 1
  最大功率: 47/5400 Kw/rpm
  最大扭矩: 87.3/4200 nm/rpm
  燃油系统: 电子燃油喷射式
  油耗: 4.3 升/百公里
  最高时速: 140.0 km/h
  排放: 欧Ⅱ标准
  转向,悬挂,轮胎
  驱动方式: 前置前驱
  制动方式: 碟/鼓
  转向方式: 助力转向式
  轮胎: 155/65R13
  尺寸和重量
  车身重量: 875 kg
  轴距: 2340 mm
  轮距(前/后): 1315/1280 mm
  长: 3495mm
  宽: 1495mm
  高: 1523 mm
  车型配置 -- 外观/内饰
  车身同色保险杠;
  车型配置 -- 功能配置
  AM/FM收音机; 电动车窗; 动力转向; 手动空调;
  车型配置 -- 安全配置
  驾驶座安全气囊; 高位刹车灯; ABS防抱死制动系统 ;
  车型配置 -- 防盗......余下全文>>
 

简述计算机各主要部件品牌,性可以参数与注意事项

常见的电脑硬件构成有:主机、显示器、键盘、鼠标、音箱、麦克风。还有打印机和扫描仪,是电脑重要的输出、输入设备

主机:是电脑最主要的设备,相当于人的大脑一样,几乎所有的文件资料和信息都由它控制,您需要电脑完成的工作也都由它主要负责,它还要给其他的电脑设备分配工作,其他的设备因此也都叫做外围设备。

显示器是电脑主要的输出设备,它的重要任务是将主机的所思所想的结果展示在大家面前.

它的功能跟显示器相反,负责对主机系统的“输入”,用户对电脑的工作要求。用户的指令必须通过它才能告诉主机电脑的“脑”。通过它,电脑才知道要做什么。而且目前键盘对电脑来说还是一个不可替代的输入设备。

随着Windows图形操作界面的流行,很多命令和要求已基本上不需再用键盘输入,只要通过操作鼠标的左键或右键就能告诉电脑要做什么。因此,虽然很小的鼠标,却给电脑使用者带来了很大的方便和许多的乐趣。

打开主机箱可以看到,它的主要构件就是主机板、内存条、硬盘驱动器、软盘驱动器、光盘驱动器、声卡、显示卡、调制解调器
主机板:是一台主机的骨架,大多数设备都得通过它连在一起。电脑性能四大部件之一

CPU:英文名叫Central Processing Unit,意思就是中央处理器,它是主机的心脏,统一指挥调度电脑的所有工作。奔腾、奔2、奔3、奔4、扣肉、就是指不同的CPU。电脑性能四大部件之一

内存:英文名叫 Read Arandom Memory,简称RAM,是电脑工作过程中贮存数据信息的地方,它的单位叫做“兆”字节,用“M”表示(1M = 1024K,1K = 1024字节,1个汉字占两个字节,1M 大约相当于50万汉字),一般大家都省略了“字节”两个字,只称“兆”。现在的机器一般都安装256M或512M的内存,还有更大的内存。 电脑性能四大部件之一

硬盘:是平时安装各种软件和存贮文件的地方,相当于主机的肚子,用户的 Windows,各种游戏软件或是文件信函全放里面,以前硬盘容量较少,只有几百兆,目前一般都有 40G、80G 或 160G 以上的大容量(1G = 1024M)

软驱:分3.5英寸和5英寸两种,目前常用的都是 3.5英寸软驱,可读写3.5英寸软盘,3.5英寸软盘有1.44M字节的容量,您可以用软盘复制一些不太大的程序和文件用以随身携带,或拷贝一个文件和另外一台电脑进行文件交换,还可以把主要的文件信息备份一份在软盘上,以防电脑出故障时丢失数据。

目前己很少用了,现在人们都用USB口的U盘

光驱:有CD-ROM驱动器,DVD光驱和刻录光驱,是读取光盘,及制作光盘的部件,目前CD-ROM光盘已过时了,大多用DVD光驱

显示卡:是一种常见的电脑扩展卡,它负责将主机运算和处理的结果和主机的状态告诉显示器。 现在人们对显示卡的要求越来越高,是电脑性能的四大部件

声卡:负责将主机处理出来的声音让音箱(或扬声器)“说”出来。
 

相关内容