sparkStreaming程序的的部署、调优

(1)部署

部署方式:spark standalone集群、yarn集群、meoss集群...
driver的HA:如果希望driver程序在失败之后自动重启,那么需要在程序中使用getOrcreate方法重构streamingContext对象,以及在spark-submit中添加参数。
Checkpoint目录的设置:如果程序使用到checkpoint目录,就必须配置一个hdfs兼容的文件系统作为checkpoint目录,因为程序是分布式的,不能将checkpoint单独的设置在某一个节点
接收数据的方式: Receiver和direct
Receiver方式:需要给executor分配足够的资源,因为receiver接受的数据时存储在executor的内存中,尤其是在做window操作时,必须保证有足够的内存存储相应时间内的所有数据。 spark.streaming.receiver.writeAheadLog.enable参数设置为true,用于开启receive方式的WAL,保证数据不丢失。
direct方式:对于kafka direct方式,引入了backpressure机制,从而不需要设置spark.streaming.kafka.maxRatePerPartition,spark可以自动的估计receive最合理的接收速度,并根据情况动态调整,只需要设置:spark.streaming.backpressure.enabled设置为true即可

(2)调优

  • 设置合理的CPU资源

    • 在streaming程序中,CPU资源的使用可以分成两大类用于接收数据和用于处理数据,我们需要设置足够的CPU资源,使得有足够的CPU资源用于接收数据和处理数据,这样才能及时高效地处理数据。
  • 数据接收的性能优化
    • 通过网络接收数据时,会将数据反序列化,并存储在spark的内存中。
    • 数据的并行化接收,就是启动多个receiver,设置多个DStream输入源
    • 调节block interval参数,对于大多数的receiver来说,在将接收的数据保存的时候,都会做数据切分成一个一个的block,而block的个数决定了每一个batch的分区个数,而分区个数则决定了transformation启动的task的个数:batch interval / block interval(spark.streaming.blockInterval,默认为200ms,最小值为50ms)
  • Spark数据处理并行度调优
    • 如果在计算的任何stage中使用的并行task的数量没有足够多,那么集群的资源不能得到很好的利用,可以使用spark.default.parallelism,调整默认的并行的task个数,也可以在调用有shuffle的算子的时候手动指定numPar个数,调整task的并行度。
  • Spark的任务调优
    如果每秒钟启动的task过于多,那么发送这些task去worker节点上的executor的性能开销就会比较大,此时延迟就会变得高了。
    • Task的序列化:使用Kryo序列化机制来序列化task,减少task的大小,从而减少发送到executor的时间
    • 执行模式,使用spark的自带的standalone运行spark程序,可以达到更少的task启动时间
  • 序列化的调优
    • 输入数据,在receiver接收的数据时存储在executor内存中的,需要保证数据的0丢失从而序列化
    • 流式计算操作生成的持久化的RDD:流式计算操作生成的持久化的RDD,以及需要被窗口操作的数据都需要持久化
  • batch interval调优
    • 对于流式计算而言,为了使其可以稳定运行以及高效运行,最重要的就是对于batch生成之后,就尽可能快的处理掉。 在构建StreamingContext的时候,需要我们传进一个参数,用于设置Spark Streaming批处理的时间间隔。Spark会每隔batchDuration时间去提交一次Job,如果你的Job处理的时间超过了batchDuration的设置,那么会导致后面的作业无法按时提交,随着时间的推移,越来越多的作业被拖延,最后导致整个Streaming作业被阻塞,这就间接地导致无法实时处理数据,最终导致程序崩溃。所以针对自己的业务,设置批处理时间尤为重要。
  • Spark内存调优
    • DStream的持久化,将大量的数据持久化为byte数据,减少了数据序列化话后的对象,降低了GC的频率。当然为了进一步的降低内存的使用率,可以使用压缩:spark.rdd.compress这是为true即可
    • 清理旧数据,将保存在内存中已经被使用过的数据进行删除,释放内存。以window操作为例,如果窗口的时间为10分钟,spark中会保持这10分钟的数据,之后在处理完成之后,就会将数据进行清除

原文地址:http://blog.51cto.com/14048416/2339937

时间: 2024-10-12 12:16:14

sparkStreaming程序的的部署、调优的相关文章

Java程序性能优化——性能调优层次

为了提升系统性能,开发人员可以从系统的各个角度和层次对系统进行优化.除了最常见的代码优化外,在软件架构上.JVM虚拟机层.数据库以及操作系统层都可以通过各种手段进行调优,从而在整体上提升系统的性能. 设计调优 设计调优处于所有调优手段的上层,它往往需要在软件开发之前进行.在软件开发之初,软件架构师就应该评估系统可能存在的各种潜在的问题,并给出合理的设计方案.由于软件设计和架构对软件整体有决定性的影响,所以,设计调优对系统性能的影响也是最大的.如果说,代码优化.JVM优化都是对系统微观层面上"量&

【JAVA】JAVA应用程序以及JVM性能调优实例

项目背景,数据库A表分库,分库字段为AID 第一.通过visualvm监控对CPU进行远程抽样,可以得到你所监控的package下各个方法的执行时间,从而进行针对性的调优 以上可以进行抽样,右边可以设置你想抽样的package 同时监视器tab,可以观察CPU,堆内存等情况,主要看堆内存,可以观察YGC的频率. 在我的真实案例中发现抽样的时间最长在A表查询上,结果通过mysql的慢查询日志发现,对A表的查询,并没有用分库字段AID,所以很慢,最后对dao进行改进,通过分库字段AID进行查询,从而

tomcat安装部署调优

工作中遇到了在linux系统中部署tomcat,由于是在生产环境中部署,还是些许谨慎,这里把部署的方案截图展示. 1.解包 tar -xvf apache-tomcat-7.0.68 2.修改端口号 在解压出来的目录结构中有conf目录,需要修改的是server.xml目录 这里要注意,端口号不能大于65535,因为都是使用的tcp连接,tcp的端口号不能超过65535,在一台主机上部署的多个tomcat的端口号也不能相同,因为只要一个端口在监听状态,另一个进程无法将该端口号激活. <Serve

php部署调优

转自Laravel学院,  作者:学院君 最近刚好想到一些php.ini优化问题处理. 很多文章都是把配置全部翻译. (内容翻译太多和流程结构写的不是很清晰,看起来也头大.还是建议全部内容看几遍了解一下. [个人意见]) 刚好看到前辈都写好车轮子,我就直接拿来理解收藏.总计4篇.  服务器部署篇(一):服务器主机选择及初始化配置 — 新增用户及密钥对认证 查询构建器链接:  https://laravelacademy.org/post/7508.html  服务器部署篇(二):在服务器上对 P

性能调优工具

[性能调优工具jps.jstack.jmap.jhat.jstat.hprof使用详解]http://my.oschina.net/feichexia/blog/196575 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些

JVM调优基础

一.JVM调优基本流程 1.划分应用程序的系统需求优先级 2.选择JVM部署模式:单JVM.多JVM 3.选择JVM运行模式 4.调优应用程序内存使用 5.调优应用程序延迟 6.调优应用程序吞吐量 二.选择JVM部署模式:单JVM.多JVM 1.单JVM 优点:不需要管理多个JVM,降低管理成本: 应用程序消耗内存数量较少 缺点:存在单点故障,一个JVM失效时,整个系统失效. 2.多JVM 优点:更好的可用性,避免单点故障:更低延迟,因为垃圾收集所产生的停顿是程序延迟的主要原因,多JVM减少了每

转 hbase参数的意义和调优

测试时发现理解这些参数都代表什么意义非常的重要,而且通过参数调优可以提高性能,希望仔细阅读一下每个属性代表的意义! 感谢原作者的整理,转来仅做学习笔记使用 <span style="font-family:Microsoft YaHei;"><?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"

性能分析与调优的原理

最近一直纠结性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库.从操作系统(CPU调度,内存管理,进程调度,磁盘I/O).网络.协议(HTTP, TCP/IP ),还是从应用程序代码,数据库调优,中间件配置等方面入手. 单一个中间件又分web中间件(apache .IIS),应用中间件(tomcat .weblogic .webSphere )等,虽然都是中间件,每一样拎出来往深了学都不是一朝一夕之功.但调优对于每一项的要求又不仅仅是“知道”或“会使用”这么简单.起码要达到“如何更好的使

Java从入门到架构师|高并发|高性能|高可用|分布式|性能调优|设计模式|大型电商项目

没有设计的思想,你就不能成为一名架构师.架构师是一个能撸的了一手好代码,画的了一个漂亮的UML/原型,写的了一篇技术文档,更加能解决好项目关键技术的综合人才.架构师=前端工程师+后端程序员+系统分析师+关键技术解决+各种技术搭配+设计模式+部署调优+其他,可见架构师是多面手,在项目当中起到连接管理与项目成员的重要角色.因此,在通往大神级的架构师的道路上,你需要懂需求.设计.代码.部署.架构.服务器.运维.调优等等. 简单系统架构图 一个能担负起企业级应用的架构师,脑海里常出现的词会是这些:负载均