Spark Streaming 常见操作、机制总结

Spark Streaming使用Receiver接收数据的话,会将数据存储在Executor内存中。

预写日志机制

预写日志机制,简写为WAL,全称为Write Ahead Log。从Spark 1.2版本开始,就引入了基于容错的文件系统的WAL机制。如果启用该机制,Receiver接收到的所有数据都会被写入配置的checkpoint目录中的预写日志。这种机制可以让driver在恢复的时候,避免数据丢失,并且可以确保整个实时计算过程中,零数据丢失。 要配置该机制,首先要调用StreamingContext的checkpoint()方法设置一个checkpoint目录。然后需要将spark.streaming.receiver.writeAheadLog.enable参数设置为true。 然而,这种极强的可靠性机制,会导致Receiver的吞吐量大幅度下降,因为单位时间内,有相当一部分时间需要将数据写入预写日志。如果又希望开启预写日志机制,确保数据零损失,又不希望影响系统的吞吐量,那么可以创建多个输入DStream,启动多个Rceiver。 此外,在启用了预写日志机制之后,推荐将复制持久化机制禁用掉,因为所有数据已经保存在容错的文件系统中了,不需要在用复制机制进行持久化,保存一份副本了。只要将输入DStream的持久化机制设置一下即可,persist(StorageLevel.MEMORY_AND_DISK_SER)。(之前讲过,默认是基于复制的持久化策略,_2后缀)。

 

设置Receiver接收速度和反压机制

如果集群资源有限,并没有大到,足以让应用程序一接收到数据就立即处理它,Receiver可以被设置一个最大接收限速,以每秒接收多少条单位来限速。

spark.streaming.receiver.maxRate和spark.streaming.kafka.maxRatePerPartition参数可以用来设置,前者设置普通Receiver,后者是Kafka Direct方式。

Spark 1.5中,对于Kafka Direct方式,引入了backpressure机制,从而不需要设置Receiver的限速,Spark可以自动估计Receiver最合理的接收速度,并根据情况动态调整。只要将spark.streaming.backpressure.enabled设置为true即可。 在企业实际应用场景中,通常是推荐用Kafka Direct方式的,特别是现在随着Spark版本的提升,越来越完善这个Kafka Direct机制。优点:1、不用receiver,不会独占集群的一个cpu core;2、有backpressure自动调节接收速率的机制。

 

应用程序升级

由于Spark Streaming应用程序都是7 * 24小时运行的。因此如果需要对正在运行的应用程序,进行代码的升级,那么有两种方式可以实现:

1、升级后的Spark应用程序直接启动,先与旧的Spark应用程序并行执行。当确保新的应用程序启动没问题之后,就可以将旧的应用程序给停掉。但是要注意的是,这种方式只适用于,能够允许多个客户端读取各自独立的数据,也就是读取相同的数据。

2、小心地关闭已经在运行的应用程序,使用StreamingContext的stop()方法,可以确保接收到的数据都处理完之后,才停止。然后将升级后的程序部署上去,启动。这样,就可以确保中间没有数据丢失和未处理。因为新的应用程序会从老的应用程序未消费到的地方,继续消费。但是注意,这种方式必须是支持数据缓存的数据源才可以,比如Kafka、Flume等。如果数据源不支持数据缓存,那么会导致数据丢失。

注意:配置了driver自动恢复机制时,如果想要根据旧的应用程序的checkpoint信息,启动新的应用程序,是不可行的。需要让新的应用程序针对新的checkpoint目录启动,或者删除之前的checkpoint目录。

 

监控应用程序

当Spark Streaming应用启动时,Spark Web UI会显示一个独立的streaming tab,会显示Receiver的信息,比如是否活跃,接收到了多少数据,是否有异常等;还会显示完成的batch的信息,batch的处理时间、队列延迟等。这些信息可以用于监控spark streaming应用的进度。

Spark UI中,以下两个统计指标格外重要:

1、处理时间——每个batch的数据的处理耗时

2、调度延迟——一个batch在队列中阻塞住,等待上一个batch完成处理的时间

如果batch的处理时间,比batch的间隔要长的话,而且调度延迟时间持续增长,应用程序不足以使用当前设定的速率来处理接收到的数据,此时,可以考虑增加batch的间隔时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值