sparkStreaming与storm的区别:
Sparkstreaming处理数据的过程:
- sparkstreaming:数据是一段时间处理的,是一个微批处理,这个时间是由自己人为设定的。sparkstreaming的吞吐量高。
- Storm:是纯实时处理数据的,
- Storm擅长处理简单的汇总型业务,sparkstreaming擅长处理复杂的计算型的数据。
- Sparkstreaming可以通过控制微批处理的时间,得到一小批数据,可以使用spark core,sparkSQL,擅长处理的是复杂的业务。
- Storm 的事务相对比较完善,sparkstreaming也比较完善
- Storm支持动态资源调度,spark1.2之后也支持动态调度————————————————————————————————————————————————————
Sparkstreaming是流式处理框架,7*24小时不间断
Sparkstreaming启动之后,首先会启动一个job,来接收数据,假设将5S接收的数据做一次处理,这里的5S就是我们可以容忍接受的数据的延迟度,这里的5S也叫作batchInterval。假设batchinterval=5S,图中,每个5S会将接收来的数据封装到一个batch中,这个batch又被封装到一个RDD中,这个RDD又被封装到一个DStream中。【sparkstreaming底层操作就是dstream,dstream底层就是RDD】。
Dstream有自己的transformation 类算子,也是懒执行,需要DStream的outputoperator类算子触发执行,下一步,每批次生成一个DStream之后,spark会启动一个job处理数据。
假设batchinterval=5S,每5S生成一批次数据,假设集群处理完这一批数据需要3S,0-5S一直接受数据,5-8一边接受数据,一边处理数据,8-10S只是接受数据,。。。会造成集群资源不能充分利用。
假设batchinterval=5s,集群处理完一批数据的时间是8S,0-5S接受数据,5-10S一边接收数据,一边处理数据,10-13S一边接受数据一边处理数据,。。。如果接收来的数据是存放在内存中,就会有OOM内存溢出的风险,如果接收来的数据存放在内存中或者磁盘中,会有数据溢写磁盘,处理数据时加大延迟。
————————————————————————————————————————————————————————
Sparkstreaming处理数据:
- 需要一个task一直接受数据
- 将batchinterval时间段内的数据封装到一个batch中,batch又被封装到RDD中,RDD又被封装到DStream中
- DStream有自己的transformations类算子,懒执行,需要OutputOperator类算子触发执行
- 如果batchinterval时间大于集群处理一批次数据的时间,集群会有空闲,集群资源不能充分利用
- 如果batchinterval时间小于集群处理一批次数据的时间,会有任务堆积
- Sparkstreaming读取socket端数据
SparkStreaming
1).SparkStreaming是流式处理框架,7*24小时不间断运行,微批处理。
2).与Storm的区别:
i).Storm是纯实时处理数据,SparkStreaming是微批处理数据
ii).Storm擅长处理汇总型业务,SparkStreaming擅长处理复杂的业务,可以使用SpakrCore,SparkSQL
iii).Storm可以动态调度资源,SparkStreaming1.2之后可以
v).Storm事务相对SparkStreaming比较完善
3).接受处理数据过程:
要使用一个task接受数据,SparkStreaming将一段时间内的接受来的数据当做一批次处理,这个一段时间就是BatchInterval,
将接受数据每隔BatchInterval封装到一个batch中,这个batch又被封装到一个RDD中,这个RDD又被封装到一个DStream中。
每隔batchInterval,就会产生一个DStream,后面要有task处理这个DStream。
假设产生一批次的时间是5s,集群处理这批次数据的时间是3s,集群休息了2s.
假设产生一批次的时间是5s,集群处理这批次数据的时间是8s,集群中就会有任务堆积。
参照WEBUI看有没有任务堆积。