spark 与storm的对比及适用场景
来源:互联网 发布:云计算 视界云 知乎 编辑:程序博客网 时间:2024/05/21 10:04
学习大数据有一段时间了,学完spark 和storm 后,就希望这两个实时处理系统做个对比,以便于在以后的技术选型方面有很好的把握。
转载如下:
http://www.cnblogs.com/yaohaitao/p/5703288.html
对比点
Storm
Spark Streaming
实时计算模型
纯实时,来一条数据,处理一条数据
准实时,对一个时间段内的数据收集起来,作为一个RDD,再处理
实时计算延迟度
毫秒级
秒级
吞吐量
低
高
事务机制
支持完善
支持,但不够完善
健壮性 / 容错性
ZooKeeper,Acker,非常强
Checkpoint,WAL,一般
动态调整并行度
支持
不支持
Spark Streaming与Storm的应用场景
对于Storm来说:
1、建议在那种需要纯实时,不能忍受1秒以上延迟的场景下使用,比如实时金融系统,要求纯实时进行金融交易和分析
2、此外,如果对于实时计算的功能中,要求可靠的事务机制和可靠性机制,即数据的处理完全精准,一条也不能多,一条也不能少,也可以考虑使用Storm
3、如果还需要针对高峰低峰时间段,动态调整实时计算程序的并行度,以最大限度利用集群资源(通常是在小型公司,集群资源紧张的情况),也可以考虑用Storm
4、如果一个大数据应用系统,它就是纯粹的实时计算,不需要在中间执行SQL交互式查询、复杂的transformation算子等,那么用Storm是比较好的选择
对于Spark Streaming来说:
1、如果对上述适用于Storm的三点,一条都不满足的实时场景,即,不要求纯实时,不要求强大可靠的事务机制,不要求动态调整并行度,那么可以考虑使用Spark Streaming
2、考虑使用Spark Streaming最主要的一个因素,应该是针对整个项目进行宏观的考虑,即,如果一个项目除了实时计算之外,还包括了离线批处理、交互式查询等业务功能,而且实时计算中,可能还会牵扯到高延迟批处理、交互式查询等功能,那么就应该首选Spark生态,用Spark Core开发离线批处理,用Spark SQL开发交互式查询,用Spark Streaming开发实时计算,三者可以无缝整合,给系统提供非常高的可扩展性
Spark Streaming与Storm的优劣分析
事实上,Spark Streaming绝对谈不上比Storm优秀。这两个框架在实时计算领域中,都很优秀,只是擅长的细分场景并不相同。
Spark Streaming仅仅在吞吐量上比Storm要优秀,而吞吐量这一点,也是历来挺Spark Streaming,贬Storm的人着重强调的。但是问题是,是不是在所有的实时计算场景下,都那么注重吞吐量?不尽然。因此,通过吞吐量说Spark Streaming强于Storm,不靠谱。
事实上,Storm在实时延迟度上,比Spark Streaming就好多了,前者是纯实时,后者是准实时。而且,Storm的事务机制、健壮性 / 容错性、动态调整并行度等特性,都要比Spark Streaming更加优秀。
Spark Streaming,有一点是Storm绝对比不上的,就是:它位于Spark生态技术栈中,因此Spark Streaming可以和Spark Core、Spark SQL无缝整合,也就意味着,我们可以对实时处理出来的中间数据,立即在程序中无缝进行延迟批处理、交互式查询等操作。这个特点大大增强了Spark Streaming的优势和功能。
http://blog.csdn.net/iefreer/article/details/32715153
Spark基于这样的理念,当数据庞大时,把计算过程传递给数据要比把数据传递给计算过程要更富效率。每个节点存储(或缓存)它的数据集,然后任务被提交给节点。
所以这是把过程传递给数据。这和Hadoop map/reduce非常相似,除了积极使用内存来避免I/O操作,以使得迭代算法(前一步计算输出是下一步计算的输入)性能更高。
Shark只是一个基于Spark的查询引擎(支持ad-hoc临时性的分析查询)
而Storm的架构和Spark截然相反。Storm是一个分布式流计算引擎。每个节点实现一个基本的计算过程,而数据项在互相连接的网络节点中流进流出。和Spark相反,这个是把数据传递给过程。
两个框架都用于处理大量数据的并行计算。
Storm在动态处理大量生成的“小数据块”上要更好(比如在Twitter数据流上实时计算一些汇聚功能或分析)。
Spark工作于现有的数据全集(如Hadoop数据)已经被导入Spark集群,Spark基于in-memory管理可以进行快讯扫描,并最小化迭代算法的全局I/O操作。
不过Spark流模块(Streaming Module)倒是和Storm相类似(都是流计算引擎),尽管并非完全一样。
Spark流模块先汇聚批量数据然后进行数据块分发(视作不可变数据进行处理),而Storm是只要接收到数据就实时处理并分发。
不确定哪种方式在数据吞吐量上要具优势,不过Storm计算时间延迟要小。
总结下,Spark和Storm设计相反,而Spark Steaming才和Storm类似,前者有数据平滑窗口(sliding window),而后者需要自己去维护这个窗口。
- spark 与storm的对比及适用场景
- spark与storm的对比
- spark与storm的对比
- spark与storm的对比
- spark与storm的对比
- spark与storm的对比
- Storm介绍及与Spark Streaming对比
- spark streaming 与 storm的对比
- Spark Streaming与Storm的对比分析
- Spark Streaming与Storm的对比分析
- spark和storm的对比
- (转)Spark Streaming与Storm的对比分析
- 3.Spark Streaming:与Storm的对比分析
- 存储引擎的对比和适用场景
- spark的核心思路、适用场景是什么?
- Storm与Spark Streaming横向对比
- storm记录--4-- Storm适用场景
- Storm Akka Finagle对比及使用场景分析
- 好的博主的博客
- python在linux下使用多进程遇到3770问题解决方法
- android自定义相册的功能实现
- local variable 'bug_cnt' referenced before assignment
- 实现多图批量上传
- spark 与storm的对比及适用场景
- ThreadLocal在项目中的身份校验
- oracle-11g手工建库详细步骤
- 超级台阶
- caffe学习笔记-模型代码生成.prototxt文件
- 如何测试成像畸变?
- ios-RESful简单介绍
- javaweb项目发送邮件自定义发件人名称(javamail)
- [hihocoder]hiho一下 第163周 希尔伯特曲线