大数据的计算模式主要分为:
- 批量计算(batch computing)
- 流式计算(stream computing)
现实世界中,所有的数据都是以流式的形态产生的,不管是哪里产生的数据,在产生的过程中都是一条条地生成,最后经过了存储和转换处理,形成了各种类型的数据集。如下图所示,根据现实的数据产生方式和数据产生是否含有边界(具有起始点和终止点)角度,将数据分为两种类型的数据集,一种是有界数据集,另外一种是无界数据集。
- 有界数据集
有界数据集具有时间边界,在处理过程中数据一定会在某个时间范围内起始和结束,有可能是一分钟,也有可能是一天内的交易数据。对有界数据集的数据处理方式被称为批计算(Batch Processing),例如将数据从RDBMS或文件系统等系统中读取出来,然后在分布式系统内处理,最后再将处理结果写入存储介质中,整个过程就被称为批处理过程。而针对批数据处理,目前业界比较流行的分布式批处理框架有Apache Hadoop和Apache Spark等。
- 无界数据集
对于无界数据集,数据从开始生成就一直持续不断地产生新的数据,因此数据是没有边界的,例如服务器的日志、传感器信号数据等。和批量数据处理方式对应,对无界数据集的数据处理方式被称为流式数据处理,简称为流处理(Streaming Process)。可以看出,流式数据处理过程实现复杂度会更高,因为需要考虑处理过程中数据的顺序错乱,以及系统容错等方面的问题,因此流处理需要借助专门的流数据处理技术。目前业界的Apache Storm、Spark Streaming、Apache Flink等分布式计算引擎都能不同程度地支持处理流式数据。
- 统一数据处理
有界数据集和无界数据集只是一个相对的概念,主要根据时间的范围而定,可以认为一段时间内的无界数据集其实就是有界数据集,同时有界数据也可以通过一些方法转换为无界数据。例如系统一年的订单交易数据,其本质上应该是有界的数据集,可是当我们把它一条一条按照产生的顺序发送到流式系统,通过流式系统对数据进行处理,在这种情况下可以认为数据是相对无界的。对于无界数据也可以拆分成有界数据进行处理,例如将系统产生的数据接入到存储系统,按照年或月进行切割,切分成不同时间长度的有界数据集,然后就可以通过批处理方式对数据进行处理。从以上分析我们可以得出结论:有界数据和无界数据其实是可以相互转换的。有了这样的理论基础,对于不同的数据类型,业界也提出了不同的能够统一数据处理的计算框架。
目前在业界比较熟知的开源大数据处理框架中,能够同时支持流式计算和批量计算,比较典型的代表分别为Apache Spark和Apache Flink两套框架。其中Spark通过批处理模式来统一处理不同类型的数据集,对于流数据是将数据按照批次切分成微批(有界数据集)来进行处理。Flink则从另外一个角度出发,通过流处理模式来统一处理不同类型的数据集。Flink用比较符合数据产生的规律方式处理流式数据,对于有界数据可以转换成无界数据统一进行流式,最终将批处理和流处理统一在一套流式引擎中,这样用户就可以使用一套引擎进行批计算和流计算的任务。
流数据与流式计算流数据是指在时间分布和数量上无限的一系列动态数据集合体,数据的价值随着时间的流逝而降低,因此必须实时计算给出秒级响应。
流式计算,顾名思义,就是对数据流进行处理,是实时计算。批量计算则统一收集数据,存储到数据库中,然后对数据进行批量处理的数据计算方式。
流式处理可以用于两种不同场景: 事件流和持续计算。
1、事件流
事件流具能够持续产生大量的数据,这类数据最早出现与传统的银行和股票交易领域,也在互联网监控、无线通信网等领域出现、需要以近实时的方式对更新数据流进行复杂分析如趋势分析、预测、监控等。简单来说,事件流采用的是查询保持静态,语句是固定的,数据不断变化的方式。
2、持续计算
比如对于大型网站的流式数据:网站的访问PV/UV、用户访问了什么内容、搜索了什么内容等,实时的数据计算和分析可以动态实时地刷新用户访问数据,展示网站实时流量的变化情况,分析每天各小时的流量和用户分布情况;
比如金融行业,毫秒级延迟的需求至关重要。一些需要实时处理数据的场景也可以应用Storm,比如根据用户行为产生的日志文件进行实时分析,对用户进行商品的实时推荐等。
流式计算和批量计算区别主要体现在以下几个方面:
- 数据时效性不同
- 流式计算实时、低延迟
- 批量计算非实时、高延迟。
- 数据特征不同
- 流式计算的数据一般是动态的、没有边界的
- 批处理的数据一般则是静态数据。
- 应用场景不同
- 流式计算应用在实时场景,时效性要求比较高的场景,如实时推荐、业务监控等
- 批量计算一般说批处理,应用在实时性要求不高、离线计算的场景下,数据分析、离线报表等。
- 运行方式不同
- 流式计算的任务持续进行的
- 批量计算的任务则一次性完成。
共有以下几类:
- 第一类,商业级流式计算平台(IBM InfoSphere Streams、中兴飞流Yita等)。
- 第二类,开源流式计算框架(Twitter Storm、S4等)。
- 第三类,公司为支持自身业务开发的流式计算框架。
相关产品:
- Strom:Twitter 开发的第一代流处理系统。
- Heron:Twitter 开发的第二代流处理系统。
- Spark streaming:是 Spark 核心 API 的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。
- Flink:是一个针对流数据和批数据的分布式处理引擎。
- Apache Kafka:由 Scala 写成。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
- Yita:中兴飞流自研的高性能分布式异步计算引擎,具有批流混合、海量吞吐、极低时延和智能计算的特性。
目前市面上主流的 OLAP 数据库的选型:
- Hive、Hawq、Impala:基于 SQL on Hadoop
- Presto 和 Spark SQL 类似:基于内存解析 SQL 生成执行计划
- Kylin:用空间换时间、预计算
- Druid:数据实时摄入加实时计算
- ClickHouse:OLAP 领域的 HBase,单表查询性能优势巨大
- Greenpulm:OLAP 领域的 PostgreSQL。