流式计算和实时计算有什么区别?
处理、实时计算属于一类的,即计算在数据变化时,都是在数据的计算实时性要求比较高的场景,能够实时的响应结果,一般在秒级,Yahoo的S4,twiter的storm都属于流处理和实时计算一类的。
Add-hoc和实时查询都计算在query时,实时查询是响应可能千变万化的结果,无法事先通过枚举得到并存储起来,需要根据用户输入的不同实时查询出不同的响应,对实时性要求比较高,比如hbase,内存数据库的查询redis、mongodb等;Add-hoc属于对实时性要求不高的场景。
Add-hoc是针对各种临时的、自定义的需求采取的解决方案,比如hive,需求是不确定的,可以通过编写sql来应对各种问题;最近出现的基于hadoop的实时查询Impala,解决了实时性的要求,比hive效率。
离线计算一般是批量处理数据库的过程,比如利用hadoop的mapreduce;内存计算spark类似于mapreduc
storm是什么类型?
一、Storm概述
Storm是一个分布式的、可靠的、零失误的流式数据处理系统。
它的工作就是委派各种组件分别独立的处理一些简单任务。在Storm集群中处理输入流的是Spout组件,而Spout又把读取的数据传递给叫Bolt的组件。
Bolt组件会对收到的数据元组进行处理,也有可能传递给下一个Bolt。我们能够把Storm集群想象成一个由bolt组件组成的链条集合。数据在这些链条上传输。而bolt作为链条上的节点来对数据进行处理。
Storm和Hadoop集群表面看上去非常类似,可是Hadoop上面执行的是MapReduceJobs,而在Storm上执行的是拓扑topology,这两者之间是非常不一样的,关键差别是:MapReduce终于会结束,而一个topology永远会执行(除非你手动kill掉),换句话说。Storm是面向实时数据分析,而Hadoop面向的是离线数据分析。
如果有这么一种情形。当你看类节目的时候。他们会常常提到一些人名和一些热门话题。如果我们把当中人名和话题的反复次数都记录下来,结果应该是一件非常有趣的事情。
因此,想象在Storm环境下,我们能够把辩论者说的话作为输入流,spout组件来读取这些数据,然后把每一句话发送给bolt1组件,bolt1组件负责把这一句话拆分成一个个单词。再把这些单词发送到bolt2组件。bolt2组件负责统计每一个单词的数量然后把这些信息存储到数据库中。辩论者在不断的说话。而storm不断的实时刷新数据库中结果,当你想查看这些结果时,你仅仅需查询数据库就可以。
如今,你能够想象假设能够把这些spout和bolt均衡分布到整个集群中,而且能够方便地做无限制的扩展,厉害吧?这就是Storm的威力!