Spark-Streaming的基本原理以及预写日志机制和checkpoint(三)
合适启用checkpoint机制
1.使用了有状态的transformation操作—比如updateStateByKey,或者reduceByKeyAndWindow操作被使用了,
那么checkpoint目录要求是必须提供的,也就必须开启checkpoint机制,从而进行周期性的RDD checkpoint
2.要保证可以从Driver失败中进行恢复—元数据checkpoint需要启用,来进行这种情况的恢复,
要注意的是,并不是说所有的Spark-Streaming应用程序,都要启用checkpoint机制,如果不强制要求从Driver
失败中自动进行恢复,有没有使用有状态的transformation操作,那么就不需要启用checkpoint,事实上
这么做反而是用利于提升性能的。
启动预写日志机制
预写日志机制,简写为WAL,全称为Write Ahead Log,从Spark 1.2版本开始,就引入了基于容错的文件系统的WAL机制,如果启用该机制,Receiver接收到的所有数据都会被写入配置的checkpoint目录中的预写日志这种机制可以让driver在恢复的时候,避免数据丢失,并且可以确保整个实时计算过程中,零数据丢失
要配置该机制,首先要调用StreamingContext的checkpoint()方法设置一个checkpoint目录,然后需要将spark.streaming.receiver.writeAheadLog.enable参数设置为true
然而这种极强的可靠性机制,会导致Receiver的吞吐量大幅度下降,因为单位时间内有相当一部分时间需要将数据写入预写日志,如果又希望开启预写日志机制,确保数据零损失,又不希望影响系统的吞吐量,那么可以创建多个输入DStream启动多个Reciver,然后将这些receiver接收到的数据使用ssc.union()方法将这些dstream中的数据进行合并
此外在启用了预写日志机制之后,推荐将复制持久化机制禁用掉,因为所有数据已经保存在容错的文件系统中了,不需要再用复制机制进行持久化,保存一份副本了,只要将输入的DStream的持久化机制设置一下即可。
更多关于“云计算培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。