本期概览:
1 Executor WAL
2 消息重放
3 其他
Executor 的数据安全容错非常重要(计算容错主要借助Spark Core的容错机制容错,天然就是容错的),这里的容错是数据的安全容错。
最天然的容错方式是弄一份副本,当前数据有错误的时候用副本数据,另外一种方式是支持数据重放,就是比如说当前10秒内数据错误,那么可以恢复到前10秒的数据。也就是基于WAL的容错的机制。
通过指定存储级别为MEMORY_AND_DISK_SER2存储副本
在这里可以指定备份的数量。非常的方便
存储block并将存储的信息报告给driver
这里一共有俩种方式来写数据,一种是WriteAheadLogBasedBlockHandler,一种是BlockManagerBasedBlockHandler.这俩种方式保证了数据可以回放。并且在这个过程中,如果没有指定checkpoint的目录的话,会抛出异常。
这里的好多的相关的配置是和WAL相关的,通过WriteAheadLogUtils来进行调配。
接下来,我们再来谈谈内存中做备份的容错方式吧。
StorageLevel是main方法中构造出来的receiver的传入的参数。
存储的级别默认情况下是MEMORY_AND_DISK_SER_2的方式。
进入 BlockManagerBasedBlockHandler的源码类中
具体是通过blockManager的putIterator方法传入blockId,countIterator,storageLevel三个参数进行存储管理的。
再看putIterator方法的具体实现。实质上调用了doPut的方法,并且过程中默认将tellMaster设置为true.
紧接着再看doPut方法。doPut内部调用了requre的方法,如果blockID,level,level的数据出现问题,都将有默认值....is null 或者无效。
doPut方法中,还创建了BlockInfo,用于记录 block的信息。
replicationFuture 对象发送消息,开始备份数据。
// If we're storing bytes, then initiate the replication before storing them locally.
重要的是终于开始备份鸟。
/**
* Replicate block to another node. Not that this is a blocking call that returns after
* the block has been replicated.
*/
此时,blockManager做备份的方式就完了。接下来我们再次分享WAL的方式,在写数据之前,先通过日志记录数据。然后开始写入数据。其实Hbase写入数据的时候也是WAL的方式。
/**
* Create a WriteAheadLog for the receiver. If configured with custom WAL class, it will try
* to create instance of that class, otherwise it will create the default FileBasedWriteAheadLog.
*/
如果没有CustomWAL(sparkConf)的话,默认是FileBasedWriteAheadLog,
用来同时处理futrues的block manager 和WAL,所以开启俩个线程,以便这俩个任务可以同时进行。
这个storeBlock方法在存储block到blcok manager过程中,和WAL过程中都要调用执行。很重要。
子类具体实现WriteAheadLogRecordHandle,这个抽象类代表一个指向record数据记录的句柄,它包含了读取数据record必要的信息,通过一个实现了WriteAheadLog的类返回可以得到。
根据以下的图中的数据,可以准确的读取对应的数据record
根据时间,清除掉所有过时的数据(比threshold time)更过时的数据。
WriteAheadLog有俩个子类,一个是BatchedWriteAheadLog,一个是FileBasedWriteAheadLog
三:支持数据重放
谈到数据重放,我们可能立刻想到kafka,kafka可以重新进行读取,一旦数据处理崩溃了或者没出理完,kafka也不会进行ack确认,kafka还是认为没有处理数据,数据可以重放。kafka天然就是有容错和副本,本身就可以做为文件系统了。有Receiver的方式和DirectApi的方式。但是,如果数据消费了,但是突然崩溃了。可能造成数据重复消费的问题。
注意:kafka的所在的包是kafka.consumer包。、
不过,话说回来,容错也是要代价的,容错要备份数据,备份数据需要耗较长的时间。有些数据可以在时间和空间以及安全性之间做平衡考量。
thart is all,thank you .

浙公网安备 33010602011771号