流计算简介
数据总体上分为静态数据和流数据。对静态数据和流数据的处理,对应着两种截然不同的计算模式:批量计算和实时计算。批量计算以“静态数据”为对象,可以在很充裕的时间内对海量数据进行批处理,计算得到有价值的信息。Hadoop就是很典型的批处理模型,有HDFS和HBase存放大量的静态数据,由MapReduce负责对海量数据执行批量计算。流数据必须采用实时计算,实时计算最重要的一个需求是能够实时得到计算结果,一般要求响应时间为秒级。现在,数据不仅格式复杂,而且数量量巨大,这给实时计算带来很大的挑战。因此,针对流数据的实时计算-流计算,应运而生。
流计算有个基本概念,即数据的价值随着时间的流逝而降低。因此,当事件出现时应该立刻进行处理,而不是缓存起来进行批量处理。为了及时处理流数据,需要一个低延迟、可扩展、高可靠的处理引擎。
流计算系统的需求特性:
• 高性能。处理大数据的基本要求,如每秒处理几十万条数据。
• 海量式。支持TB级甚至是PB级的数据规模。
• 实时性。必须保证一个较低的延迟时间,达到秒级别,甚至是毫秒级别。
• 分布式。支持大数据的基本架构,必须能够平滑扩展。
• 易用性。能够快速进行开发和部署。
• 可靠性。能可靠地处理流数据。
流计算处理过程包括数据实时采集、数据实时计算和实时查询服务。
数据实时采集:数据实时采集阶段通常采集多个数据源的海量数据,需要保证实时性、低延迟与稳定可靠。以日志数据为例,由于分布式集群的广泛应用,数据分散存储在不同的机器上,因此需要实时汇总来自不同机器上的日志数据。目前有许多互联网公司发布的开源分布式日志采集系统均可满足每秒数百MB的数据采集和传输需求,如Facebook的Scribe、LinkedIn的Kafka、淘宝的TimeTunnel,以及基于Hadoop的Chukwa和Flume等。
数据实时计算:流处理系统接收数据采集系统不断发来的实时数据,实时的进行分析计算,并反馈实时结果。
实时查询服务:经由流计算框架得出的结果可供用户及逆行试试查询、展示或储存。
SparkStreaming 简介
Spark Streaming时构建在Spark上的实时计算框架,他扩展了Spark处理大规模流式数据的能力。Spark Streaming可结合批处理和交互查询,适合一些需要对历史数据及逆行结合分析的应用场景。
Spark Streaming是Spark的核心组件之一,为Spark提供了可扩展、高吞吐、容错的流计算能力。下图为Spark Streaming支持的输入、输出数据源。
Spark Streaming的基本原理是将实时输入流以时间片(秒级)为单位进行拆分,然后经Spark引擎以类似批处理的方式处理每个时间片数据。
在Spark中,一个应用(Application)由一个任务控制节点(Diver)和若干个作业(Jobÿ