详解数据计算能力的四种类型
我们将计算能力根据场景抽象分成四大类:批计算、流计算、在线查询和即席分析。不同场景配合不同的存储和计算框架来实现,以满足业务的复杂需求。
1、批计算
随着数据量的不断增加,原有的计算框架已经无法支撑 TB、PB 甚至 EB 级规模的数据处理,在这种大数据场景下,提供成本低廉且可水平扩容的计算能力,采用分而治之的方法是必然的。传统的数据处理方式通常是将数据导入至专门的数据分析工具中,这样会面临两个问题:
源数据非常大时,往往数据的移动就要花费较长时间。
传统的数据处理工具往往是单机的,或系统架构无法快速扩容,面对海量数据时,数据处理的时间也是一个很大的问题。
MapReduce 是一种分布式编程模型,采用“分而治之”的思想,将一个大规模数据集分解为多个小规模数据,然后分发给集群中多个节点共同完成计算。这样可以有效降低每一部分的运算复杂度,达到提高运算效率的目的。
MapReduce 模型将计算分为两个阶段:Map 阶段和 Reduce 阶段。Hadoop 将 MapReduce 的输入数据划分为等长的数据块,称为输入分片(Input Split),为每一个分片构建一个 Map 任务,并且由该任务来运行用户自定义的 Map 函数,以处理分片中的每条记录。Map 任务输出时要按照 Reduce 任务的数量进行分区,即为每一个 Reduce 任务新建一个分区,同时对每个分区进行排序。Reduce 任务启动后,会向所有 Map 任务拉取数据并在 Reduce 端合并,Map 任务和 Reduce 任务之间的数据流称为混洗(Shuffle)。最后由用户自定义的 Reduce 函数处理,其输出通常存储在 HDFS 上,以实现可靠存储。
MapReduce 由于设计上的一些限制,导致处理性能较慢,针对这个问题,业界也有很多优化方案及替代产品,但真正发展起来的,目前主要有 Spark。Spark 也是一个批量计算框架,它将数据抽象成 RDD、DataFrame,这是一种分布式的内存抽象,允许在大型集群上执行基于内存的计算,大大减少了迭代计算所需的开销。相比 MapReduce,Spark 在以下几方面具有优势:
数据处理技术:Spark 将执行模型抽象为通用的有向无环图(DAG)执行计划,这可以将多个 Stage 串联或者并行执行,而无须将 Stage 的中间结果输出到 HDFS 中。
数据格式和内存布局:Spark RDD 能支持粗粒度写操作,而对于读操作,RDD 可以精确到每条记录,这使得 RDD 可以用来作为分布式索引。
执行策略:MapReduce 在数据 Shuffle 之前花费了大量的时间来排序,Spark 支持基于 Hash 的分布式聚合,调度中采用更为通用的任务执行 DAG,每一轮的输出结果都可以缓存在内存中。
2、流计算
批计算已经能满足多数大数据计算场景,然而要更快速、高效地获取数据中的价值,批计算已经无法满足需求。此时,一些优秀的实时处理框架,如 Storm、Flink、Spark Streaming 等逐渐发展起来,被广泛使用。 流计算的常见应用场景如下:
流式 ETL:集成流计算现有的诸多数据通道和 SQL 灵活的加工能力,对流式数据进行实时清洗、归并、结构化处理。同时,对离线数仓进行有效补充和优化,为数据的实时传输提供可计算通道。
流式报表:实时采集、加工流式数据,实时监控和展现业务和客户的各类指标,让数据化运营实时化。
监控预警:对系统和用户的行为进行实时检测和分析,实时监测和发现危险行为。
在线系统:实时计算各类数据指标,并利用实时结果及时调整在线系统的相关策略,在内容投放、无线智能推送等领域有大量的应用。
3、在线查询
在线查询需要处理大规模的数据结果集,同时又需要提供一些快速计算的能力,如条件过滤筛选、在线检索等能力,快速从大规模结果中筛选和检索出结果信息,并且支持高并发、低延迟的快速响应。这种能力批计算、流计算都不具备,因此需要提供在线查询的能力,常见的在线计算框架有 Elasticsearch、Redis 等,其主要应用场景是 OLTP 类的简单的增、删、改、查、全文检索等相关操作。
在线查询的常见应用场景如下:
画像服务:根据对象标识提供具体的查询服务,如通过 Redis 可以提供低延迟、高并发的查询服务能力;通过 HBase 可以提供大规模数据的查询服务能力,征信查询就是类似的服务。
搜索的应用场景:提供搜索引擎的能力,为用户提供模糊匹配、意图识别检索等能力,快速检索需要的内容,如常见的文档搜索、商品搜索等。
圈人场景:通过一些特定的条件规则,可以快速筛选出业务所需要的群体,为后续的运营、营销等工作的开展提供支撑。
4、即席分析
即席分析是指面对大规模的数据集,如何快速进行数据的多维交叉分析,其大部分是聚合型操作,如 group by、sum、avg、count 等。批计算有足够的灵活性,但耗时比较久,一些传统的关系型数据库以及数仓架构,在一定维度的场景下可以满足响应要求,但数据量受限。在数据应用中,分析类应用的占比一直不低,因此一些优秀的处理框架(如 Impala、Kylin、ClickHouse 和 AnalyticDB 等即席计算框架)逐渐发展起来。针对即席分析的复杂场景,通过对时间、空间的权衡,即席分析常见的实现方式有两种: ·
ROLAP:以关系数据库为核心,以关系型结构进行多维数据的表示和存储,结合星型模式和雪花模式实现。
MOLAP:基于多维数据组织的实现,以多维数据组织为核心,形成“立方块”的结构,通过对“立方块”进行各类处理来产生多维数据报表。
即席分析的常见应用场景如下:
交互式数据分析:企业运营人员在日常工作中经常需要通过 SQL 从各个维度对当前业务进行分析,提供分析结果以便开展后续工作。离线计算的场景等待时间较久,用户体验不好,即席分析可以比较好地规避这个问题。
群体对比分析场景:在业务中经常会有 A/B 测试场景,针对不同的群体,从各个维度对比分析也是即席分析经常支撑的场景。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/3898c94433f72b1c4203fbe25】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论