使用范围比较:吞吐量对比:Storm以数据记录为最小单位进行处理和容错。由于单挑记录处理的成本较高,spark streaming首先将数据切分成一定时间范围内Duration的数据集,然后积累一批(batch)Duration数据集后单独启动一个任务线程处理。这种方式大大提供了spark streamming流式计算处理的吞吐量。
容错比较。由于storm用于传统关系型数据库类得的以数据记录为单位容错,所以一条条数据恢复显然很慢。而spark streamming借助于spark核心提供了从DAG重新调度任务和并行,能快速的完成数据从故障中的恢复工作。
spark streamming 流式计算执行过程分析
Receiver:spark streaming 内置的输入流接受器或者用户自定义的接收器,用于从数据源接受源源不断的数据流
currentBuffer用于缓存输入流接收器接收的数据流。
blockIntevalItimer:一个定时器,用于将CurrentBuffer中缓存的数据封装为Block后放入blocksForPublishing
blocksForPushing:用于缓存将要使用的Block
blockPushingThread:此线程每隔100毫秒从blocksForPushing中取出一个Block存入存储体系,并缓存到ReceivedBlockQueue。
Block Batch :Block 批次,按照批次时间间隔,从ReceivedBlockQueue中获取一批block。
JobGenerator:Job生成器,用于给每一批Block生成一个job
ssc.sparkContext.makeRDD(1 to 50,50).map(x=>(x,1)).reduceByKey(_+_,20).collection这条语句通过运行重复的作业来确保所有的slave都已经注册 ,避免所有的receivers都在一个节点上
网友评论