对checkpoint()的理解

  在sparkStreaming中,引入了checkpoint()机制,究竟是干嘛用的?

    我们试想一下作为一个流式计算系统,通俗来说就是流水线,既然是流水线,万一中间出现什么故障该怎么办?可靠性怎么能够保证。亦或者对于流水线来说,之前的流水对下一个流水肯定是会影响的,如果不设置checkpoint,那么计算肯定不会考虑到之前的历史数据对其的影响,鉴于这两种考虑,sparkStreaming引入了checkpoint,不仅仅能够保证可靠性,而且 计算的时候考虑历史数据对其的影响。

  那checkpoint是如何对其进行可靠性的保证的呢?说白了,就是备份,要想数据的流式计算中出了故障后能够恢复,数据从何而来?就是checkpoint中而来。不过,spark不是提供了cache()算子的吗?有它不就能够保证可靠性吗?单单用缓存肯定不行,因为我们知道缓存是放在内存当中,内存毕竟没有落地,说不好就没了数据。可靠性何从谈起?再者,流式计算通常是计算很长一段时间,在这么一段时间里如果仅仅是利用缓存,很难保证数据不丢失,没法保证可靠性。checkpoint就是需要我们手动定义一个路径,然后把重要的数据落地到该路径下,如果是单机环境,放在本机路径下就好了,如果是集群就放在HDFS上,这都是能够保证数据不丢失的。如果我们不手动删去,checkpoint下的数据是不会丢失的,哪怕是重新开机,说明checkpoint下的文件压根不是一个临时文件,这十分有利于数据的不丢失。我们来看一个具体的例子:

import org.apache.spark.streaming._
//设置每一秒进行DStream一次
val ssc = new StreamingContext(sc,Seconds(1));
//这就是我们落地的路径
ssc.checkpoint("file:///home/checkpointData");
//读取我们需要处理的文件夹
val lines = ssc.textFileStream("file:///home/checkpointData");
//这里我们具体要做啥,比如我们Wordcount
val wordCounts = lines.flatMap(_.split(" ")).map((_,1)).updateStateByKey{
			  (seq, op:Option[Int]) => { Some(seq.sum + op.getOrElse(0)) }
			}
wordCounts.print();
//启动sparkstreaming
ssc.start();

这里做的需求就是无论什么时候的文件放进去都会统计字数,进行累计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值