静态数据和流数据
- 静态数据是静止不动的,不变化的,历史的数据,一般来说像数据仓库存储的大量历史数据就是静态数据,通过数据挖掘等技术来获取数据信息
- 流数据是大量,快速,随时间变化,持续到达,在时间分布和数量上五上限的一系列动态数据集合体,数据记录是流数据的最小组成单元
- 攻击服务器记录
- 交通工具、工业设备和农业机械上的传感器将数据发送到流处理应用程序。该应用程序再监控性能,提前检测任何潜在缺陷,自动订购备用部件,从而防止设备停机。
- 一家金融机构实时跟踪股市波动,计算风险价值,然后根据股票价格变动自动重新平衡投资组合。
批量计算,实时计算和流计算
批量计算和实时计算
- 流数据和静态数据分别对应实时计算和批量计算
- 批量计算是在充裕的时间内对海量的静态数据进行批量处理的的方式,例如MapReduce
- 实时计算要求的是能够实时得到一个结果,响应时间极短,基本上是秒级相应。处理少量数据可应付。 但是在大数据时代,数据来源多,数据格式多样,数据量大,针对这种数据的实时计算就是流计算。
流计算:
流计算平台是实时获取不同来自不同数据源的海量数据,经过实时分析获取价值
- 数据的价值随着时间的流逝而降低,因此当事件出现时就应该进行处理,而不是像MapReduce一样用存储起来的数据进行计算
- 必须保证实时性,必须保证秒级处理几万条数据甚至几十万的高性能,低延迟的实时性,分布式可扩展,总结就是低延迟,可扩展,高可靠
流计算与hadoop
hadoop是非常优秀的大数据处理架构,有HDFS和MapReduce的大量存储,有MapReduce的计算,但是不能用来处理流数据完成流计算,只能用于批处理计算。
MapReduce处理过程:
MapReduce是把文件分块在DataNode上,然后各台DataNode进行Map处理,接着shuffle洗牌,然后Reduce汇总处理。虽然对于感官来说处理很快,但是Map,shuffle,Reduce每个阶段都要经过多伦处理,无法达到那种低延迟(秒级甚至毫秒级别的处理时间),没有实时性,也有人提出了很多修改方案,但是指挥造成整个hadoop架构的的复杂性,难以扩展和维护。
于是就诞生了专门流数据实时计算系统:Twitter Storm(Apache Storm的前身), Yahoo!S4 , Dstream等等流计算框架平台。
流计算处理流程
传统数据处理
传统的数据处理流程,需要先采集数据并存储在关系数据库等数据管理系统中,之后由用户通过查询操作和数据管理系统进行交互
流计算处理
流计算的处理流程一般包含三个阶段:数据实时采集、数据实时计算、实时查询服务
数据实时采集
数据实时采集阶段通常采集多个数据源的海量数据,需要保证实时性、低延迟与稳定可靠
以日志数据为例,由于分布式集群的广泛应用,数据分散存储在不同的机器上,因此需要实时汇总来自不同机器上的日志数据
目前有许多互联网公司发布的开源分布式日志采集系统均可满足每秒数百MB的数据采集和传输需求,如:Facebook的Scribe,LinkedIn的Kafka,淘宝的Time Tunnel,基于Hadoop的Chukwa和Flume
数据采集系统的基本架构一般有以下三个部分:
Agent:主动采集数据,并把数据推送到Collector部分
Collector:接收多个Agent的数据,并实现有序、可靠、高性能的转发
Store:存储Collector转发过来的数据(对于流计算不存储数据,直接转发数据)
数据实时计算
数据实时计算阶段对采集的数据进行实时的分析和计算,并反馈实时结果
经流处理系统处理后的数据,可视情况进行存储,以便之后再进行分析计算。在时效性要求较高的场景中,处理之后的数据也可以直接丢弃
实时查询服务
实时查询服务:经由流计算框架得出的结果可供用户进行实时查询、展示或储存
传统的数据处理流程,用户需要主动发出查询才能获得想要的结果。而在流处理流程中,实时查询服务可以不断更新结果,并将用户所需的结果实时推送给用户
虽然通过对传统的数据处理系统进行定时查询,也可以实现不断地更新结果和结果推送,但通过这样的方式获取的结果,仍然是根据过去某一时刻的数据得到的结果,与实时结果有着本质的区别
可见,流处理系统与传统的数据处理系统有如下不同:
流处理系统处理的是实时的数据,而传统的数据处理系统处理的是预先存储好的静态数据
用户通过流处理系统获取的是实时结果,而通过传统的数据处理系统,获取的是过去某一时刻的结果
流处理系统无需用户主动发出查询,实时查询服务可以主动将实时结果推送给用户
流计算应用
google广告投放
气候模拟预测