sparkStreaming程序的的部署,调优

  

(1)部署

  

<强>部署方式:火花独立集群,纱集群,meoss集群……
<强>司机的HA 强:如果希望司机程序在失败之后自动重启,那么需要在程序中使用getOrcreate方法重构streamingContext对象,以及在spark-submit中添加参数。
<强>检查点目录的设置强:如果程序使用到检查站目录,就必须配置一个hdfs兼容的文件系统作为检查点目录,因为程序是分布式的,不能将检查点单独的设置在某一个节点
<强>接收数据的方式:接收机和直接
 <强>接收方式:需要给执行者分配足够的资源,因为接收器接受的数据时存储在遗嘱执行人的内存中,尤其是在做窗口操作时,必须保证有足够的内存存储相应时间内的所有数据。spark.streaming.receiver.writeAheadLog.enable参数设置为真,用于开启接收方式的细胞膜,保证数据不丢失。
 <强>直接方式:对于卡夫卡直接方式,引入了背压机制,从而不需要设置spark.streaming.kafka.maxRatePerPartition,火花可以自动的估计接收最合理的接收速度,并根据情况动态调整,只需要设置:spark.streaming.backpressure.enabled设置为真实即可

  

(2)调优

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

sparkStreaming程序的的部署,调优